Swing: les auditeurs d'ordre d'exécution sur un composant personnalisé
Question
Mon composant personnalisé est composé de trois JTree
s l'intérieur d'un JPanel
. Un seul JTree
doit être sélectionné à la fois, donc je l'ai ajouté un TreeSelectionListener
à chacun d'eux qui appelle clearSelection
sur le JTree
précédemment sélectionné.
Je voudrais ajouter d'autres TreeSelectionListener
s aux JTree
s en étant sûr que les auditeurs de traitement des Selection- toujours sont exécutées en premier. Je préfère ne pas tout mettre dans un seul TreeSelectionListener
.
Que dois-je faire? Merci d'avance!
La solution
Probablement, vous pouvez les enchaîner en ajoutant le nouvel écouteur à l'existant de telle manière la prochaine fois que votre auditeur, il s'invoqué à son tour transmettra l'événement à ses auditeurs.
// 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 );
}
}
}
Autres conseils
Pas une très bonne solution, mais vous pouvez envelopper le code dans un SwingUtilities.invokeLater (...). Cela va ajouter le code à la fin de l'EDT, ce qui signifie qu'elle finira par exécuter après l'autre code auditeur a exécuté.