如何在Java中检测箭头键?

11

我知道如何实现键盘监听器,这不是问题。

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。 我不知道要在那里放什么来监听箭头键。


此内容应该至少包含“AWT”标签或标题。 - user9999
7个回答

17

我建议使用:

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


我只想要普通的箭头键...不要影响我的箭头键! - Zeveso
3
这些是“常规箭头键”的代码。如果你仍然有问题,我建议你发布更多的代码,因为你可能在其他地方出了问题。 - robert_x44

3

KeyEvent.VK_LEFT, KeyEvent.VK_RIGHT等表示键盘上的特定按键。在编写与键盘输入有关的代码时,可以使用这些常量来检测用户是否按下了特定的键。

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


我只想要普通的箭头键...不要影响我的箭头键! - Zeveso
@user - 是的,它确实会影响箭头键。 - Brad Mace
@user516664 这是“常规”箭头键的代码。也许您想使用数字键盘箭头键,那么请使用 VK_KP_LEFT 等。如果仍然无法正常工作,请告诉我们 getKeyCode 返回的是哪些“常规箭头键”的代码。 - Laurence Gonsalves
我确实看到过一个使用VK_LEFT并且正常工作的例子,但那不适用于我——它返回的是LEFT TOP RIGHT DOWN的顺序中的37而非40。 - Zeveso
@user516664:嗯... VK_LEFT=37,VK_UP=38,VK_RIGHT=39,VK_DOWN=40。在这里查看表格:http://download.oracle.com/javase/6/docs/api/constant-values.html#java.awt.event.KeyEvent.VK_LEFT - Laurence Gonsalves

2

以下是我所做的使其工作的步骤:

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


请不要使用其他地方看到的随意标记。请使用编辑框工具栏中提供的按钮,并阅读有关如何格式化代码和文本的信息,从FAQ开始。谢谢,欢迎您的加入。 - user unknown

2

使用

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

其他的键包括:
KeyEvent.VK_UP
KeyEvent.VK_RIGHT
KeyEvent.VK_DOWN

我只想要普通的箭头键...不要影响我的箭头键! - Zeveso

1
使用getKeyCode()方法并将返回值与KeyEvent.VK_LEFTKeyEvent.VK_RIGHTKeyEvent.VK_UPKeyEvent.VK_DOWN常量进行比较。

我只想要普通的箭头键...不要影响我的箭头键! - Zeveso

0

首先声明初始化方法

public void init(){

this.addKeyListener(new keyb());}

然后使用实现 KeyListener 的内部类

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....就像你知道的那样


-1

顺便提一下,在KeyAdapter中,getCharCode()在keyTyped事件中不起作用。你应该尝试使用keyPressed或keyReleased事件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接