将键组合绑定到JFrame

时间:2012-05-30 19:15:43

标签: 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事件?我记得读过有关为keypressed / release设置布尔值的方法,但我没有看到使用这段代码,所以我想知道如何实现CTRL + A.

谢谢

1 个答案:

答案 0 :(得分:5)

这是KeyStroke.getKeyStroke(...)方法的第二个参数,因为你需要使用InputEvent.CTRL_DOWN_MASK来让KeyEvent.VK_A成为一个控件-A。

如,

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

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

关于你的评论:

  

更正我之前的评论。它有效,如果我做它让我们说Ctrl + W. Ctrl + A只是尝试在框架的文本字段中执行其原生“全选”功能。有什么办法可以避免吗?

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