1

我的自定义组件由JTreea 内的三个 s组成JPanel。一次JTree只能选择一个,因此我TreeSelectionListener为每个调用clearSelection先前选择的JTree.

我想将其他TreeSelectionListeners 添加到JTrees 以确保选择处理侦听器始终首先执行。我不想把所有东西都放在一个单一的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 回答