【问题标题】:How do you make key binding for a JFrame no matter what JComponent is in focus?无论 JComponent 是什么焦点,如何为 JFrame 进行键绑定?
【发布时间】:2013-11-12 06:22:31
【问题描述】:
【问题讨论】:
标签:
java
swing
jframe
keylistener
key-bindings
【解决方案1】:
你可以试试JComponent#getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
来自Java Docs
用于 registerKeyboardAction 的常量表示该命令
当接收组件在窗口中时应该调用
具有焦点或本身就是焦点组件。
【解决方案2】:
正如@camickr 所写,您的文本区域不应绑定相同的键。
现在,这是一个实现:
// Action action = ...
// KeyStroke stroke = ...
JRootPane rootPane = mainJFrame.getRootPane();
rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(stroke, "myAction");
rootPane.getActionMap().put("myAction", action);
【解决方案3】:
我尝试为 JFrame 的根窗格设置输入映射,但是当焦点位于 JTextArea 上时它不起作用,即使 editable 为 false。
正确。如果组件具有焦点并实现相同的绑定,则该绑定将具有优先权。
如果您不希望该绑定适用于文本区域,则需要从文本区域中删除该绑定。
阅读 How to Use Key Bindings 上的 Swing 教程部分,了解您可以使用的各种 InputMap 的说明以及如何删除绑定的示例。