Java 使用Swing+;时识别组合框取消选择;模型?

Java 使用Swing+;时识别组合框取消选择;模型?,java,swing,events,model,jcombobox,Java,Swing,Events,Model,Jcombobox,我正试图在Swing中编写一个漂亮的GUI,它尽可能使用适当的模型委托模式。我有一个JComboBox,当它被更改时,需要用新数据更新模型。要获取当前选定的项目,我将使用: fooCombo.addItemListener(new ItemListener() { public void itemStateChanged(final ItemEvent arg0) { fooChangedHandler((Foo) fooModel.getSelectedItem());

我正试图在Swing中编写一个漂亮的GUI,它尽可能使用适当的模型委托模式。我有一个JComboBox,当它被更改时,需要用新数据更新模型。要获取当前选定的项目,我将使用:

fooCombo.addItemListener(new ItemListener() {
    public void itemStateChanged(final ItemEvent arg0) {
        fooChangedHandler((Foo) fooModel.getSelectedItem());
    }
});

它将数据更改为的内容作为一个好对象返回。但是,我找不到找到旧值的方法,因此我不知道需要更改哪个对象。有什么想法吗?

由于默认的ComboBoxModel和ItemEvent不允许您获取以前选择的值,您可以使用此功能实现自己的ComboxModel。

最终根本不去模型,而是从getItem方法获取我的对象,如下所示:
Foo oldFoo;
....
fooCombo.addItemListener(new ItemListener() {
    public void itemStateChanged(final ItemEvent arg0) {
        Foo newFoo = (Foo) fooModel.getSelectedItem();
        fooChangedHandler(oldFoo, newFoo);
        oldFoo = newFoo;
    }
});
公共无效itemStateChanged(最终ItemEvent事件){
if(event.getStateChange()==event.diselected){
取消EdFoo=(Foo)事件。getItem();
} 
else if(event.getStateChange()==event.SELECTED){
FooChangedHandler(取消edfoo,(Foo)event.getItem());
}
}

我同意这是最简单的解决方案。然而,我建议使用定制的ComboBoxModel,正如Kieran所说,他希望尽可能多地使用适当的模型委托模式。我想说,这打破了这种模式,将最后选定的项目保留在模型之外。 public void itemStateChanged(final ItemEvent event) { if (event.getStateChange() == event.DESELECTED) { deselectedFoo = (Foo) event.getItem(); } else if (event.getStateChange() == event.SELECTED) { FooChangedHandler(deselectedFoo,(Foo) event.getItem()); } }