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

tru*_*ktr 7 java swing keylistener key-bindings jframe

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

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

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

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

Mad*_*mer 6

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

来自Java Docs

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


cam*_*ckr 5

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

正确的。如果组件具有焦点并实现相同的绑定,则该绑定将具有优先权。

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

阅读 Swing 教程中关于如何使用键绑定的部分,以了解您可以使用的各种 InputMap 的说明以及有关如何删除绑定的示例。


Juh*_*uh_ 5

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

现在,这是一个实现:

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

JRootPane rootPane = mainJFrame.getRootPane();
rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(stroke, "myAction");
rootPane.getActionMap().put("myAction", action);
Run Code Online (Sandbox Code Playgroud)