这个问题出现时,一位匿名用户对我的答案进行了低估,涉及KeyListeners并建议使用Key Bindings。这位匿名用户告诉我,KeyListener接口是一个旧的AWT解决方案,不应该使用。
但是,我不知道我是否应该完全信任这些信息。我已经在各种网站上进行了研究,包括oracle,并且没有发现任何关于KeyListeners或Key Bindings的功能。我知道这两个人执行类似的任务这一事实,但我不确定“幕后”到底发生了什么,可以这么说。
我倾向于在未来的项目中使用Key Bindings,因为我获得的研究表明KeyListener接口要求相关组件具有焦点而Key Bindings没有。但是,我很困惑。为什么会这样? Key Bindings的触发方式与KeyListeners的触发方式有何不同?
P.S。我很确定这很罕见,但在某些情况下使用KeyListeners更合适吗?
答案 0 :(得分:10)
How to Use Key Bindings解释了基础知识。
绑定用于将特定操作映射到特定KeyStroke。
当所有其他抽象都不起作用时,KeyListener是最后的手段。也许你在监听任何KeyStroke时会使用KeyListener。因此,为字母表中的所有字母创建26个绑定是不切实际的。
但在许多情况下,还有更好的API可供使用。例如,您可以使用DocumentListener来监听对Document的更改,而不是在文本字段上侦听KeyEvents。
答案 1 :(得分:0)
我建议你使用KeyBindings有很多原因:
将它用于KeyListener可能很困难,但KeyListener将无法处理游戏中的多次按键操作。