到目前为止,我已经使用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.
谢谢
答案 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。