无论JComponent是什么焦点,你如何为JFrame进行键绑定?

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

我已经看过这个问题: 你如何为java.awt.Frame创建键绑定?

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

使密钥绑定在整个JFrame中工作的最简单方法是什么?

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

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

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

阅读有关如何使用键绑定的Swing教程中的部分, 以获取可以使用的各种InputMaps的说明以及有关如何删除绑定的示例。

您可以尝试使用JComponent#getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)

来自Java Docs

用于registerKeyboardAction的常量,表示当接收组件位于具有焦点的窗口或本身是焦点组件时,应调用该命令。

正如@camickr所写,你不应该在你的文本区域上绑定相同的密钥。

现在,这是一个实现:

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