0

我创建了一个扩展 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 中逐项添加?(如果只是选择更改,也会发生这种情况......)。

4

1 回答 1

2

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

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

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

于 2014-09-23T11:31:54.123 回答