1

私のカスタムコンポーネントは、JTree内の3つので構成されていJPanelます。一度に1つだけを選択する必要があるため、前に選択したを呼び出すをそれぞれにJTree追加しました。TreeSelectionListenerclearSelectionJTree

選択処理リスナーが常に最初に実行されるように、他TreeSelectionListenerのを追加したいと思います。JTreeすべてを1つにまとめたくないTreeSelectionListener

私は何をすべきか?前もって感謝します!

4

2 に答える 2

3

おそらく、次にリスナーが呼び出されたときに新しいリスナーを既存のリスナーに追加して、イベントをリスナーに転送することで、それらを連鎖させることができます。

// 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 );
           }
    }

 }
于 2009-09-22T14:39:01.273 に答える
1

あまり良い解決策ではありませんが、SwingUtilities.invokeLater(...)でコードをラップすることができます。これにより、コードがEDTの最後に追加されます。つまり、他のリスナーコードが実行された後に最終的に実行されます。

于 2009-09-22T14:41:08.540 に答える