2012-04-26 4 views
4

私はitemStateChanged()を介してユーザが値を変更した場合、Xを行うItemListenerを持つコンボボックスを持っています。 しかし、私はまた、そのコンボボックスの値を変更する別の関数を持っています。この場合、私はXの実行を望んでいません。私のスイングアプリケーションでは、ユーザインタラクションの後にitemStateChanged()を呼び出す

状態の変更がユーザーの操作や機能によって引き起こされたかどうかを確認する方法はありますか?

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

編集:フラグメソッドを使用しました。迅速な答えをありがとう。私はちょうど、itemStatechangedが実際には2回、1回は選択解除のために、もう一度は選択のために呼び出されます。これに対処する必要がある場合、フラグは効果がありません。この問題については、hereを参照してください。

+0

の可能重複〔ものitemStateChangedを呼び出すJavaのSwingのコンボボックスremoveAllItems?](http://stackoverflow.com/questions/10202718/java-swing-combobox-removeallitems-calling-itemstatechanged-also) –

答えて

6

チェックを行うには2通りの方法があります。

  1. フラグisUserを定義しますが。フラグはデフォルトでtrueです。プログラムで変更する前に、falseに設定し、コンボボックスの値を設定してからリセットしてください。リスナーでは、フラグをチェックし、必要に応じてアクションをスキップします。
  2. 値を設定する前にリスナーへの参照を保持し、削除してから追加します。
+0

+1私は忘れてしまいました第二の方法について、素晴らしい。 – Boro

+1

3.rd方法は、[内部JListにun_safe KeyListenerを追加したFocusの不利益](http://stackoverflow.com/a/9991314/714968)、JComboBox(私の見解)にとって安全なものは何もありません – mKorbel

+0

@mKorbel今、そのコードは「太陽の日」を持つでしょう。 :) –

4

私はあなたが非常に簡単にフラグを使用して問題を整理することができると理解してから。 ブール値のフラグを設定するだけです。 isDoneByMethodは、trueに設定され、最後にfalseに設定され、コンボボックスの操作を行います。 itemStateChanged()の中にisDoneByMethodフラグの値をチェックし、それに応じて行動します。

関連する問題