Pergunta

O meu componente personalizado é composto por três JTrees dentro de um JPanel. Apenas um JTree deve ser selecionado de cada vez, então eu adicionei um TreeSelectionListener a cada um deles que as chamadas clearSelection na JTree previamente selecionado.

Eu gostaria de adicionar outros TreeSelectionListeners aos JTrees sendo certo que os ouvintes de manipulação selecção- sempre são executados primeiro. Eu prefiro não colocar tudo em um único TreeSelectionListener.

O que devo fazer? Agradecemos antecipadamente!

Foi útil?

Solução

Provavelmente você poderia cadeia deles, incluindo o novo ouvinte para o já existente, de modo a próxima vez que seu ouvinte é invocado que por sua vez irá encaminhar o evento para seus ouvintes.

// 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 );
           }
    }

 }

Outras dicas

Nem uma solução muito boa, mas você pode quebrar o código em um SwingUtilities.invokeLater (...). Isto irá adicionar o código para o final do EDT, o que significa que acabará por executar após o outro código ouvinte tem executado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top