Как я могу обнаружить клавиши со стрелками в Java? - PullRequest
8 голосов
/ 23 декабря 2010

Я знаю, как реализовать ключевой слушатель;это не проблема.

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;
    }
}

Что мне поставить, где LEFT_KEY / 40/39/38?Когда я создал список ключей и набрал ключи, я думаю, что получил 37 - 40. Я не знаю, что там делать, чтобы слушать только клавиши со стрелками.

Ответы [ 7 ]

15 голосов
/ 23 декабря 2010

Я бы порекомендовал использовать:

if (event.getKeyCode() == KeyEvent.VK_UP) {
...
}

повторяется с VK_DOWN, VK_LEFT, VK_RIGHT.

Для цифровой клавиатуры предусмотрены отдельные коды: VK_KP_UP, VK_KP_DOWN, VK_KP_LEFT, VK_KP_RIGHT, если они вам нужны.

См. KeyEvent для всех кодов.

3 голосов
/ 23 декабря 2010

KeyEvent.VK_LEFT, KeyEvent.VK_RIGHT и т. Д.

Кроме того, вы должны использовать getKeyCode, а не getKeyChar. getKeyChar для ключей, которые фактически соответствуют символам (буквы, цифры, пробелы и т. Д.).

2 голосов
/ 23 декабря 2010

Использование

if ( e.getKeyCode() == KeyEvent.VK_LEFT){
     //Do something
}

Другие ключи:

KeyEvent.VK_UP

KeyEvent.VK_RIGHT

KeyEvent.VK_DOWN

1 голос
/ 29 апреля 2012

Вот что я сделал, чтобы заставить его работать:

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 ();
    }

Для меня это не работает, если я помещаю его в KeyPressed, но отлично работает, если я помещаю его в KeyTyped.

0 голосов
/ 23 декабря 2014

сначала объявите метод init

public void init(){

this.addKeyListener(new keyb());}

, затем используйте внутренний класс, реализующий 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){}
    }

, вы также можете использовать адаптер вместо написания Keyreleased & keyTyped ....

0 голосов
/ 29 сентября 2013

кстати в KeyAdapter -> keyTyped getCharCode () не работает Вы должны попробовать keyPressed или keyReleased

0 голосов
/ 23 декабря 2010

Используйте метод getKeyCode() и сравните возвращаемое значение с константами KeyEvent.VK_LEFT, KeyEvent.VK_RIGHT, KeyEvent.VK_UP и KeyEvent.VK_DOWN.

...