我正在为Lego EV3机器人制作一种遥控程序。那部分是无关紧要的。所以我制作了一个GUI,我想在按键时控制机器人。我知道我必须使用一个名为KeyListener的东西,我甚至看到了一个应该有用的教程。
GUI类代码就在这里。有点长,但它最后有KeyPressed事件。
我不确定我做错了什么,但程序没有检测到是否有任何按键被按下。任何。
我非常感谢有关如何开展这项工作的任何帮助。
编辑:
keyManager=KeyboardFocusManager.getCurrentKeyboardFocusManager();
keyManager.addKeyEventDispatcher(new KeyEventDispatcher() {
// UP:38 DOWN:40 LEFT:37 RIGHT:39
public boolean dispatchKeyEvent(KeyEvent e) {
if(e.getID()==KeyEvent.KEY_PRESSED && e.getKeyCode()==38){
System.out.println("UP");
return true;
}
if(e.getID()==KeyEvent.KEY_RELEASED&& e.getKeyCode()==38){
System.out.println("RELEASED");
return true;
}
return false;
}
});
所以我浏览了一下,我发现KeyboardFocusManger对我有用。我用println测试它。我只有一个问题。当我按住UP键时,我希望它只打印一次UP。因为UP键基本上会启动电机,它会继续移动,直到键释放将停止它。
关于如何做到这一点的任何想法?
答案 0 :(得分:2)
KeyListener
存在问题,尤其是焦点问题,因此,当您关注任何文字字段时,您的KeyListener
将不会回复,例如。
更好的解决方案是使用键绑定API,它允许您控制触发键事件所需的焦点级别。例如,结合Action
API,您可以为键和按钮定义常用操作。
请查看How to Use Key Bindings和How to Use Actions了解详情。
Ps-我很嫉妒,祝你好运;)
答案 1 :(得分:1)
这样做:
frame.getContentPane().addKeyListener(this);
您可能必须使用不同的组件,具体取决于您希望拥有关键侦听器的组件。