将键组合绑定到JFrame

Met*_*ing 3 java swing action keyboard-shortcuts 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);
Run Code Online (Sandbox Code Playgroud)

但我想知道如何添加CTRL + A事件?我记得读过你为keypressed/release设置布尔值的方法,但是我没有看到使用这段代码,所以我想知道如何实现CTRL + A.

谢谢

Hov*_*els 5

这是该KeyStroke.getKeyStroke(...)方法的第二个参数,因为您需要使用其中InputEvent.CTRL_DOWN_MASK的KeyEvent.VK_A作为控件-A.

例如,

KeyStroke ctrlAKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_A,
     InputEvent.CTRL_DOWN_MASK);
Run Code Online (Sandbox Code Playgroud)

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

关于你的评论:

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

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