Synchronized JList and JComboBox?

Vicky Chijwani picture Vicky Chijwani · Feb 9, 2011 · Viewed 7.9k times · Source

In Java Swing, what's the best way for a JList and a JComboBox to be synchronized in terms of the data, i.e., to have the same list of items at any given point of time? Basically, if I add items to (or remove items from) one, the other should reflect the change automatically.

I've tried doing the following, but it doesn't seem to work:

JList list = new JList();
JComboBox comboBox = new JComboBox();
DefaultListModel listModel = new DefaultListModel();
// add items to listModel...
list.setModel(listModel);
comboBox.setModel(new DefaultComboBoxModel(listModel.toArray()));

Answer

Paŭlo Ebermann picture Paŭlo Ebermann · Feb 9, 2011

Your models - the ListModel for the list and the ComboboxModel for the combobox - need to be synchronized.

In the general case this would mean writing a special implementation of the models, but in your case you have luck: DefaultComboBoxModel in fact implements ListModel, so you simply can use the same model object for both your components.

JList list = new JList();
JComboBox comboBox = new JComboBox();
DefaultComboBoxModel listModel = new DefaultComboBoxModel();
// add items to listModel...
list.setModel(listModel);
comboBox.setModel(listModel);