К сожалению, нет способа напрямую управлять оборудованием (ну, на самом деле есть, но вам придется использовать JNI/JNA), это означает, что вы не можете просто проверить, является ли ключ нажимается.
Вы можете использовать KeyBindings для привязки клавиши пробела к действию, когда пробел нажат, вы устанавливаете флаг на true
, когда он отпущен, вы устанавливаете этот флаг на 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);
Затем используйте
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
}
}
};
person
BackSlash
schedule
07.08.2013