質問

私のカスタムコンポーネントはJTree内部の3 JPanelsで構成されています。一つだけJTreeが一度に選択されなければならないので、私は以前に選択TreeSelectionListenerclearSelectionを呼び出し、それらのそれぞれにJTreeを追加しました。

私はセレクション取り扱いリスナーは常に最初に実行されますことを確認しているTreeSelectionListenersに他のJTreesを追加したいと思います。私は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の終わりにコードを追加します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top