我已經基於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
在啓動列表是空的。客戶端通過插座新的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();
}
}
我想要做的是,我的JComboBox klienciLista填補現有客戶的新的ArrayList,但這並沒有發生。連接後,服務器發送arrayList和客戶端更新它,但不更新組合框。爲什麼是這樣?
那麼我該怎麼辦? – TrN 2011-01-20 12:31:53
正如已經建議的那樣,使用addItem(如果它只是添加項目並且不刪除任何項目),或者更好地使用已經由該變量引用的現有對象上的setModel,而不是重新定義該變量。 – masijade 2011-01-20 13:14:01