4

私のswingアプリケーションには、ユーザーが値を変更した場合にXを実行するItemListenerを備えたコンボボックスがあります(itemStateChanged()を介して)。ただし、そのコンボボックスの値を変更する別の関数もあります。この場合、Xを実行したくありません。

状態の変化がユーザーの操作によるものなのか、関数によるものなのかを確認する方法はありますか?

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

編集:私はフラグメソッドを使用しました。迅速な回答をありがとう。追加したいのですが、そのitemStatechangedは実際には2回呼び出されます。1回は選択解除用、もう1回は選択用です。これに対処する必要があります。そうしないと、フラグは効果がありません。この問題については、ここで説明します。

4

3 に答える 3

6

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

  1. フラグを定義しisUserます。フラグはtrueデフォルトです。プログラムで変更する前にfalse、コンボボックスの値を設定してからリセットしてください。リスナーでフラグを確認し、必要に応じてアクションをスキップします。
  2. リスナーへの参照を保持し、値を設定する前にそれを削除し、後に追加します。
于 2012-04-26T08:50:45.287 に答える
4

私が理解していることから、フラグを使用して問題を非常に簡単に解決できます。ブールフラグを作成するだけです。たとえばisDoneByMethod、メソッドに設定されたメソッドの入り口にあり、これら2つtrueに設定されたメソッドの最後にfalseあり、コンボボックスで操作を実行します。次に、フラグitemStateChanged()の値をチェックし、それに応じて動作します。isDoneByMethod

于 2012-04-26T08:48:45.723 に答える
0

私は2つのケースを区別する必要がある同様の状況にあります。ここで説明する両方のオプション(フラグとリスナーの削除/追加)は、アイテムリスナーがEDTスレッドで非同期に呼び出されるため、常に機能するわけではありません。ただし、特定のアイテムリスナーを削除して追加する方が安全です。アイテムリスナーを追加する前に、以前のすべてのアクションが確実に処理されるようにするためにfireEvents()、リスナーを再度追加する直前に使用します。

于 2022-02-24T14:31:46.873 に答える