2009-03-05 38 views
1

我想盡可能地使用適當的模型委託模式在Swing中編寫一個漂亮的GUI。我有一個JComboBox,當更改時,需要使用新數據更新模型。要獲取當前選定的項目,我正在使用:在使用Swing +模型時會識別組合框取消選擇?

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

其中返回數據更改爲一個很好的對象。但是,我找不到找到舊值的方法,所以我不知道需要更改哪個對象。這裏的任何想法?

回答

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

0

由於默認ComboBoxModel和ItemEvent不允許您獲得以前選擇的值,因此可以使用此功能實現您自己的ComboBoxModel。

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

我同意這是最簡單的解決方案。但是,我提出了一個自定義的ComboBoxModel,因爲Kieran說他希望儘可能地使用適當的Model-Delegate模式。我會說這通過將最後選擇的項目保持在模型之外來打破這種模式。 – Mark 2009-03-05 12:04:57

相關問題