我正在尝试在Swing中编写一个很好的GUI,尽可能使用正确的Model-Delegate模式。我有一个JComboBox,当更改时,需要使用新数据更新模型。要获取当前选定的项目,我正在使用:

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

返回将数据更改为一个好的Object。但是,我找不到找出旧值的方法,所以我不知道哪个对象需要更改。这里有什么想法吗?

有帮助吗?

解决方案

最终没有去模型,只是从getItem方法获取我的对象,如下所示: <代码>

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());
    }
}

其他提示

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top