我正在尝试在Swing中编写一个很好的GUI,尽可能使用正确的Model-Delegate模式。我有一个JComboBox,当更改时,需要使用新数据更新模型。要获取当前选定的项目,我正在使用:
fooCombo.addItemListener(new ItemListener() {
public void itemStateChanged(final ItemEvent arg0) {
fooChangedHandler((Foo) fooModel.getSelectedItem());
}
});
返回将数据更改为一个好的Object。但是,我找不到找出旧值的方法,所以我不知道哪个对象需要更改。这里有什么想法吗?
答案 0 :(得分: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());
}
}
答案 1 :(得分:1)
Foo oldFoo;
....
fooCombo.addItemListener(new ItemListener() {
public void itemStateChanged(final ItemEvent arg0) {
Foo newFoo = (Foo) fooModel.getSelectedItem();
fooChangedHandler(oldFoo, newFoo);
oldFoo = newFoo;
}
});
答案 2 :(得分:0)
由于默认的ComboBoxModel和ItemEvent不允许您获取之前选择的值,因此您可以使用此功能实现自己的ComboBoxModel。