【问题标题】:Event key arrow in JavaJava中的事件键箭头
【发布时间】:2015-08-14 17:41:20
【问题描述】:

我正在用Java模拟超人飞行。

如何创建一个同时考虑右箭头和左箭头键的事件?

我这样设置每个箭头的事件:

 public void keyPressed(KeyEvent e) 
{
 int KeyCode=e.getKeyCode();

 switch(KeyCode)
 {
     case KeyEvent.VK_LEFT:
         supermanleft.moveLeft();
         break;
     case KeyEvent.VK_RIGHT:
         supermanfly.moveRight();
         break;
     case KeyEvent.VK_UP:
         superman.moveUp();
         break;
     case KeyEvent.VK_DOWN:
         superman.moveDown();
         break;
 }
}

当我同时点击两个箭头时,超人会返回。

【问题讨论】:

  • 是否应该对角线?如果否,则添加一个布尔标志。

标签: java swing keylistener keyboard-events


【解决方案1】:

当两个键都被按下时,每个键都会调用keyPressed。您可以保持按下一组键,然后查看是否需要按下两个键:

private Set<Character> pressed = new HashSet<Character>();

public synchronized void keyPressed(KeyEvent e) {

    pressed.add(e.getKeyChar());

    if (pressed.size() > 1) {
        //check if pressed contains what you want it to contain
    } else {
       //only one key is pressed - act as normal
    }
}

public synchronized void keyReleased(KeyEvent e) {
    //don't forget to remove when released:
    pressed.remove(e.getKeyChar());
}

希望这会有所帮助。

【讨论】:

  • 在方法中添加synchronized 有什么意义?除此之外,getKeyChar() 应该只用于KEY_TYPED 事件。当您想跟踪当前按下了哪些键时,您应该使用getKeyCode() 来查询实际的 key 而不是 character
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-22
  • 1970-01-01
  • 2021-11-30
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多