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