【问题标题】:Java can't get KeyListener to work in my GUIJava 无法让 KeyListener 在我的 GUI 中工作
【发布时间】:2015-04-23 00:33:45
【问题描述】:

我正在为乐高 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 键基本上会启动电机,它会一直移动,直到松开键停止它。

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

【问题讨论】:

  • 没有查看完整的代码,但您添加关键侦听器的部分似乎已被注释。无论如何,如果您添加了 keylistener,则目标组件可能不会被聚焦。一旦你的容器显示出来(它必须是可见的)尝试在你添加监听器的任何组件中调用component.requestFocusInWindow()

标签: java keylistener


【解决方案1】:

KeyListener 有问题,尤其是焦点问题,因此当您的任何文本字段获得焦点时,您的 KeyListener 将不会响应,例如。

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

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

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

【讨论】:

  • 我似乎无法理解键绑定和操作,至少目前是这样。我相信我找到了一个快速解决我的问题的方法,我编辑了我的原始问题。你能看一下,看看你能不能帮我解决这个问题?谢谢:)
  • @Serpace 它(不必要地)笨拙。至于您希望只响应一次关键操作,您需要提出一个标志,您的应用程序的另一部分可以监控该标志。这排除了某些操作系统执行的重复按键事件的可能性
【解决方案2】:

这样做:

frame.getContentPane().addKeyListener(this);

您可能需要使用不同的组件来执行此操作,具体取决于您希望在哪个组件上设置关键侦听器。

【讨论】:

    猜你喜欢
    • 2014-01-27
    • 2014-04-03
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 2011-11-27
    • 1970-01-01
    • 2016-02-24
    相关资源
    最近更新 更多