Dúvida com addKeyListener e keyTyped

Olá pessoal do GUJ, tudo belê!?

Pessoal estou tentando adicionar um método de pressionamento
de teclas UNICODE no campo1 que é um JTextField e dá um erro que
não sei identificar, o trecho do método está abaixo:

campo1.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
JOptionPane.showMessageDialog(panelPrincipal, “Texto digitado”);
}
});

e dá a mensagem de erro:

<anonymous FrmTeste$2> is not abstract and does not override abstract method keyReleased(java.awt.event.KeyEvent) in java.awt.event.KeyListener.
public void keyTyped(KeyEvent e) {

Será que tem de fazer diferente?
Muito obrigado pela atenção pessoal! :smiley:

olah!!

eh o seguinte: vc estah criando um objeto d uma classe anonima q implementa a interface KeyListener, certo? d acordo com a documentação, (http://java.sun.com/j2se/1.5.0/docs/api/java/awt/event/KeyListener.html) essa interface implementa 3 métodos: keyTyped, keyReleased e keyPressed. sempre q vc implementa uma interface em java, vc DEVE implementar (memso q seja com um nada) todos os metodos especificados pela interface. nesse caso, vc soh implementou um deles. mesmo q vc naum use, vc DEVE implementar os outros. exemplo:

campo1.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
JOptionPane.showMessageDialog(panelPrincipal, “Texto digitado”);
}

public void keyPressed(KeyEvent e) {
// Nada
}

public void keyReleased(KeyEvent e) {
// Nada também
}
});

outra solução eh vc usar uma classe adapter, q jah vem com todos os metodos implementados com “nada” e vc soh sobrescreve com os q vc quer realmente usar. mas veja q ha uma diferença: o primeiro eh uma interface, e o segundo (um adapter) eh uma classe q implementa essa interface, ou seja, em um caso ha implementação, noutro ha herança. se bem q na pratica possa parecer a mesma coisa, soh mudadndo d nome, naum eh!

com um adapter, seu codigo fica assim:

campo1.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
JOptionPane.showMessageDialog(panelPrincipal, “Texto digitado”);
}
});

[]'s!

grande cd1, valeu!
deu certo agora!!

Puxa nem tinha pensado nisso, pode crer né… o addKeyListener segue
uma interface… beleza então…

Vc. usaria o adapter ou seguiria a interface mesmo?
Qual que é melhor??

Responda se quiser, já sanou minha dúvida!
Muito obrigado! :smiley:

olah d novo =)

eu, particularmente, prefiro implementar uma interface, pq eh mais “original”. naum q o adapter seja errado, mas ele foi feito justamente pra o programador “passar direto” nesses casos. e tem outro motivo tb, mas q naum eh muito importante se vc usa classes anonimas, como vc fez. vc pode implementar qts interfaces vc quiser, ou seja, implementar keylistener ou naum, naum tem problema. se vc herdar do adapter, vc jah “gastou” a herança dakela classe, jah q em java vc soh pode herdar diretamente d apenas uma outra classe. entendeu o q eu quis dizer? :stuck_out_tongue:

qualquer coisa, tamo aki!

[]'s!

E ai cd1, entendi o que quis dizer!!
ficou claro a sua explicação!
valeu mesmo pela atenção!
muito obrigado! :smiley: