Swing:自定义组件上的侦听器执行顺序

时间:2009-09-22 14:35:21

标签: java swing listener jtree listeners

我的自定义组件由JTree内的三个JPanel组成。每次只能选择一个JTree,因此我为每个在之前选择的TreeSelectionListener上调用clearSelection的人JTree添加了TreeSelectionListener

我想在JTree中添加其他TreeSelectionListener,以确保首先执行选择处理侦听器。我不想把所有东西放在一个{{1}}中。

我该怎么办?提前谢谢!

2 个答案:

答案 0 :(得分: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 );
           }
    }

 }

答案 1 :(得分:1)

不是一个非常好的解决方案,但您可以将代码包装在SwingUtilities.invokeLater(...)中。这会将代码添加到EDT的末尾,这意味着它将在执行其他侦听器代码后最终执行。