jcombobox - 检查模型内容是否发生变化

时间:2014-09-23 08:43:32

标签: java swing jcombobox comboboxmodel

我创建了一个扩展JComboBox的类。模型设置如下:

DefaultComboBoxModel<String> readoutModel = new DefaultComboBoxModel<String>(options.toArray(new String[options.size()]));
setModel(readoutModel);

该类实现一个侦听器接口来侦听另一个类(myModel)的更改。这些更改可能与该组合框完全无关,它可能包含选择更改,并且可能包含该组合框的内容更改。

很容易改变选择:

@Override
public void modelChanged() {
    ...
    setSelectedItem(myModel.getSelectedReadOut());
}

但如果需要更改组合框的内容呢?我应该更换组合框模型吗?我是否需要对项目进行交互并将它们与myModel中的项目进行比较?我还可以从组合框模型中删除所有项目,然后从myModel逐项添加? (如果只是选择改变,也会发生......)。

1 个答案:

答案 0 :(得分:2)

更改基础数据时更新组合框的三个选项:

  • 交换模型(替换为新模式)
  • 使用通用可变模型(例如DefaultComboBoxModel)并添加/删除数据以反映更改
  • 创建自己的模型实现,这是实际数据的适配器,并触发更改事件以反映数据的更改。

适配器解决方案非常容易实现(ComboBoxModel,这是ListModel),不需要复制数据,因此不需要同步。通常是最好的选择,在我的选择中。