Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Eventos teclado con KeyAdapter no me funciona.

Estas en el tema de Eventos teclado con KeyAdapter no me funciona. en el foro de Java en Foros del Web. Estoy intentando hacer que un objeto se mueva en pantalla cuando pulse unas teclas. Utilizando KeyListener he logrado que se mueva pero me gustaria hacerlo ...
  #1 (permalink)  
Antiguo 06/12/2011, 08:38
Avatar de loganbdn  
Fecha de Ingreso: enero-2009
Ubicación: Badalona
Mensajes: 114
Antigüedad: 15 años, 3 meses
Puntos: 1
Eventos teclado con KeyAdapter no me funciona.

Estoy intentando hacer que un objeto se mueva en pantalla cuando pulse unas teclas. Utilizando KeyListener he logrado que se mueva pero me gustaria hacerlo con la opcion KeyAdapter pero no me funciona por mas que pulso la tecla.
¿ Que estoy haciendo mal ?


* Aqui tengo la clase donde se pinta y debe recogerse donde se pulsa una tecla:

public class Lienzo extends Canvas
{
public Lienzo()
{
this.addKeyListener(new InterrupcionTeclado());
}

public void paint(Graphics g)
{
....

}
}

* En esta clase tengo lo siguiente, segun lo que se pulse va a una funcion Izquierda o Derecha:

public class InterrupcionTeclado extends KeyAdapter
{
public void KeyPressed(KeyEvent e)
{
switch(e.getKeyCode())
{
case KeyEvent.VK_RIGHT: { mueveDerecha(); } break;
case KeyEvent.VK_LEFT: { mueveIzquierda(); } break;
}
}
}
  #2 (permalink)  
Antiguo 06/12/2011, 13:12
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Eventos teclado con KeyAdapter no me funciona.

Hola,

A simple vista debería de funcionar, pero tienes que tomar en cuenta algo, para que el Canvas reciba eventos debe de tener el foco. Es decir, al ejecutar la aplicación, antes de que funcionen las teclas en el Canvas tienes que hacer click sobre el mismo o llegar hasta el Canvas con la tecla Tab, como un componente más.

Prueba a ver si realmente estan llegando los eventos de teclado:

Código Java:
Ver original
  1. public void KeyPressed(KeyEvent e) {
  2.   System.out.println(e.getKeyCode());
  3.   ...
  4. }
Saludos,
  #3 (permalink)  
Antiguo 06/12/2011, 17:47
Avatar de loganbdn  
Fecha de Ingreso: enero-2009
Ubicación: Badalona
Mensajes: 114
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Eventos teclado con KeyAdapter no me funciona.

He colocado el " System.out.println(e.getKeyCode());" en la InterrupcionTeclado despues del KeyPressed y nada no funciona. Parece que no salta el Evento de Teclas, no lo entiendo.

He puesto el cursor en la ventana y forzandolo con el Tab para que coja el foco y tampoco.
  #4 (permalink)  
Antiguo 06/12/2011, 19:18
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Eventos teclado con KeyAdapter no me funciona.

Hola,

Extraño que no te funcione, es decir, con el código que mostraste funciona correctamente porque lo probé en un JFrame y un Canvas. Lo único es que si el Canvas no tiene el foco no funciona, y los Canvas no muestran ninguna representación visual si tienen o no el foco.

Entonces, suponiendo que es completamente seguro que el Canvas tiene el foco, de cualquier forma el problema no está en el código que mostraste.

Saludos,
  #5 (permalink)  
Antiguo 07/12/2011, 08:49
Avatar de loganbdn  
Fecha de Ingreso: enero-2009
Ubicación: Badalona
Mensajes: 114
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Eventos teclado con KeyAdapter no me funciona.

Ya encontre el problema !!!

He cambiado el nombre de la clase "InterrupcionTeclado" a otro nombre mas corto de menos de 16 caracteres a "VigilaTeclado" y ha funcionado perfectamente.
Es increible porque estaba editandolo con Eclipse y no me salia ninguna advertencia, ademas que yo pensaba que se podian poner nombres de mas de 16 caracteres a una clase. Es muy raro !!

Etiquetas: eventos, teclado
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:11.