java - 如何从 ArrayList 更新 JComboBox 的内容?

标签 java swing arraylist jcombobox

我有基于 ArrayList 的 JComboBox:

private ArrayList<String> klienci = new ArrayList<String>();
private JComboBox klienciLista;

然后我将它添加到构造函数中:

klienciLista = new JComboBox(klienci.toArray());
klienciLista.setPrototypeDisplayValue("#############################");
panel.add(klienciLista); //JPanel panel

一开始列表是空的。客户端在线程中通过socket new ArrayList获取:

public void run() {
  try {
   host = InetAddress.getLocalHost().getHostName();
   socket = new Socket(host, SERVER_PORT);
   input = new ObjectInputStream(socket.getInputStream());
   output = new ObjectOutputStream(socket.getOutputStream());
   output.writeObject(nazwa);
  } catch (IOException e) {
   System.out.println(e);
   JOptionPane.showMessageDialog(null,
     "Polaczenie sieciowe dla klienta nie moze byc utworzone");
   setVisible(false);
   dispose(); // zwolnienie zasobów graficznych
      // okno graficzne nie zostanie utworzone
   return;
  }
  try {
   while (true) {
    container = new Object[2];
    container = (Object[]) input.readObject();
    String m = (String) container[0];
    setKlienci((ArrayList<String>) container[1]);
    klienciLista = new JComboBox(klienci.toArray());
    String pom = textArea.getText();
    textArea.setText(pom + ">>> " + m + "\n");
    klienciLista.revalidate();
    panel.revalidate();
    panel.repaint();

    if (m.equals("exit")) {
     input.close();
     output.close();
     socket.close();
     setVisible(false);
     dispose();
     break;
    }
   }
  } catch (Exception e) {
   System.out.println(e);
   JOptionPane.showMessageDialog(null,
     "Polaczenie sieciowe dla klienta zostalo przerwane");
   setVisible(false);
   dispose();
  }
 }

我想要做的是用可用客户端的新 ArrayList 填充我的 JComboBox klienciLista,但这并没有发生。连接后,服务器发送arrayList,客户端更新它,但不更新ComboBox。这是为什么?

最佳答案

这是因为您不断在循环中创建新的 JComboBox,而不是更新现有的 JComboBox。

代替

while(true){
...
klienciLista = new JComboBox(klienci.toArray());
...
}

做:

while(true){
    ...
    klienciLista.removeAllItems();
    for(String s:klienci){
        klienciLista.addItem(s);
    }
    ...
}

或者,最好,使用模型:

    klienciLista.setModel(new DefaultComboBoxModel(klienci.toArray()));

关于java - 如何从 ArrayList 更新 JComboBox 的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4747020/

相关文章:

java - 递归,数组列表

ios - sizeof() 给出数组参数的错误

c# - 从不同的 arraylist 索引添加到 arraylist

java - 从 DOM 对象创建的 ArrayList 中删除属性,也会将它们从原始文档中删除。我究竟做错了什么

java - 将值传递给 Java 中的外部方法

java - 从 C++ 调用 Java Swing

Java/Swing : Trying to get BorderLayout to play nice with GridBagLayout

java - 如何在 servlet 和套接字之间建立连接

java - 为什么 JPA join 返回太多结果?

java - 如何在 JOptionPane 中打印一组 for 循环数组?