java - 当按下某些其他键时,KeyEvent 不会触发

标签 java swing awt keylistener keyevent

我在 Java 中遇到了更多关键问题。 SPACE 键事件本身工作得很好,当按下其他键时...

但是,如果我同时按下 UP 键和 LEFT 键,则 SPACE 事件不会触发。但是,当单独按下或与其他键一起按下 LEFTUP 时,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_PRESSEDKEY_RELEASED 事件。这同样适用于 KeyStroke 。您可以绑定(bind)到包含修饰符的KeyStroke实例,如图here所示。修饰符可以包括“alt、shift、control、meta、altGraph 或其组合。”

附录:“如果我同时按下 UP 键和 LEFT 键,则 SPACE 事件不会触发。 ”

使用 How to Write a Key Listener 中的 KeyEventDemo ,我看到了预期的 KEY_PRESSEDKEY_RELEASED 事件。顺序会有所不同,因为事件实际上不可能“同时”发生,尽管 KEY_PRESSED 可靠地先于 KEY_RELEASED。我怀疑您的代码中其他地方存在逻辑错误。管理复杂性的一种方法是

  • 使用enum来保存keyCode;这个game使用单次击键,但它说明了如何在此上下文中使用枚举

  • 使用EnumSet来包含已识别的组合;有一个相关的例子here

关于java - 当按下某些其他键时,KeyEvent 不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11269681/

相关文章:

java - 局部引用变量也称为组合吗?

java - Oracle Char 类型和 Hibernate

java.awt.Color 在 Android 中的使用

java - 用Java从一个角度画线

java - 使用 JSeperator 时出现异常间隙 - Java

java - 有没有更好的方法将 Double 转换为其精确的十进制字符串?

java - 如何在XSSF中获取背景单元格颜色

java - 将图像存储到 netbeans 的文件夹中

java - 如何处理组合框中的超长文本项

Java - 无法更新 JLabel 的文本