我在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;
}
}
答案 0 :(得分:3)
如KeyEvent
所述,不支持同时发生多个KEY_PRESSED
或KEY_RELEASED
事件。这同样适用于KeyStroke
。您可以绑定到包含修饰符的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
之前。我怀疑代码中的其他地方存在逻辑错误。管理复杂性的一种方法是