如何检测java中的箭头键?

发布于 2024-10-09 15:10:10 字数 485 浏览 0 评论 0原文

我知道如何实现关键侦听器;这不是问题。

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。我不知道该放什么来监听方向键。

I know how to implement a key listener; that's not the problem.

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

What do I put where the LEFT_KEY / 40 / 39 / 38? When I created a keylistener and type in the keys, I believe I got 37 - 40. I don't know what to put there to listen for just the arrow keys.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

原谅我要高飞 2024-10-16 15:10:10

我建议使用:

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

I would recommend using:

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

repeating with VK_DOWN, VK_LEFT, VK_RIGHT.

There are seperate codes for the numeric keypad: VK_KP_UP, VK_KP_DOWN, VK_KP_LEFT, VK_KP_RIGHT if you need them.

See KeyEvent for all of the codes.

风月客 2024-10-16 15:10:10

KeyEvent.VK_LEFTKeyEvent.VK_RIGHT 等。

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

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.).

醉态萌生 2024-10-16 15:10:10

使用

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

其他按键有:

KeyEvent.VK_UP

KeyEvent.VK_RIGHT

KeyEvent.VK_DOWN

Use

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

The other keys are:

KeyEvent.VK_UP

KeyEvent.VK_RIGHT

KeyEvent.VK_DOWN

木有鱼丸 2024-10-16 15:10:10

以下是我为使其工作而所做的工作:

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

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.

遗忘曾经 2024-10-16 15:10:10

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

Use the getKeyCode() method and compare the returned value agains KeyEvent.VK_LEFT, KeyEvent.VK_RIGHT, KeyEvent.VK_UP and KeyEvent.VK_DOWN constants.

柒七 2024-10-16 15:10:10

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

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

时光是把杀猪刀 2024-10-16 15:10:10

顺便说一句,在 KeyAdapter -> keyTyped getCharCode() 不起作用
您应该尝试 keyPressed 或 keyReleased

btw in KeyAdapter -> keyTyped getCharCode() didn't work
You should try keyPressed or keyReleased

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文