Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Swing: порядок выполнения слушателей на пользовательском компоненте

Автор вопроса: GiuseppeОтветов: 2

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

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

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

javalistenerswingjtreelisteners

Ответы

Ответ 1 · рейтинг 3 · OscarRyz

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

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

 }

Ответ 2 · рейтинг 1 · camickr

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы