3

がありJComboBox、それにリスナーが接続されています。

現在、ユーザーがドロップダウンから何かを「選択」するたびに、以前に選択された値を再選択しただけでも、イベントが発生します。

コンボ ボックスの選択された値が選択される前とは異なる場合にのみ、イベントを発生させる方法はありますか?

コンボ ボックスの値を別のフィールドに格納し、イベントの発生時に毎回比較できると思いますが、これはやり過ぎのように思えます。私はそのようなコンボボックスを20個ほど持っています。イベントが発生しないように、値を格納するためだけに 20 個以上の変数を使用したくありません。

もっと良い方法があるはずです。

ご協力ありがとうございました!

4

1 に答える 1

9

ActionListener の代わりに ItemListener を使用することを検討しましたか?

 JComboBox<String> cb = new JComboBox<>(new String[] {"Stack", "Over", "Flow"});
 cb.addItemListener(new ItemListener() {
     @Override
     public void itemStateChanged(ItemEvent e) {
         System.out.println("Change");
     }
 });

1 つの項目が DESELECTED になり、別の項目が SELECTED になるため、2 回発生します。両方のイベントが発生します。を呼び出して、どちらが発生したかを確認できますe.getStateChange()

于 2013-03-12T04:35:40.540 に答える