Java无法使KeyListener在我的GUI中工作

时间:2015-04-23 00:33:46

标签: java keylistener

我正在为Lego EV3机器人制作一种遥控程序。那部分是无关紧要的。所以我制作了一个GUI,我想在按键时控制机器人。我知道我必须使用一个名为KeyListener的东西,我甚至看到了一个应该有用的教程。

GUI类代码就在这里。有点长,但它最后有KeyPressed事件。

http://pastebin.com/QK639BDs

我不确定我做错了什么,但程序没有检测到是否有任何按键被按下。任何。

我非常感谢有关如何开展这项工作的任何帮助。

编辑:

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键基本上会启动电机,它会继续移动,直到键释放将停止它。

关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:2)

KeyListener存在问题,尤其是焦点问题,因此,当您关注任何文字字段时,您的KeyListener将不会回复,例如。

更好的解决方案是使用键绑定API,它允许您控制触发键事件所需的焦点级别。例如,结合Action API,您可以为键和按钮定义常用操作。

请查看How to Use Key BindingsHow to Use Actions了解详情。

Ps-我很嫉妒,祝你好运;)

答案 1 :(得分:1)

这样做:

frame.getContentPane().addKeyListener(this);

您可能必须使用不同的组件,具体取决于您希望拥有关键侦听器的组件。