java - 将组合键绑定(bind)到 JFrame

标签 java swing keyboard-shortcuts action keystroke

到目前为止,我已经使用 ESC 键关闭窗口,使用以下代码:

KeyStroke escapeKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false);
    Action escapeAction = new AbstractAction() {
         public void actionPerformed(ActionEvent e) {
            screen.dispose();
         }
    };
screen.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escapeKeyStroke, "ESCAPE");
screen.getRootPane().getActionMap().put("ESCAPE", escapeAction);

但我想知道如何添加 CTRL+A 事件?我记得读过有关为按键按下/释放设置 boolean 值的方法,但我没有看到使用这段代码,所以我想知道如何实现 CTRL+A。

谢谢

最佳答案

重要的是 KeyStroke.getKeyStroke(...) 方法的第二个参数,因为您需要在那里使用 InputEvent.CTRL_DOWN_MASK 让KeyEvent.VK_A 是一个控件-A。

例如,

KeyStroke ctrlAKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_A,
     InputEvent.CTRL_DOWN_MASK);

我不会担心使用使用 boolean 值的 3 参数方法,因为您对按键更感兴趣,而不是按键按下或按键释放。

关于您的评论:

Correction to my earlier comment. It works, if I make it let's say Ctrl+W. Ctrl+A just attempts to do its native "select all" function in a textfield in the frame. Any way to avoid that?

据我所知,如果具有焦点的组件(例如 JTextArea)直接响应 ctrl-A 按键,这将是一个问题。要解决此问题,您可以向该组件添加相同的绑定(bind),但一定要将其绑定(bind)到使用 JComponent.WHEN_FOCUSED; 条件的 InputMap。

关于java - 将组合键绑定(bind)到 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10822787/

相关文章:

java - 将具有 IntelliJ 依赖项的 java maven 项目导出为非 maven 项目

java - Hibernate:插入ManyToMany,在关系表中生成ID

java - 类名 ("oracle.jdbc.driver.OracleDriver");抛出 NullPointerException

java - 当剪贴板内容在java之外发生变化时是否可以得到通知

java - 如何正确加载背景图片?

Matlab 编辑器不使用 emacs 快捷方式

java - 从文件读取到数组时未找到行错误

java - .java 使用未经检查且不安全的操作

keyboard-shortcuts - 在 PyCharm 中使用 Sublime Text 2 键绑定(bind)

intellij-idea - 我可以使用 j 和 k 在 IntelliJ 中导航搜索结果吗?