Как программно имитировать нажатия клавиш со стрелками в Java FX

#java #javafx #keypress

#java #javafx #нажатие клавиши

Вопрос:

Я хочу, чтобы мое приложение JFX имитировало нажатия клавиш со стрелками (когда они зарегистрированы в текстовом поле), но я не могу понять, как отправлять что-либо, кроме строк или байтов.

Я представляю себе что-то вроде этого:

 static EventHandler<KeyEvent> KEY() {
    E = new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent ke) {
            if (ke.getCode().equals(KeyCode.UP)) {
                try {
                    //someObject.SimulateKeyPress(KeyCode.UP);

                    //OR

                    //coolObject.SendKey((char)KEY_UPKEY));
                } catch (Exception ex) {
                    //Teleport goats
                }
            }
        }
    };

    return E;
}
  

Ответ №1:

Используйте класс Robot

  try {
    Robot r = new Robot();
    //there are other methods such as positioning mouse and mouseclicks etc.
    r.keyPress(java.awt.event.KeyEvent.VK_UP);
    r.keyRelease(java.awt.event.KeyEvent.VK_UP);
 } catch (AWTException e) {
    //Teleport penguins  
 }
  

Комментарии:

1. Это имитирует нажатия клавиш во всех приложениях, ориентированных на текущий момент, не обязательно связанных с javafx или процессом jvm вообще.

Ответ №2:

Вы не можете создать экземпляр типа Robot . Вам лучше сделать :

   Robot robot = com.sun.glass.ui.Application.GetApplication().createRobot();
  

Комментарии:

1. Также имейте в виду, что начиная с Java 9, com.sun API могут быть недоступны для прикладных программистов, использующих JDK.

2. Я не знаю, откуда вы это взяли, но вы можете абсолютно точно создать экземпляр Robot : docs.oracle.com/javase/8/docs/api/java/awt/Robot.html#Robot —

3. Лев имеет в виду другого робота Майкла. Возможно, робот awt является альтернативой стеклянному роботу в данном случае Lion (я недостаточно знаю о роботах, чтобы сказать наверняка).

4. Как «они» могут решить удалить доступ к FXRobot без предоставления альтернативы ?!?!?!? Я не понимаю этого ВОПИЮЩЕГО пренебрежения?