1

只是感兴趣的问题,有没有一种方法KeyListener可以做同样的工作KeyBindings,我的意思是覆盖keyListener 的方法并监听多个键(CTRL+ somekey)。

我知道,这有点愚蠢,但正如我所说,只是兴趣问题。

4

3 回答 3

3

您可以通过使用标志来做到这一点:

KeyListener kl = new KeyListener() {

    boolean controlPressed = false;
    @Override
    public void keyTyped(KeyEvent e) {
    }

    @Override
    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_CONTROL) {
            controlPressed = true;
            return;
        }

        if(controlPressed) {
            // CTRL is pressed, you can check here for other keys:
            if(e.getKeyCode() == KeyEvent.VK_A) {
                //CTRL + A was pressed
            }
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_CONTROL) {
            controlPressed = false;
        }
    }
};

正如 camickr 在评论中指出的那样,另一种方法是使用isControlDownfrom 的方法KeyEvent

if(e.isControlDown()) {
    //CTRL is pressed
}
于 2013-09-04T20:18:25.160 回答
3

KeyEvent 包含 Alt、Shift 和 Control 键所需的信息:

if(e.getKeyCode() == KeyEvent.VK_A && e.isControlDown())
{
    // do something
}
于 2013-09-04T20:44:28.577 回答
2

另一种选择是你可以这样CtrlA

public void keyPressed(KeyEvent e)
{
     if(e.getKeyCode() == KeyStroke.getKeyStroke(KeyEvent.VK_A,  InputEvent.CTRL_DOWN_MASK).getKeyCode())
           //Code Here
     }
}
于 2013-09-04T20:36:53.763 回答