0

リスナーについて一般的な質問があります。

JTabbedPane2 つの があり、両方に があるとしましょうChangeListener。それらは両方とも表示され、両方に同じペイン (インデックス) を表示したいので、ユーザーが選択したペインを変更すると、他のペインも変更されます。
簡単に言えば、一方の JTabbedPane リスナーがJTabbedPaneを使用して他方を変更しsetSelectedTab()ます。
明らかに、最初のリスナーが 2 番目のリスナーをアクティブにし、2 番目のリスナーが最初のリスナーをエンドレス オペレーションで再アクティブ化します。

これはブール値で解決されます。
それを行うためのよりスマートな方法はありますか?
リスナーをトリガーせずにタブを変更する方法はありますか?
コードではなくユーザーが変更した場合にのみリスナーをアクティブにする方法はありますか?

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

ところで:私はいつもボタンについて同じ質問をしています。しかし、ボタンの場合は、リスナーからコードを取得してメソッドに入れます。ワンボタンがボタンをアクティブにする必要がある場合、そのコードを呼び出します。しかし、JTabbedPane では違います。

4

2 に答える 2

4

簡単な解決策は、必要な場合にのみ行動することです。例えば:

if(currentTab != desiredTab) {
  // change tab
}

これにより、無限ループを防ぐことができます。

動作のオンとオフを切り替える必要がある場合、ブール値フラグを使用することは悪い方法ではありません。別の方法は、 removeChangeListenerを使用してリスナーを削除することです。フラグは、メモリの割り当てと割り当て解除を回避できるため、パフォーマンスが向上する可能性がありますが、状況の他の詳細に大きく依存します。

于 2011-07-21T12:49:12.810 に答える
3

たとえば、selectionModelを共有します

 secondTabbedPane.setModel(otherTabbedPane.getModel());
于 2011-07-21T15:33:31.467 に答える