2009-03-05 11 views
1

私はスイングで、できるだけ適切なModel-Delegateパターンを使用する素晴らしい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

私はこれが最も簡単な解決策であることに同意します。しかし、Kieran氏は適切なModel-Delegateパターンを可能な限り使用したいと言っているので、カスタムComboBoxModelを提案しました。これは、モデルの外で最後に選択したアイテムを保持することによって、このパターンを破ると言います。 – Mark

関連する問題