我正在为我们的游戏重构大量代码,使对象耦合尽可能不存在(为了更容易测试和未来的实现)。目前,我的JFrame侦听密钥,将其发送到eventmanager类,该类再次需要对对keyinput执行操作的每个对象的引用,并对这些对象调用方法。
保持响应对象内的关键事件的责任似乎是一个好主意,这将允许我更改当前屏幕并使新屏幕的行为不同而不检查不同的全局状态(如切换到gamemenu)。
但我不知道如何为我的自定义对象实现keylistener,它似乎必须是swing / awt组件。如何将KeyListener添加到自定义对象?我知道如何创建自定义事件和自定义侦听器,但不知道如何通过这些方法捕获键盘输入。
答案 0 :(得分: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
答案 1 :(得分:1)
这就是为什么实施KeyBindings
的原因最可伸缩的抽象(有或没有寻找焦点到具体的JComponents)
输出可能是Swing Action(相同的抽象,可管理,可扩展)
在秋千中绘画的最佳方式
Swing使用KeyBindings进行内部commnads和short_cuts
另一种方法是使用AWTEventListener(鼠标和键事件),
但我会用于复杂的key_shortcuts
同时按下三个以上的键
使用OpenGL / CL
特殊情况,其中KeyBindings,KeyListener或API中实现的通知程序不适当的监听器
我的similair问题how to add any Listener to Icon