如何为JFrame创建按键绑定,无论哪个JComponent有焦点?

10
我们如何为JFrame创建键绑定,而不考虑框架中的焦点在哪里?
我已经查看了这个问题:如何为java.awt.Frame创建键绑定? 我尝试设置JFrame的根面板的输入映射,但当焦点在JTextArea上时,它不起作用,即使editable为false。
如何最简单地使键绑定在整个JFrame上工作?
3个回答

7
你可以尝试使用JComponent#getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
Java文档中可知:
这是一个用于registerKeyboardAction的常量,意味着当接收组件在具有焦点的窗口中或者自身是聚焦组件时,应该调用该命令。

6

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

现在,这里是一个实现:

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

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

6
我尝试为JFrame的根面板设置输入映射,但当焦点在JTextArea上时,即使editable为false,它也无法工作。
正确。如果组件具有焦点并实现相同的绑定,则该绑定将优先考虑。
如果您不希望该绑定适用于文本区域,则需要从文本区域中删除该绑定。
阅读Swing教程中关于如何使用键绑定的章节,了解各种可用的InputMaps以及如何删除绑定的示例说明。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接