【问题标题】:Java KeyListener listen to arrow keys without "Windows key"Java KeyListener 在没有“Windows 键”的情况下监听箭头键
【发布时间】:2014-07-01 17:12:58
【问题描述】:

我制作了一个由箭头键控制的游戏。因此我有一个KeyListener 监听箭头键:

public void keyReleased(KeyEvent event)
{
    switch(event.getExtendedKeyCode())
    {
        case KeyEvent.VK_UP:
            gameManager.up();
            break;
        case KeyEvent.VK_DOWN:
            gameManager.down();
            break;
        case KeyEvent.VK_RIGHT:
            gameManager.right();
            break;
        case KeyEvent.VK_LEFT:
            gameManager.left();
            break;
    }
}

现在这是我的问题:
当我通过按Windows key + Up arrow 使用键盘最大化窗口时,这些事件仍然会被触发。如何检测到Windows key 已被按下,而其中一个箭头键被按下?

【问题讨论】:

  • 该帖子中描述的内容适用于CTRLSHIFT 等键,但我没有找到WINDOWS_MASK 或类似的东西。
  • 是的,我意识到这不是重复的,并撤回了我的近距离投票

标签: java keylistener


【解决方案1】:

KeyListener 中设置一个标志,例如

boolean windowsPressed;

public void keyPressed(KeyEvent e) {
    if(event.getExtendedKeyCode() == VK.WINDOWS) windowsPressed = true;
}

public void keyReleased(KeyEvent event)
{
    switch(event.getExtendedKeyCode())
    {
        case KeyEvent.VK_UP:
            if(!windowsPressed) gameManager.up();
            break;
        case KeyEvent.VK_DOWN:
            gameManager.down();
            break;
        case KeyEvent.VK_RIGHT:
            gameManager.right();
            break;
        case KeyEvent.VK_LEFT:
            gameManager.left();
            break;
        case KeyEvent.VK_WINDOWS:
            windowsPressed = false;
            break;
    }
}

【讨论】:

  • 当然,您也需要相应的 keyRelease 处理程序来清除标志。
【解决方案2】:

您可以在 keyreleased 中捕获窗口键

case: KeyEvent.VK_WINDOWS:
//do nothing

所以当你按下窗口+向上时它不会注册向上按钮

【讨论】:

  • 我试过了,但它不起作用,因为我按的是组合键而不是单个键。
猜你喜欢
  • 2014-07-05
  • 1970-01-01
  • 2012-02-16
  • 2015-05-07
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多