我们如何为JFrame创建键绑定,而不管帧中的焦点是什么?
我已经看过这个问题:How do you make key bindings for a java.awt.Frame?
我尝试为JFrame的根窗格设置输入映射,但是当焦点位于JTextArea上时,即使editable为false,它也不起作用。
使密钥绑定在整个JFrame中运行的最简单方法是什么?
答案 0 :(得分:5)
您可以尝试使用JComponent#getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
常量用于registerKeyboardAction,表示该命令 应该在接收组件位于窗口中时调用 有焦点或本身就是重点组成部分。
答案 1 :(得分:3)
我尝试为JFrame的根窗格设置输入映射,但是当焦点位于JTextArea上时,即使editable为false,它也不起作用。
正确。如果组件具有焦点并实现相同的绑定,则该绑定将具有首选项。
如果您不希望该绑定适用于文本区域,则需要从文本区域中删除绑定。
阅读How to Use Key Bindings上Swing教程中的部分,了解可以使用的各种InputMaps的说明以及有关如何删除绑定的示例。
答案 2 :(得分:3)
正如@camickr所写,你不应该在文本区域上绑定相同的密钥。
现在,这是一个实现:
// Action action = ...
// KeyStroke stroke = ...
JRootPane rootPane = mainJFrame.getRootPane();
rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(stroke, "myAction");
rootPane.getActionMap().put("myAction", action);