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

.
¿Fue útil?

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 .

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top