Search code examples
javaswingjlistjcombobox

Synchronized JList and JComboBox?


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()));

Solution

  • 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);