如何为java.awt.Frame及其所有组件进行键绑定?

如何为java.awt.Frame及其所有组件进行键绑定?,java,swing,Java,Swing,我在JFrame的构造函数中使用了以下代码。但它只有在没有聚焦任何帧组件时才起作用 this.getActionMap().put("doSomething",actions); getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_A, Event.CTRL_MASK),"doSomething"); thiis.getActionMap().put("doSomething",actions);` 但它只有在没有聚焦任何帧组件时才起作用

我在
JFrame
的构造函数中使用了以下代码。但它只有在没有聚焦任何帧组件时才起作用

this.getActionMap().put("doSomething",actions);
getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_A, Event.CTRL_MASK),"doSomething");
thiis.getActionMap().put("doSomething",actions);`
但它只有在没有聚焦任何帧组件时才起作用

this.getActionMap().put("doSomething",actions);
getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_A, Event.CTRL_MASK),"doSomething");
thiis.getActionMap().put("doSomething",actions);`
对。当组件具有焦点时,您将使用
InputMap
。如果希望绑定在组件没有焦点的情况下仍处于活动状态,则需要使用不同的
InputMap
。阅读Swing教程中有关3种不同InputMap类型的部分

如何为java.awt.Frame及其所有组件进行键绑定

键绑定用于Swing组件,而不是AWT组件

您应该将绑定添加到
JFrame
JRootPane

frame.getRootPane().getInputMap(...)...
frame.getRootPane().getActionMap()...

这个问题非常令人困惑,因为1)它在标题中提到了AWT框架的FQN,但在正文中继续讨论了Swing框架。2) 键绑定从来就不是针对AWT组件的。3) 毫无疑问。4) 包含this.getActionMap()…的代码段永远不会编译。-投票关闭。这对我来说很有效:我只想在按下ctrl+A时执行操作,即使jframe组件是否聚焦。@TibinTomy,在Java中不能这样做。Swing只能在帧具有焦点时管理事件。如果您想监听操作系统事件,则需要使用JNA或JNI(我对此一无所知)。