如何在java中检测箭头键?

时间:2010-12-23 20:05:33

标签: java key keylistener

我知道如何实现一个关键的监听器;那不是问题。

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放在哪里?当我创建一个keylistener并输入键时,我相信我得到了37 - 40.我不知道该把它放在那里只听箭头键。

7 个答案:

答案 0 :(得分:15)

我建议使用:

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

答案 1 :(得分:3)

KeyEvent.VK_LEFTKeyEvent.VK_RIGHT

此外,您应该使用getKeyCode,而不是getKeyChargetKeyChar用于实际对应于字符(字母,数字,空格等)的键。

答案 2 :(得分:2)

使用

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

其他关键是:

KeyEvent.VK_UP

KeyEvent.VK_RIGHT

KeyEvent.VK_DOWN

答案 3 :(得分:1)

以下是我的工作:

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中就可以正常工作。

答案 4 :(得分:0)

使用getKeyCode()方法并再次比较返回的值KeyEvent.VK_LEFTKeyEvent.VK_RIGHTKeyEvent.VK_UPKeyEvent.VK_DOWN常量。

答案 5 :(得分:0)

首先声明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 ....如你所知

答案 6 :(得分:-2)

btw in KeyAdapter - > keyTyped getCharCode()不起作用 您应该尝试使用keyPressed或keyReleased