Java 我们可以使用KeyListener实现键绑定吗?

Java 我们可以使用KeyListener实现键绑定吗?,java,swing,keylistener,key-bindings,Java,Swing,Keylistener,Key Bindings,有趣的是,有没有一种方法可以让keylister完成与KeyBindings相同的工作,我的意思是覆盖keylister的方法并监听多个键(CTRL+somekey) 我知道,这是一个很愚蠢的想法,但正如我所说,这只是一个有趣的问题。你可以通过使用旗帜来实现: KeyListener kl = new KeyListener() { boolean controlPressed = false; @Override public void keyTyped(KeyEve

有趣的是,有没有一种方法可以让
keylister
完成与
KeyBindings
相同的工作,我的意思是覆盖keylister的方法并监听多个键(CTRL+somekey)


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

你可以通过使用旗帜来实现:

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
}

您可以通过使用标志来执行此操作:

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在评论中指出的,另一种方法是使用
KeyEvent
中的
isControlDown
方法:

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

另一种选择是,您可以这样做,即按住Ctrl键,同时


另一种选择是,您可以这样做,即按住Ctrl键,同时


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

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

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

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

如果按下了
CTRL
,之后该怎么办?如何收听另一个键?
KeyListener
收听键盘上的所有键,因此您只需使用
KeyEvent
中提供的键代码检查按下了哪个键。我用一个例子更新了答案,不知道为什么要使用标志。KeyEvent包含有关Alt键、Control键和Shift键的信息。如果按下了
CTRL
,之后该怎么办?如何收听另一个键?
KeyListener
收听键盘上的所有键,因此您只需使用
KeyEvent
中提供的键代码检查按下了哪个键。我用一个例子更新了答案,不知道为什么要使用标志。KeyEvent包含有关Alt、Control和Shift键的信息。