0

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

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

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

4

2 回答 2

2

不要使用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

于 2013-04-10T12:45:57.260 回答
1
  • 这就是为什么实施 KeyBindings 的原因

    1. 最可扩展的抽象(有或没有寻找焦点到具体的 JComponents)

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

    3. 在 Swing 中绘画的最佳方法

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

  • 另一种方法是使用 AWTEventListener (鼠标和键事件),

    1. 但我将用于复杂的 key_shortcuts

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

    3. 检测字符序列

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

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

  • 我的类似问题如何将任何侦听器添加到图标

于 2013-04-10T12:48:39.930 回答