我在 Java 中遇到了更多关键问题。 SPACE 键事件本身工作得很好,当按下其他键时...
但是,如果我同时按下 UP 键和 LEFT 键,则 SPACE 事件不会触发。但是,当单独按下或与其他键一起按下 LEFT 或 UP 时,SPACE 会触发。
这是我的代码:
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode() == KeyEvent.VK_UP)
{
upkeyisdown = true;
}
if(e.getKeyCode() == KeyEvent.VK_DOWN)
{
downkeyisdown = true;
}
if(e.getKeyCode() == KeyEvent.VK_LEFT)
{
leftkeyisdown = true;
}
if(e.getKeyCode() == KeyEvent.VK_RIGHT)
{
rightkeyisdown = true;
}
if(e.getKeyCode() == KeyEvent.VK_SPACE)
{
spacekeyisdown = true;
}
}
public void keyReleased(KeyEvent e)
{
if(e.getKeyCode() == KeyEvent.VK_UP)
{
upkeyisdown = false;
}
if(e.getKeyCode() == KeyEvent.VK_DOWN)
{
downkeyisdown = false;
}
if(e.getKeyCode() == KeyEvent.VK_LEFT)
{
leftkeyisdown = false;
}
if(e.getKeyCode() == KeyEvent.VK_RIGHT)
{
rightkeyisdown = false;
}
if(e.getKeyCode() == KeyEvent.VK_SPACE)
{
spacekeyisdown = false;
}
}
最佳答案
如 KeyEvent
中所述,不支持同时发生多个 KEY_PRESSED
或 KEY_RELEASED
事件。这同样适用于 KeyStroke
。您可以绑定(bind)到包含修饰符的KeyStroke
实例,如图here所示。修饰符可以包括“alt、shift、control、meta、altGraph 或其组合。”
附录:“如果我同时按下 UP 键和 LEFT 键,则 SPACE 事件不会触发。 ”
使用 How to Write a Key Listener 中的 KeyEventDemo
,我看到了预期的 KEY_PRESSED
和 KEY_RELEASED
事件。顺序会有所不同,因为事件实际上不可能“同时”发生,尽管 KEY_PRESSED
可靠地先于 KEY_RELEASED
。我怀疑您的代码中其他地方存在逻辑错误。管理复杂性的一种方法是
关于java - 当按下某些其他键时,KeyEvent 不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11269681/