3

到目前为止,我有 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 事件?我记得阅读过一种为按键/释放设置布尔值的方法,但我没有看到使用这段代码,所以我想知道如何实现 CTRL+A。

谢谢你

4

1 回答 1

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。

于 2012-05-30T19:18:20.963 回答