1

我正在尝试在 Swing 中编写一个漂亮的 GUI,尽可能地使用正确的模型委托模式。我有一个 JComboBox,当它发生变化时,需要用新数据更新模型。要获取当前选定的项目,我正在使用:

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

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

4

3 回答 3

2

最终根本不去模型,而是从 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());
    }
}

于 2009-03-06T05:46:50.280 回答
1
Foo oldFoo;
....
fooCombo.addItemListener(new ItemListener() {
    public void itemStateChanged(final ItemEvent arg0) {
        Foo newFoo = (Foo) fooModel.getSelectedItem();
        fooChangedHandler(oldFoo, newFoo);
        oldFoo = newFoo;
    }
});
于 2009-03-05T10:19:37.027 回答
0

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

于 2009-03-05T09:52:39.540 回答