Java - 离开窗口后的键盘状态

时间:2014-05-27 10:17:03

标签: java events keyboard mouse

标题可能有点误导,不知道如何解决我的问题。

基本上我正在做的是使用keyboardlistener找出哪些键已经关闭,并根据我移动我的游戏角色。

问题是,当您单击窗口外,在按住某个键时,我的监听器不会注册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();
}

1 个答案:

答案 0 :(得分:2)

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

    addFocusListener(new FocusListener() {

        @Override
        public void focusGained(FocusEvent e) {

        }

        @Override
        public void focusLost(FocusEvent e) {
            keyboard.mouseLeftWindow();
        }

    });