【问题标题】:Adding KeyListener to custom objects将 KeyListener 添加到自定义对象
【发布时间】:2023-03-26 00:21:01
【问题描述】:

我正在为我们的游戏重构大量代码,以使对象耦合尽可能不存在(以便于测试和未来的实现)。目前,我的 JFrame 侦听键,将其发送到 eventmanager 类,该类再次需要对每个对 keyinput 执行操作并调用这些对象的方法的对象的引用。

保留响应对象内的键事件的责任似乎是个好主意,例如,这将允许我更改当前屏幕并让新屏幕表现不同而无需检查不同的全局状态(例如切换到游戏菜单)。

但我不知道如何为我的自定义对象实现 keylistener,它似乎必须是一个 swing/awt 组件。如何将 KeyListener 添加到自定义对象?我知道如何创建自定义事件和自定义侦听器,但不知道如何通过这些方法捕获键盘输入。

【问题讨论】:

    标签: java swing awt keylistener


    【解决方案1】:

    不要使用KeyListener。而是使用 Swing 键绑定:

    javax.swing.JComponent.registerKeyboardAction(ActionListener, KeyStroke, int)
    javax.swing.JComponent.getInputMap(int)
    javax.swing.JComponent.getActionMap()
    

    查看教程:http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html

    【讨论】:

      【解决方案2】:
      • 这就是为什么要实现 KeyBindings 的原因

        1. 最可扩展的抽象(无论是否寻找焦点到具体的 JComponent)

        2. 输出可以是 Swing Action(相同的抽象、可管理、可扩展)

        3. Swing 绘画的最佳方式

        4. Swing 将 KeyBindings 用于内部命令和快捷方式

      • 另一种方式是使用AWTEventListener(鼠标&按键事件),

        1. 但我会使用复杂的 key_shortcuts

        2. 同时按下三个以上的键

        3. detect sequence of chars

        4. 用于在 AWT 中使用 OpenGL/CL 进行绘制

        5. API 中的 KeyBindings、KeyListener 或实现的通知器不是正确的侦听器的特殊情况

      • 我的类似问题how to add any Listener to Icon

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-26
        • 2016-02-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多