Java 使用Swing+;时识别组合框取消选择;模型?
我正试图在Swing中编写一个漂亮的GUI,它尽可能使用适当的模型委托模式。我有一个JComboBox,当它被更改时,需要用新数据更新模型。要获取当前选定的项目,我将使用: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());
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());
}
}