我们可以使用KeyListener实现KeyBindings吗?

时间:2013-09-04 20:15:55

标签: java swing keylistener key-bindings

仅仅是感兴趣的问题,KeyListener是否可以执行与KeyBindings相同的工作,我的意思是重写 keyListener的方法并听取多个键( CTRL + somekey )。

我知道,这有点愚蠢的想法,但正如我所说,只是一个有趣的问题。

3 个答案:

答案 0 :(得分: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在评论中指出的那样,另一种方法是使用isControlDown中的KeyEvent方法:

if(e.isControlDown()) {
    //CTRL is pressed
}

答案 1 :(得分:3)

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

if(e.getKeyCode() == KeyEvent.VK_A && e.isControlDown())
{
    // do something
}

答案 2 :(得分:2)

另一种方法是你可以这样做 Ctrl 然后 A

public void keyPressed(KeyEvent e)
{
     if(e.getKeyCode() == KeyStroke.getKeyStroke(KeyEvent.VK_A,  InputEvent.CTRL_DOWN_MASK).getKeyCode())
           //Code Here
     }
}