摇摆:听众执行顺序的自定义组件(Swing: listeners execution order o

2019-09-28 19:49发布

我的自定义组件是由三个JTree一个在s JPanel 。 只有一个JTree应在同一时间进行选择,所以我添加了一个TreeSelectionListener他们每个人调用clearSelection先前选择JTree

我想补充其他TreeSelectionListener年代到JTree S是确保选择-处理听众总是首先执行。 我不希望把一切都在一个单一的TreeSelectionListener

我该怎么办? 提前致谢!

Answer 1:

也许你可以通过这样的方式监听器被调用它反过来将事件转发到其侦听器,下一次添加新的侦听到现有的一条链它们。

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

 }


Answer 2:

没有一个很好的解决方案,但你可以在SwingUtilities.invokeLater(...)包代码。 这将代码添加到EDT,这意味着其他听者代码已被执行之后,将最终执行的结束。



文章来源: Swing: listeners execution order on custom component