スイング:カスタムコンポーネントのリスナーの実行順序を
質問
私のカスタムコンポーネントはJTree
内部の3 JPanel
sで構成されています。一つだけJTree
が一度に選択されなければならないので、私は以前に選択TreeSelectionListener
にclearSelection
を呼び出し、それらのそれぞれにJTree
を追加しました。
私はセレクション取り扱いリスナーは常に最初に実行されますことを確認しているTreeSelectionListener
sに他のJTree
sを追加したいと思います。私は1つのTreeSelectionListener
ですべてを置くことを希望されません。
私は何をすべきでしょうか?事前に感謝します!
解決
おそらくあなたは、あなたのリスナーが順番にそれを呼び出され、次回はそのリスナーにイベントを転送するような方法で、既存のものに新しいリスナーを追加することによって、それらをチェーンことができます。
// This is your current listener implementation
class CustomTreeSelectionListener implements TreeSelectionListener {
// listeners to which the even will be forwarded
private List<TreeSelectionListener> ownLIsteners;
public void addListener( TreeSelectionListener newListener ) {
ownListeners.add( newListener );
}
// add also removeListener( .... )
// TreeSelectionListener interface implementation...
public void valueChanged( TreeSelectionEvent e ) {
process( e ); // do what you do now
// Forward the message.
for( TreeSelectionListener listener : ownListeners ) {
listener.valueChanged( e );
}
}
}
他のヒント
あまり良い解決策がありますが、SwingUtilities.invokeLaterを(...)内のコードをラップすることができます。これは、他のリスナー・コードが実行された後、それが最終的に実行されることを意味する、EDTの終わりにコードを追加します。
所属していません StackOverflow