Качать:порядок выполнения прослушивателей в пользовательском компоненте
Вопрос
Мой пользовательский компонент состоит из трех JTree
внутри JPanel
.Только один JTree
следует выбирать одновременно, поэтому я добавил TreeSelectionListener
каждому из них, кто звонит clearSelection
на ранее выбранном JTree
.
Я хотел бы добавить еще TreeSelectionListener
s к 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, что означает, что в конечном итоге он будет выполнен после выполнения другого кода прослушивателя.