【问题标题】:Java - keyboard state after leaving windowJava - 离开窗口后的键盘状态
【发布时间】:2014-07-16 05:04:27
【问题描述】:

标题可能有点误导,不知道如何简短地说出我的问题。

基本上我正在做的是我使用键盘监听器来找出哪些键被按下并根据我移动我的游戏角色。

问题是,当您点击窗口外时,按住一个键,我的侦听器没有注册 keyReleased 事件。

我尝试通过使用鼠标侦听器和 mouseExited 事件来修复它,但这并不能一直修复它,有时它会有时它不会。

这是我的实现:

键盘:

public void mouseLeftWindow()
{
    for(int i =0;i<KEY_COUNT;i++)
    {
        keys[i] = false;
    }
}

@Override
public void keyPressed(KeyEvent e) 
{
    int keyCode = e.getKeyCode();
    if(keyCode>=0 && keyCode<KEY_COUNT)
    {
        keys[keyCode] = true;
    }
}

@Override
public void keyReleased(KeyEvent e) 
{
    int keyCode = e.getKeyCode();
    if(keyCode>=0 && keyCode<KEY_COUNT)
    {
        keys[keyCode] = false;
    }
}

其中 keys[] 是一个 boolean[] 描述,哪些代码被按下

鼠标:

@Override
public void mouseExited(MouseEvent e) 
{
    mouseMoved(e);
    keyboard.mouseLeftWindow();
}

【问题讨论】:

    标签: java events keyboard mouse


    【解决方案1】:

    即使您的鼠标退出组件,您的程序也会监听更多的按键事件。这意味着您在退出时将所有内容设置为 false,但如果仍然按下某个键,它将立即再次设置为 true。我认为您正在寻找 FocusListener 而不是 MouseListener。

        addFocusListener(new FocusListener() {
    
            @Override
            public void focusGained(FocusEvent e) {
    
            }
    
            @Override
            public void focusLost(FocusEvent e) {
                keyboard.mouseLeftWindow();
            }
    
        });
    

    【讨论】:

      猜你喜欢
      • 2014-10-15
      • 1970-01-01
      • 2023-04-10
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      • 2013-10-21
      • 2021-05-07
      • 1970-01-01
      相关资源
      最近更新 更多