¿Cómo puedo detectar las teclas de flecha en Java?
-
12-10-2019 - |
Pregunta
Yo sé cómo implementar un detector de teclas; ese no es el problema.
public void keyTyped(KeyEvent event) {
if (event.getKeyChar() == KEY_LEFT) {
cTDirection = LEFT;
}
if (event.getKeyChar() == 40) {
cTDirection = DOWN;
}
if (event.getKeyChar() == 39) {
cTDirection = RIGHT;
}
if (event.getKeyChar() == 38) {
cTDirection = UP;
}
}
¿Qué debo poner en el LEFT_KEY
/ 40/39 / de 38? Cuando creé una keyListener y el tipo de las teclas, creo que tengo 37 - 40. No sé qué poner allí para escuchar sólo las teclas de flecha
Solución
Yo recomiendo usar:
if (event.getKeyCode() == KeyEvent.VK_UP) {
...
}
repitiendo con VK_DOWN, VK_LEFT, VK_RIGHT
.
Hay códigos separados para el teclado numérico: VK_KP_UP, VK_KP_DOWN, VK_KP_LEFT, VK_KP_RIGHT
si los necesita ??p>.
KeyEvent para todos de los códigos.
Otros consejos
KeyEvent.VK_LEFT
, KeyEvent.VK_RIGHT
, etc.
Also, you should use getKeyCode
, not getKeyChar
. getKeyChar
is for keys that actually correspond to characters (letters, numbers, spaces, etc.).
Use
if ( e.getKeyCode() == KeyEvent.VK_LEFT){
//Do something
}
The other keys are:
KeyEvent.VK_UP
KeyEvent.VK_RIGHT
KeyEvent.VK_DOWN
Here is what I did to make it work:
public void keyPressed (KeyEvent e) {
int c = e.getKeyCode ();
if (c==KeyEvent.VK_UP) {
b.y--;
} else if(c==KeyEvent.VK_DOWN) {
b.y++;
} else if(c==KeyEvent.VK_LEFT) {
b.x--;
} else if(c==KeyEvent.VK_RIGHT) {
b.x++;
}
System.out.println (b.x);
b.repaint ();
}
For me it isn't working if I put it in KeyPressed but works fine if I put it in KeyTyped.
Use the getKeyCode()
method and compare the returned value agains KeyEvent.VK_LEFT
, KeyEvent.VK_RIGHT
, KeyEvent.VK_UP
and KeyEvent.VK_DOWN
constants.
first declare init method
public void init(){
this.addKeyListener(new keyb());}
then use inner class which implements KeyListner
class keyb implements KeyListener{
public void keyPressed (KeyEvent e){
if(e.getKeyCode()==KeyEvent.VK_UP){
y-=50;
}else if(e.getKeyCode()==KeyEvent.VK_DOWN){
y+=50;
}else if(e.getKeyCode()==KeyEvent.VK_RIGHT){
x+=50;
}else if(e.getKeyCode()==KeyEvent.VK_LEFT){
x-=50;
}
repaint();
}
public void keyReleased (KeyEvent e){}
public void keyTyped (KeyEvent e){}
}
you can also use adapter instead of writing Keyreleased & keyTyped .... as you know
btw in KeyAdapter -> keyTyped getCharCode() didn't work You should try keyPressed or keyReleased