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

时间:2013-11-01 03:13:01

标签: java swing jframe keylistener key-bindings

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

我已经看过这个问题:How do you make key bindings for a java.awt.Frame?

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

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

3 个答案:

答案 0 :(得分:5)

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

来自Java Docs

  

常量用于registerKeyboardAction,表示该命令   应该在接收组件位于窗口中时调用   有焦点或本身就是重点组成部分。

答案 1 :(得分:3)

  

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

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

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

阅读How to Use Key Bindings上Swing教程中的部分,了解可以使用的各种InputMaps的说明以及有关如何删除绑定的示例。

答案 2 :(得分:3)

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

现在,这是一个实现:

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

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