【问题标题】:how can I detect arrow keys in java?如何检测java中的箭头键?
【发布时间】:2011-05-30 03:44:27
【问题描述】:

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

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。我不知道该放什么来只听箭头键。

【问题讨论】:

  • 这应该在列表标签​​或标题中包含“AWT”。

标签: java key keylistener


【解决方案1】:

KeyEvent.VK_LEFTKeyEvent.VK_RIGHT

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

【讨论】:

  • 我只想要普通的方向键...这不会影响我的方向键!
  • @user - 是的,它确实会影响箭头键。
  • @user516664 是“常规”箭头键的代码。也许您想要数字键盘箭头,在这种情况下使用 VK_KP_LEFT 等。如果仍然不起作用,请告诉我们 getKeyCode 为您的“常规箭头键”返回什么。
  • 我确实看到了一个与 VK_LEFT 一起工作并且所有工作都正常的例子,但它不适合我 - 它按左上右下的顺序返回 37 和 40
  • @user516664:呃……VK_LEFT=37,VK_UP=38,VK_RIGHT=39,VK_DOWN=40。请参阅此处的表格:download.oracle.com/javase/6/docs/api/…
【解决方案2】:

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

【讨论】:

  • 我只想要普通的方向键...这不会影响我的方向键!
【解决方案3】:

我建议使用:

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

【讨论】:

  • 我只想要普通的方向键...这不会影响我的方向键!
  • 这些是“常规箭头键”的代码。如果您仍然遇到问题,我建议您发布更多代码,因为您在其他地方有问题。
【解决方案4】:

使用

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

其他键是:

KeyEvent.VK_UP

KeyEvent.VK_RIGHT

KeyEvent.VK_DOWN

【讨论】:

  • 我只想要普通的方向键...这不会影响我的方向键!
【解决方案5】:

这是我为使其工作所做的工作:

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

【讨论】:

  • 请不要使用您在其他地方看到的随机标记。使用编辑框工具栏中的按钮并阅读如何格式化代码和文本,从常见问题解答开始。谢谢,欢迎。
【解决方案6】:

KeyAdapter 中的 btw -> keyTyped getCharCode() 不起作用 你应该试试 keyPressed 或 keyReleased

【讨论】:

    【解决方案7】:

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

    【讨论】:

      猜你喜欢
      • 2012-12-09
      • 2015-07-14
      • 2014-09-03
      • 2016-11-11
      • 2013-02-04
      • 2012-10-21
      • 2011-08-01
      • 1970-01-01
      相关资源
      最近更新 更多