【问题标题】:KeyListener not working using AppletKeyListener 无法使用 Applet
【发布时间】:2014-02-17 13:27:10
【问题描述】:

我有一个使用按键侦听器的小程序,但是当我按下按键时不会触发事件.. 我还添加了 setFocusable(true),但也没有用..

这是我的代码

http://pastebin.com/WnFVVps7

我正在创建一个新的 KeyListener 并将其添加到小程序对象。 我也在我的 init() 方法上使用 setFocusable(true)。

我不知道该怎么做,有人可以看看我的代码吗?谢谢。

提前非常感谢;)

【问题讨论】:

    标签: java events applet keylistener


    【解决方案1】:

    这是KeyListener 的常见问题。

    问题是,KeyListener 只会在它注册到的组件是可聚焦的并且具有键盘焦点时才会响应击键。一般来说,这使得它不适合一般用途,它确实是一个专门的监听器。

    相反,您应该使用Key Bindings API,它允许您控制触发击键的焦点级别

    【讨论】:

    • 感谢您的回复,但是当我更改 while(true) 并运行一个新线程时,我解决了它。非常感谢您的回复;)
    • 请原谅我,我出去射击自己。您确实意识到 Swing 是一个单线程环境,与 UI 的交互只能在 EDT 的上下文中执行...
    【解决方案2】:

    如果您想捕获应用程序的全局键事件而不仅仅是组件,请使用KeyEventPostProcessor。这应该小心使用。

    【讨论】:

      【解决方案3】:

      我还没有尝试过,但问题可能是您声明了一个 KeyListener 类,并且还使用该名称导入了另一个类。尝试将您的 KeyListener 类重命名为不那么通用的名称。

      另外:您确定 KeyListener 类应该实现 KeyAdapter 而不是 java.awt.event.KeyListener?

      KeyListener.keyReleased() 和 .keyTyped() 有效吗?

      【讨论】:

      • 我将类重命名为 "key" ,但也不起作用:s 我还实现了 KeyListener 而不是扩展 KeyAdapter 并且什么都没有:s 其他事件也没有被触发
      【解决方案4】:

      里面有一段时间(真)有线程睡眠。因此没有触发击键,我更改了代码以在新线程中启动 while(true) 并且现在可以工作了:)

      感谢大家的耐心等待;)

      【讨论】:

        猜你喜欢
        • 2014-05-14
        • 1970-01-01
        • 2014-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多