Cómo usar KeyListener

Actualmente estoy intentando implementar un keylistener en mi progtwig para que haga una acción cuando presioné una tecla de flecha, el objeto en mi progtwig se mueve hacia la izquierda o hacia la derecha.

Aquí está el método de movimiento en mi progtwig

public void moveDirection(KeyEvent e) { int move = 0; int r = K.getRow(); int c = K.getCol(); if (e.getKeyCode() == 39) move = 1; //KeyEvent.VK_RIGHT if (e.getKeyCode() == 37) move = 2; //KeyEvent.VK_LEFT //if (e.getKeyCode() == KeyEvent.VK_DOWN) move = 3; switch (move) { case 1: if (inBound(r, c+1)) K.setLocation(r ,c+1); if (inBound(r, c-1) && frame2[r][c-1] == K) frame2[K.getRow()][K.getCol()-1] = null; break; //move right 39 case 2: K.setLocation(K.getRow(), K.getCol()-1); break; //move left 37 //case 3: b.setLocation(b.getRow()+1, b.getCol()); break; //move down default: return; } processBlockList(); } 

Me pregunto cómo se supone que debe leer el progtwig en (KeyEvent) e. Realmente no puedo escribir una tecla de flecha …

¡Por favor ayuda!

editar: también necesito saber qué necesito agregar a mi código para que mi progtwig espere unos 700 milisegundos para una entrada de clave antes de pasar a otro método

http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html Consulta este tutorial

Si es una aplicación basada en UI, entonces “También necesito saber qué necesito agregar a mi código para que mi progtwig espere unos 700 milisegundos para una entrada de clave antes de pasar a otro método”. Puede usar la clase GlassPane o Timer para cumplir con el requisito.

Para evento clave:

 public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); if (key == KeyEvent.VK_LEFT) { dx = -1; } if (key == KeyEvent.VK_RIGHT) { dx = 1; } if (key == KeyEvent.VK_UP) { dy = -1; } if (key == KeyEvent.VK_DOWN) { dy = 1; } } 

mira este ejemplo de juego http://zetcode.com/tutorials/javagamestutorial/movingsprites/

Aquí hay un SSCCE ,

 package experiment; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class KeyListenerTester extends JFrame implements KeyListener { JLabel label; public KeyListenerTester(String s) { super(s); JPanel p = new JPanel(); label = new JLabel("Key Listener!"); p.add(label); add(p); addKeyListener(this); setSize(200, 100); setVisible(true); } @Override public void keyTyped(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_RIGHT) { System.out.println("Right key typed"); } if (e.getKeyCode() == KeyEvent.VK_LEFT) { System.out.println("Left key typed"); } } @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_RIGHT) { System.out.println("Right key pressed"); } if (e.getKeyCode() == KeyEvent.VK_LEFT) { System.out.println("Left key pressed"); } } @Override public void keyReleased(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_RIGHT) { System.out.println("Right key Released"); } if (e.getKeyCode() == KeyEvent.VK_LEFT) { System.out.println("Left key Released"); } } public static void main(String[] args) { new KeyListenerTester("Key Listener Tester"); } } 

Además, lea estos enlaces: Cómo escribir un oyente clave y Cómo usar los enlaces clave

La clase que implementa la interfaz KeyListener convierte en nuestro oyente de eventos clave personalizado. Este oyente no puede escuchar directamente los eventos clave. Solo puede escuchar los eventos clave a través de objetos intermedios como JFrame . Asi que

  1. Haga una clase de oyente clave como

     class MyListener implements KeyListener{ // override all the methods of KeyListener interface. } 
  2. Ahora nuestra clase MyKeyListener está lista para escuchar los eventos clave. Pero no puede hacerlo directamente.

  3. Cree cualquier objeto como el objeto JFrame través del cual MyListener pueda escuchar los eventos clave. para eso necesita agregar el objeto MyListener objeto JFrame .

     JFrame f=new JFrame(); f.addKeyListener(new MyKeyListener); 

Además de utilizar KeyListener (como se muestra en las respuestas de los demás), a veces debe asegurarse de que el JComponent que está utilizando sea enfocable. Esto se puede configurar agregando esto a su componente (si está subclasificando):

 @Override public void setFocusable(boolean b) { super.setFocusable(b); } 

Y agregando esto a su constructor:

 setFocusable(true); 

O bien, si llama a la función desde una clase / contenedor padre:

 JComponent childComponent = new JComponent(); childComponent.setFocusable(true); 

Y luego haciendo todas las cosas de KeyListener mencionadas por otros.