java - Swing:全局键盘快捷键

标签 java swing key-events jtextcomponent

Swing 文本组件提供了一种拥有全局键盘快捷键的方法。 JTextComponent.getKeyMap(JTextComponent.DEFAULT_KEYMAP) 提供了一种修改所有 Swing 文本组件继承的全局默认键盘映射的方法。但是其他组件有办法全局设置键绑定(bind)吗?

我问这个问题的原因是因为在工作中我们正在开发一个遗留的 Swing 应用程序,并且有些行为对于其他应用程序来说是相当标准的,但我们只是没有。例如,按 Esc 键关闭对话框之类的事情。虽然我可以浏览整个代码库,找到对话框的每个实例,并添加此行为,但如果能够向组件全局添加键绑定(bind),那就太好了。

理想情况下,这种全局行为能够应用于特定的类(即,一些应用于 JDialog,一些应用于 JFrame 等),但如果它必须是 100% 全局的,那就没问题了。

有什么想法吗?

最佳答案

每个 Swing 组件都有一个由同一类型的所有组件共享的 InputMap。对此 InputMap 的更改将影响所有组件。

例如,所有JTextAreas共享一个focusInputMap。要禁用使用 Control-A 选择所有文本的功能,您可以使用如下代码:

InputMap im = (InputMap) UIManager.get("TextArea.focusInputMap");
KeyStroke keyStroke = KeyStroke.getKeyStroke("control A");
im.put(keyStroke, "none"); 

您可以查看UIManager Defaults查看为给定 Swing 组件实现了哪些 InputMap。

框架和对话框没有出现在 UIManager 中,所以我不知道它们是否支持输入映射。您可以尝试添加“Dialog.ancestorInputMap”并创建自己的绑定(bind)以查看是否有效。

否则,您可以尝试使用“RootPane.ancestorInputMap”,尽管我猜测此InputMap将由框架和对话框共享。

您还可以查看Escape Key and Dialog对于绑定(bind)到 JRootPane 的 InputMap 的 Action

关于java - Swing:全局键盘快捷键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36038120/

相关文章:

java - 包含并迭代页面中类似的 HtmlElements block

java - Apache 茧2.2 : Return paramater from action and use it in HTML page to fill table

java - 为什么通过Javascript访问DOM文档比Java更快?

java - 加载数据、数据到数组、数组到JList

java - 如何在 Java 7 中使用 FRACTIONALMETRICS 呈现文本

java - Java中的KeyEventListener同时识别UP和Delete键

java - 枚举和开关帮助。 Java学习者

java - Eclipse:禁用自动完成但继续显示建议

javascript - 按下键码不返回预期的字符串值

android - 通过 Android API 发送组合键(元键和键码)