Swing:全局键盘快捷键
Swing: Global keyboard shorcuts
因此 Swing 文本组件提供了一种实现全局键盘快捷键的方法。 JTextComponent.getKeyMap(JTextComponent.DEFAULT_KEYMAP) 提供了一种方法来修改所有 Swing 文本组件继承的全局默认键映射。但是其他组件是否有全局设置键绑定的方法?
我问这个问题的原因是因为在工作中我们有一个我们正在处理的遗留 Swing 应用程序,并且有一些行为对于我们只是没有的其他应用程序来说是非常标准的。例如,按 escape 关闭对话框之类的事情。虽然我可以遍历整个代码库,找到对话框的每个实例,并添加此行为,但能够在全局范围内向组件添加键绑定会很好。
理想情况下,这种全局行为将能够应用于特定的 类(即一些应用到 JDialog,一些应用到 JFrame 等),但如果它必须是 100% 全局的,那很好。
有什么想法吗?
每个 Swing 组件都有一个 InputMap
,由所有相同类型的组件共享。对此 InputMap
的更改将影响所有组件。
例如所有 JTextAreas
共享一个 focusInputMap
。要使用 Control-A 禁用 select 所有文本的功能,您可以使用如下代码:
InputMap im = (InputMap) UIManager.get("TextArea.focusInputMap");
KeyStroke keyStroke = KeyStroke.getKeyStroke("control A");
im.put(keyStroke, "none");
您可以查看 UIManager Defaults 以了解为给定的 Swing 组件实现了哪些 InputMap。
框架和对话框没有出现在 UIManager 中,所以我不知道它们是否支持 InputMaps。您可以尝试添加 "Dialog.ancestorInputMap" 并创建您自己的绑定以查看是否可行。
否则你可以尝试使用 "RootPane.ancestorInputMap" 虽然我猜这个 InputMap 会被框架和对话框共享。
您还可以查看 Escape Key and Dialog 以查找绑定到 JRootPane
.
的 InputMap 的 Action
因此 Swing 文本组件提供了一种实现全局键盘快捷键的方法。 JTextComponent.getKeyMap(JTextComponent.DEFAULT_KEYMAP) 提供了一种方法来修改所有 Swing 文本组件继承的全局默认键映射。但是其他组件是否有全局设置键绑定的方法?
我问这个问题的原因是因为在工作中我们有一个我们正在处理的遗留 Swing 应用程序,并且有一些行为对于我们只是没有的其他应用程序来说是非常标准的。例如,按 escape 关闭对话框之类的事情。虽然我可以遍历整个代码库,找到对话框的每个实例,并添加此行为,但能够在全局范围内向组件添加键绑定会很好。
理想情况下,这种全局行为将能够应用于特定的 类(即一些应用到 JDialog,一些应用到 JFrame 等),但如果它必须是 100% 全局的,那很好。
有什么想法吗?
每个 Swing 组件都有一个 InputMap
,由所有相同类型的组件共享。对此 InputMap
的更改将影响所有组件。
例如所有 JTextAreas
共享一个 focusInputMap
。要使用 Control-A 禁用 select 所有文本的功能,您可以使用如下代码:
InputMap im = (InputMap) UIManager.get("TextArea.focusInputMap");
KeyStroke keyStroke = KeyStroke.getKeyStroke("control A");
im.put(keyStroke, "none");
您可以查看 UIManager Defaults 以了解为给定的 Swing 组件实现了哪些 InputMap。
框架和对话框没有出现在 UIManager 中,所以我不知道它们是否支持 InputMaps。您可以尝试添加 "Dialog.ancestorInputMap" 并创建您自己的绑定以查看是否可行。
否则你可以尝试使用 "RootPane.ancestorInputMap" 虽然我猜这个 InputMap 会被框架和对话框共享。
您还可以查看 Escape Key and Dialog 以查找绑定到 JRootPane
.
Action