按java键作为键入的键
我在尝试实现KeyEventDispatcher
时遇到了一个小问题。按住键盘上的任何键都会导致QuestGUI
在真与假之间切换。这意味着它会检查每次执行时是否按下该键。我想要的是,当我按下“A”键时,它将触发一个事件供我的KeyEventDispatcher
处理。然后它应该等待,直到按下下一个键。我的代码如下所示
测试。java
package core;
import java.awt.KeyboardFocusManager;
import javax.swing.JFrame;
public class Test
{
public Test (){
JFrame frame = new JFrame ();
frame.setResizable (false);
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo (null);
frame.pack ();
frame.setSize (800, 600);
frame.setVisible (true);
KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
manager.addKeyEventDispatcher(new KeyManager());
}
public static void main (String[] args){
new Test();
}
}
密钥管理器。java
package core;
import java.awt.KeyEventDispatcher;
import java.awt.event.KeyEvent;
public class KeyManager implements KeyEventDispatcher {
private boolean QuestGUI;
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
if (e.getID() == KeyEvent.KEY_PRESSED) {
QuestGUI = !QuestGUI;
System.out.println("QuestGUI" + QuestGUI);
}
return false;
}
}
它可以通过添加一个boolean
来检查Q是否被按下来解决,它只会在Q被释放后工作。像PRESSED_Q
。然后我需要为每个键绑定和匹配它。然而,这感觉很笨拙。我希望KEY_PRESSED
会自动执行此操作
# 1 楼答案
就我个人而言,我更喜欢对这类事情使用键绑定,这就是我,但是你可以创建两个
Action
,一个用于按下,另一个用于释放,它只需要一个“键”值,它会根据触发器将某种Map
(即"Up"
)中的值设置为true
/false
,但这就是我核心问题是
KEY_PRESSED
事件将根据操作系统以固定的间隔重复。这意味着您的QuestGUI
值不断被翻转。您需要检测KEY_PRESSED
和KEY_RELEASED
事件并采取适当的措施,例如您还可以使用
KeyEvent#getKeyCode
值,将其放置在List
或Map
中,以检测何时按下/释放某些键就我个人而言,我认为密钥绑定更易于管理、扩展和配置,但我想这一切都取决于上下文