Swing +モデルを使用するときにコンボボックスの選択解除を認識しますか?

StackOverflow https://stackoverflow.com/questions/613981

質問

可能な限り適切なModel-Delegateパターンを使用するSwingで素敵なGUIを作成しようとしています。変更された場合、新しいデータでモデルを更新する必要があるJComboBoxがあります。現在選択されているアイテムを取得するために、私は使用しています:

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

データが変更されたものを素敵なオブジェクトとして返します。ただし、古い値を見つける方法が見つからないため、どのオブジェクトを変更する必要があるかわかりません。ここにアイデアはありますか?

役に立ちましたか?

解決

モデルにはまったく行かずに、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());
    }
}

他のヒント

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

デフォルトのComboBoxModelおよびItemEventでは、以前に選択した値を取得できないため、この機能を使用して独自のComboBoxModelを実装できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top