Swing: порядок выполнения слушателей на пользовательском компоненте - PullRequest
1 голос
/ 22 сентября 2009

Мой пользовательский компонент состоит из трех JTree внутри JPanel. Только один JTree должен быть выбран за раз, поэтому я добавил TreeSelectionListener к каждому из них, который вызывает clearSelection на ранее выбранном JTree.

Я бы хотел добавить другие TreeSelectionListener к JTree, будучи уверенными, что слушатели, обрабатывающие выборку, всегда выполняются первыми. Я бы предпочел не складывать все в один TreeSelectionListener.

Что мне делать? Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 22 сентября 2009

Возможно, вы могли бы объединить их в цепочку, добавив нового слушателя к существующему таким образом, что в следующий раз, когда ваш слушатель будет вызван, он по очереди перенаправит событие своим слушателям.

// 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 голос
/ 22 сентября 2009

Не очень хорошее решение, но вы можете заключить код в SwingUtilities.invokeLater (...). Это добавит код в конец EDT, что означает, что он в конечном итоге будет выполнен после выполнения другого кода слушателя.

...