我创建了一个扩展 JComboBox 的类。模型设置如下:
DefaultComboBoxModel<String> readoutModel = new DefaultComboBoxModel<String>(options.toArray(new String[options.size()]));
setModel(readoutModel);
该类实现一个监听器接口(interface)来监听另一个类 (myModel) 的更改。这些更改可能与该组合框根本不相关,它可能包含选择更改,并且可能包含该组合框的内容更改。
像这样更改选择很容易:
@Override
public void modelChanged() {
...
setSelectedItem(myModel.getSelectedReadOut());
}
但是如果组合框的内容需要更改怎么办?我应该更换组合框模型吗?我是否必须对这些项目进行交互并将它们与 myModel 中存在的项目进行比较?我还可以从组合框模型中删除所有项目,然后从 myModel 中逐项添加? (如果只是选择发生变化,也会发生这种情况......)。
最佳答案
当基础数据更改时更新组合框的三个选项:
- 更换模型(更换新模型)
- 使用通用可变模型(例如 DefaultComboBoxModel)并添加/删除数据以反射(reflect)更改
- 创建您自己的模型实现,它是实际数据的适配器,并触发更改事件以反射(reflect)数据的更改。
Adapter 解决方案非常容易实现(ComboBoxModel
,它是一个 ListModel
),不需要复制数据,因此不需要同步。通常是最好的选择,在我的选择中。
关于java - jcombobox - 检查模型内容是否更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25990632/