1

我已经阅读并理解了 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) {}
4

2 回答 2

1

不幸的是,没有办法直接控制硬件(嗯,事实上有但你必须使用 JNI/JNA),这意味着你不能简单地检查是否按下了某个键。

您可以使用KeyBindings将空格键绑定到操作,按下空格键时将标志设置为true,释放时将标志设置为false。为了使用此解决方案,您的应用程序必须是 GUI 应用程序,这不适用于控制台应用程序。

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);

然后,使用

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
}

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

Action pressedAction = new AbstractAction() {
    public void actionPerformed(ActionEvent e) {
        try {
            robot.mousePress(InputEvent.BUTTON1_MASK);
            robot.mouseRelease(InputEvent.BUTTON1_MASK);
        } catch (InterruptedException ex) {
            //handle the exception here
        }
    }
};
于 2013-08-07T14:16:43.597 回答
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) {
                 }

     }

}
于 2013-08-07T14:21:30.283 回答