Java 无论JFrame的哪个组件处于焦点位置,如何为JFrame进行键绑定?

Java 无论JFrame的哪个组件处于焦点位置,如何为JFrame进行键绑定?,java,swing,jframe,keylistener,key-bindings,Java,Swing,Jframe,Keylistener,Key Bindings,我们如何为JFrame创建键绑定,而不管框架中的焦点是什么 我已经看过这个问题: 我尝试为JFrame的根窗格设置输入映射,但是当焦点位于JTextArea上时,即使editable为false,它也不起作用 让键绑定跨整个JFrame工作的最简单方法是什么?您可以尝试使用JComponent\getInputMap(JComponent.WHEN\u IN\u FOCUSED\u WINDOW) 从 用于registerKeyboardAction的常量,表示命令 当接收组件位于 具有焦点或本

我们如何为JFrame创建键绑定,而不管框架中的焦点是什么

我已经看过这个问题:

我尝试为JFrame的根窗格设置输入映射,但是当焦点位于JTextArea上时,即使editable为false,它也不起作用


让键绑定跨整个JFrame工作的最简单方法是什么?

您可以尝试使用
JComponent\getInputMap(JComponent.WHEN\u IN\u FOCUSED\u WINDOW)

用于registerKeyboardAction的常量,表示命令 当接收组件位于 具有焦点或本身是焦点组件

我尝试为JFrame的根窗格设置输入映射,但是当焦点位于JTextArea上时,即使editable为false,它也不起作用

对。如果组件具有焦点并实现相同的绑定,则该绑定将具有首选项

如果不希望该绑定适用于文本区域,则需要从文本区域中删除该绑定


阅读上的Swing教程中的部分,了解您可以使用的各种输入映射的说明,以及如何删除绑定的示例。

正如@camickr所写,您不应该在文本区域上绑定相同的键

现在,这里是一个实现:

// Action action = ...
// KeyStroke stroke = ...

JRootPane rootPane = mainJFrame.getRootPane();
rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(stroke, "myAction");
rootPane.getActionMap().put("myAction", action);