Java KeyListener在没有" Windows键"的情况下收听箭头键。

时间:2014-05-13 20:46:15

标签: java keylistener

我制作了一个由箭头键控制的游戏。因此,我有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已被按下?

2 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:0)

您可以在密钥发布中捕获窗口密钥

case: KeyEvent.VK_WINDOWS:
//do nothing

因此,当您按下窗口+向上时,它不会注册向上按钮