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

StackOverflow https://stackoverflow.com/questions/1460468

Вопрос

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

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

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

Это было полезно?

Решение

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

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

 }

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top