如何在Java KeyListener中检查按下的键是否为箭头键?

37

你能帮我重构这段代码吗:

public void keyPressed(KeyEvent e)
    {

    if (e.getKeyCode()==39)
    {
                //Right arrow key code
    }

    else if (e.getKeyCode()==37)
    {
                //Left arrow key code
    }

    repaint();

}
请说明如何检查上下箭头键,谢谢!
5个回答

89
public void keyPressed(KeyEvent e) {
    int keyCode = e.getKeyCode();
    switch( keyCode ) { 
        case KeyEvent.VK_UP:
            // handle up 
            break;
        case KeyEvent.VK_DOWN:
            // handle down 
            break;
        case KeyEvent.VK_LEFT:
            // handle left
            break;
        case KeyEvent.VK_RIGHT :
            // handle right
            break;
     }
} 

将KeyEvet替换为KeyEvent :) - Ricket

8
public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_RIGHT ) {
            //Right arrow key code
    } else if (e.getKeyCode() == KeyEvent.VK_LEFT ) {
            //Left arrow key code
    } else if (e.getKeyCode() == KeyEvent.VK_UP ) {
            //Up arrow key code
    } else if (e.getKeyCode() == KeyEvent.VK_DOWN ) {
            //Down arrow key code
    }

    repaint();
}

键盘事件代码都是API的一部分:http://docs.oracle.com/javase/7/docs/api/java/awt/event/KeyEvent.html


最终的整数代码; 代码 = e.getKeyCode(); switch(code) { } 将更快且同样清晰。 - TofuBeer

7

仅为完整答案(使用KeyEvent是正确的方法),但上箭头是38,下箭头是40,因此:

    else if (e.getKeyCode()==38)
    {
            //Up arrow key code
    }
    else if (e.getKeyCode()==40)
    {
            //down arrow key code
    }

0

如果您想将其附加到面板上(即您正在使用的窗口)。

那么,您必须创建一个继承自IKeyListener接口的内部类,然后在类中添加该方法。

然后,通过以下方式将该类附加到您的面板: this.addKeyListener(new subclass());


0

你应该使用像KeyEvent.VK_UP这样的东西,而不是实际的代码。

你想要如何重构它?重构的目标是什么?


我只需要知道用于检查此项的常量是什么,现在我正在与39/37等数值进行比较。 - Ali

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