在Java Swing中,使JList
和JComboBox
在数据方面同步(即在任何给定时间点具有相同项目列表)的最佳方法是什么?基本上,如果我将一项添加到某项(或从其中删除某项),则另一项应自动反射(reflect)更改。
我尝试执行以下操作,但似乎不起作用:
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()));
最佳答案
您的模型-用于列表的ListModel和用于组合框的ComboboxModel-需要同步。
在一般情况下,这意味着编写模型的特殊实现,但是对于您而言,您很幸运:DefaultComboBoxModel实际上实现了ListModel,因此,您可以为两个组件都使用相同的模型对象。
JList list = new JList();
JComboBox comboBox = new JComboBox();
DefaultComboBoxModel listModel = new DefaultComboBoxModel();
// add items to listModel...
list.setModel(listModel);
comboBox.setModel(listModel);