尝试触发按下的 CTRL 键时键码无效

Invalid key code when trying to fire a CTRL key pressed

我试图按下 CTRL+O 键,但我在 keyPress方法。我不知道为什么,我们不能使用 keyPressed 方法触发 CTRL 按下的键吗?

这是我的代码:

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;



public class MainTest extends JFrame{


    public static void main(String[] args) throws AWTException {

        Robot r= new Robot();
        r.keyPress(KeyEvent.CTRL_MASK);
        r.keyPress(KeyEvent.VK_O);
        MainTest mainF =new  MainTest();
        mainF.addKeyListener(new KeyListener() {

            @Override
            public void keyTyped(KeyEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void keyReleased(KeyEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void keyPressed(KeyEvent e) {
                // TODO Auto-generated method stub
                if ((e.getKeyCode() == KeyEvent.VK_O) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
                    System.out.println("woot!");
                }
            }
        });

    }
}

只需在第一个 keyPress 中使用 KeyEvent.VK_CONTROL 而不是 KeyEvent.CTRL_MASK,这实际上会按下 Control 键。

r.keyPress(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_O);

您可以只使用 InputEvent isControlDown() method

isControlDown

public boolean isControlDown()

Returns whether or not the Control modifier is down on this event.

您的代码将如下所示:

@Override
public void keyPressed(KeyEvent e) {
     // TODO Auto-generated method stub
     if ((e.isControlDown()) {
                System.out.println("woot!");
     }
}

您可以查看 this tutorial 了解更多详情。