Frage

ist meine eigene Komponente von drei JTrees 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 TreeSelectionListeners sicher zu sein, zu dem JTrees 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!

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top