【问题标题】:How do you make key binding for a JFrame no matter what JComponent is in focus?无论 JComponent 是什么焦点,如何为 JFrame 进行键绑定?
【发布时间】:2013-11-12 06:22:31
【问题描述】:

无论框架中的焦点是什么,我们如何为 JFrame 进行键绑定?

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

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

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

【问题讨论】:

    标签: java swing jframe keylistener key-bindings


    【解决方案1】:

    你可以试试JComponent#getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)

    来自Java Docs

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

    【讨论】:

      【解决方案2】:

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

      现在,这是一个实现:

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

      【讨论】:

        【解决方案3】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-22
          • 2012-09-08
          • 2011-12-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多