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