Java-离开窗口后的键盘状态
标题可能有点误导,我不知道如何简明扼要地说明我的问题 基本上,我所做的是我使用键盘监听器来找出哪些键是向下的,并据此移动我的游戏角色 问题是,当您在按住键的同时单击窗口外时,我的侦听器没有注册keyReleased事件 我试图通过使用mouse listener和mouseExited事件来修复它,但这并不能一直修复它,有时修复,有时修复 以下是我的实现: 键盘:Java-离开窗口后的键盘状态,java,events,keyboard,mouse,Java,Events,Keyboard,Mouse,标题可能有点误导,我不知道如何简明扼要地说明我的问题 基本上,我所做的是我使用键盘监听器来找出哪些键是向下的,并据此移动我的游戏角色 问题是,当您在按住键的同时单击窗口外时,我的侦听器没有注册keyReleased事件 我试图通过使用mouse listener和mouseExited事件来修复它,但这并不能一直修复它,有时修复,有时修复 以下是我的实现: 键盘: public void mouseLeftWindow() { for(int i =0;i<KEY_COUNT;i+
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;
}
}
即使鼠标退出组件,您的程序也将侦听其他按键事件。这意味着您在退出时将所有内容设置为false,但如果仍按某个键,它将立即再次设置为true。我想你要找的是焦点听众而不是鼠标听者
addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
}
@Override
public void focusLost(FocusEvent e) {
keyboard.mouseLeftWindow();
}
});
addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
}
@Override
public void focusLost(FocusEvent e) {
keyboard.mouseLeftWindow();
}
});