Swing: Hörer Ausführungsreihenfolge auf benutzerdefinierte Komponente
Frage
ist meine eigene Komponente von drei JTree
s in einem JPanel
zusammen. Nur ein JTree
sollte zu einem Zeitpunkt ausgewählt werden, also habe ich eine TreeSelectionListener
zu jedem von ihnen hinzugefügt, die clearSelection
auf dem zuvor ausgewählten JTree
aufruft.
Ich mag andere TreeSelectionListener
s sicher zu sein, zu dem JTree
s hinzufügen, dass die Selektions- Umgang mit Hörern immer zuerst ausgeführt werden soll. Ich würde es vorziehen, nicht alles in einem einzigen TreeSelectionListener
zu setzen.
Was soll ich tun? Vielen Dank im Voraus!
Lösung
Wahrscheinlich könnte man sie Kette durch die neuen Hörer auf die bestehenden so das Hinzufügen das nächste Mal Ihre Zuhörer es wiederum aufgerufen wird, wird das Ereignis an seine Zuhörer übermitteln.
// 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 );
}
}
}
Andere Tipps
Nicht eine sehr gute Lösung, aber Sie können Code in einer SwingUtilities.invokeLater wickeln (...). Dadurch wird der Code am Ende des EDT hinzufügen, was bedeutet, es wird schließlich ausgeführt werden, nachdem die anderen Zuhörer Code ausgeführt wurde.