Question

Mon composant personnalisé est composé de trois JTrees 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 TreeSelectionListeners aux JTrees 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!

Était-ce utile?

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é.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top