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

时间:2017-05-22 15:51:12

标签: java keyevent

我正在尝试触发 CTRL + O 按键,但我在Invalid key code方法中得到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!");
                }
            }
        });

    }
}

2 个答案:

答案 0 :(得分:3)

对于第一个KeyEvent.VK_CONTROL,只需使用KeyEvent.CTRL_MASK代替keyPress,这实际上会点击 Control 键。

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

答案 1 :(得分:1)

您可以使用InputEvent isControlDown() method

  

<强> isControlDown

     

public boolean isControlDown()

     

返回Control修饰符是否在此事件中失效。

您的代码如下所示:

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

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