Hacer que un JPanel detecte eventos de teclado

Soy un bruto en cuanto a java se refiere, necesito que me ayuden porque necesito hacer que un JPanel sea capaz de detectar eventos de teclado porque yo le coloco un addKeyListener( new KeyAdapter(){
public void keyPressed( KeyEvent e ){
System.out.println("tecla presionada");
}
});
Y no pasa nada cuando undo una tecla :(, necesito

2 respuestas

Respuesta
2
Me preocupa un poco tu baja autoestima al tratarte como bruto, pero bueno supongo que lo haces para llamar un poco la atención. Para que un JPanel pueda detectar eventos de teclado debes hacer dos cosas:
1º Debes crear una clase que extienda a JPanel y reescribir el método isFocusable() devolviendo un true.
2º Debes agregarle un oyente de ratón, o sea, un MouseListener, estos se agregan de la misma forma como agregaste el oyente de teclado, y en el método mouseEntered( MouseEvent e ), llamar al método reuqestFocus() para que el JPanel reciba el foco.
Aquii te mando un ejemplo para que entiendas más claramente:
import javax.swing.*;
import java.awt.event.*;
public class PanelDeTeclado extends JPanel implements KeyListener, MouseListener {
public boolean isFocusable(){
return true;
}
public void mousePressed( MouseEvent e ) {}
public void mouseReleased( MouseEvent e ) {}
public void mouseClicked( MouseEvent e ) {}
public void mouseEntered( MouseEvent e ) {
this.requestFocus();
}
public void mouseExited( MouseEvent e ) {}
public void keyReleased( KeyEvent e ) {
}
public void keyTyped( KeyEvent e ) {
}
public void keyPressed( KeyEvent e ) {
System.out.println("Usted ha presionado la tecla: "+e.getKeyText(e.getKeyCode()));
}
public static void main( String [] args ){
JFrame f = new JFrame();
f.getContentPane().add(new PanelDeTeclado());
f.setSize(400,300);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
Espero que te sirva, y no te sientas bruto, una duda como esta muchos la han podido hacer.
Hola, disculpa que te moleste pero corrí el ejemplo y no funciona, ¿será qué estoy haciendo algo mal?
No, no fuiste tu quien hizo algo mal, fui yo, olvide hacer el constructor de la clase, ¿vez qué cualquiera puede cometer errores?
Escribe este método dentro de la clase PanelDeTeclado...
public PanelDeTeclado(){
this.addMouseListener(this);
this.addKeyListener(this);
}
Y ya, ahora si debe funcionar. Bye.
Respuesta
2

Alejo, sos un groso, me rescataste el programa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas