机器人类 - 如果按下按钮?

时间:2013-08-07 14:11:51

标签: java mousepress

我已经阅读并理解了java中的Robot类是如何工作的。我唯一想问的是,如何在if语句中按下并释放鼠标按钮。例如,我只会在按下/释放空格按钮时(及之后)进行单击。我会使用代码:

try {
  Robot robot = new Robot();
  if (/*insert my statement here*/) {
    try {
      robot.mousePress(InputEvent.BUTTON1_MASK);
      robot.mouseRelease(InputEvent.BUTTON1_MASK);
    } catch (InterruptedException ex) {}
  }
} catch (AWTException e) {}

2 个答案:

答案 0 :(得分:1)

不幸的是,没有直接控制硬件的方法(好吧,实际上,但你必须使用JNI / JNA),这意味着你可以'只需检查是否按下了某个键。

您可以使用KeyBindings将空格键绑定到某个操作,当按下空格键时,您将标记设置为true,当它被释放时,您将该标记设置为{{ 1}}。为了使用此解决方案,您的应用程序必须是一个GUI应用程序,这不会适用于控制台应用程序。

false

然后,使用

Action pressedAction = new AbstractAction() {
    public void actionPerformed(ActionEvent e) {
        spaceBarPressed = true;
    }
};

Action releasedAction = new AbstractAction() {
    public void actionPerformed(ActionEvent e) {
        spaceBarPressed = false;
    }
};

oneOfYourComponents.getInputMap().put(KeyStroke.getKeyStroke("SPACE"), "pressed");
oneOfYourComponents.getInputMap().put(KeyStroke.getKeyStroke("released SPACE"), "released");
oneOfYourComponents.getActionMap().put("pressed", pressedAction);
oneOfYourComponents.getActionMap().put("released", releasedAction);

正如GGrec所写,更好的方法是在键盘事件被触发时直接执行鼠标按下:

try {
    Robot robot = new Robot();
    if (spaceBarPressed) {
        try {
            robot.mousePress(InputEvent.BUTTON1_MASK);
            robot.mouseRelease(InputEvent.BUTTON1_MASK);
        } catch (InterruptedException ex) {
            //handle the exception here
        }
    }
} catch (AWTException e) {
    //handle the exception here
}

答案 1 :(得分:1)

我的建议是,您要监听键盘事件,当您收到键盘事件时,不使用if statement执行代码。将侦听器添加到画布或其他任何内容。

小心不要每次都重新创建Robot课程。

new KeyAdapter() {

     @Override
     public void keyReleased(final KeyEvent e) {

           if (e.keyCode == KeyEvent.VK_SPACE)
                 try {
                     robot.mousePress(InputEvent.BUTTON1_MASK);
                     robot.mouseRelease(InputEvent.BUTTON1_MASK);
                 } catch (InterruptedException ex) {
                 }

     }

}