A pergunta é bem simples.
Porque eu devo colocar this quando eu adicio um Action Listener a um objeto ? Eu sei que é pra especificar aonde será tratado o evento, mas quais são as outras opções disponíveis ?
Tipo:
JTextField txt = new JTextField( 10 );
txt.addActionListener( this );
Você deve colocar this no addActionListener se a sua classe implementar a interface ActionListener. Se não, você tem que passar uma referência de um objeto que a implemente.
Ou usar a classe abstrata AbstractAction pra deixar o código menos emporcalhado com eventos
Daniel_Quirino_Olive
Ou então usar anonymous innerclass:
JTextFieldtxt=newJTextField(10);txt.addActionListener(newActionListener(){//implemente aqui todos os métodos da interface ActionListenerpublicvoidactionPerformed(ActionEvente){// faz alguma coisa útil}});
caiofilipini
Cheio de opções!
J
JBoy_
Ops… gostei mt do jeito normal com a referência sendo passada no caso que o Caio Filipini falou e o Daniel.
Só mais essa ok ?! Então eu poderia fazer uma classe só com tratadores de enveto importando a classe e assim evitando que o código ficasse cheio de eventos correto ?! Os listeners da vida ficariam em uma nova classe, isso pode ser feito ?
Obrigado
luiz_ross
Sim, isso é possivel. Usando a classe abstrata AbstractAction ficaria assim
Sua classe que monta a interface
publicclassAcaoextendsAbstractAction{publicAcao(){putValue(SHORT_DESCRIPTION,"Testando o evento");}publicvoidactionPerformed(ActionEvente){System.out.println(" eheheh!!!!!!!! FUNCIONOU!!!!");}}
caiofilipini
JBoy,
Note que no exemplo que dei, a classe tratadora de eventos é uma inner class, ou seja, uma classe definida dentro de outra classe. Dessa forma, ela tem acesso a todos os membros private da classe que constrói a GUI, ok?
[]'s
J
JBoy_
Ahhnnnn… 8) agora eu entendi o que significa AbstractAction. Eu ainda não sabia o que isso significava por isso não dei muita bola Luiz. Foi mal :P.
Muito legal esse tipo de tratamento de evento. No caso como eu tinha falado gostei muito de poder tratar o evento em uma classe diferente, assim importando ela pra poder se tratar. Como Luiz disse o código fica mais limpo e como Java é direcionado totalmente para Engenharia de Software acho que fica mais fácil de se achar o defeito, já que tudo esta em uma classe diferente.