2014-09-23 28 views
0

我已经创建了一个扩展JComboBox的类。该模型如下设置: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中逐项添加项目? (如果只是选择更改,也会发生这种情况......)。

+0

发布的问题和代码可能搜索Mutable/AbstractComboBoxModel。 – mKorbel 2014-09-23 08:51:13

+1

无论你想在'Combobox'中展示它都必须来自模型。因此,如果我们需要过滤组合框中的项目,请更好地在模型中完成“过滤”,并将最终列表传递给Combobox显示屏。 – Amarnath 2014-09-23 10:24:47

回答

1

三个选项来更新您的组合框时的基础数据发生变化:

  • 交易所模型(用新的替换)
  • 使用一个通用的可变模型(如DefaultComboBoxModel )并添加/删除数据以反映这些变化
  • 创建您的自己的模型实现这是一个实际数据的适配器和火灾变化事件以反映数据的变化。

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

+0

我没有第二个选项,但我需要静音itemlistener作为组合框的重新填充发射选择更改事件,导致myModel,然后发射一个modelChanged事件(不必要)的变化,我有一个很好的循环... – July 2014-09-26 08:07:34