Ответы пользователя по тегу JavaFX
  • Как сделать обработку событий клавиатуры?

    DeadTime
    @DeadTime Автор вопроса
    Проблема решена. Я использовал библиотеку awt KeyListener, но не реализовал для него 3 метода keyPressed, keyReleased, keyTyped. Поэтому я использовал библиотеку javafx.scene.input.KeyEvent.
    Для того, что бы слушать нажатие клавиши пробел в JavaFX я использовал след.код:
    import javafx.application.Application;
    import javafx.event.EventHandler;
    import javafx.scene.Scene;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Stage;
    import javafx.scene.input.KeyEvent;
    
    import java.awt.Robot;
    import java.awt.event.InputEvent;
    
    
    public class Main extends Application {
        Stage window;
        Robot robot;
        Scene scene;
    
        public static void main(String[] args) {
            launch(args);
        }
    
        @Override
        public void start(Stage primaryStage) throws Exception {
            window = primaryStage;
            window.setTitle("Кликер");
    
            StackPane layout = new StackPane();
            robot = new Robot();
    
            scene = new Scene(layout, 200, 100);
            window.setScene(scene);
            window.show();
    
            scene.setOnKeyTyped(new EventHandler<KeyEvent>() {
                public void handle(KeyEvent ke) {
                    if (ke.getCharacter().equals(" "))
                        for (int i = 0; i < 3; i++) {
                            robot.mousePress(InputEvent.BUTTON1_MASK);
                            robot.delay(300);
                            robot.mouseRelease(InputEvent.BUTTON1_MASK);
                            robot.delay(300);
                        }
                }
            });
    
        }
    }

    Вы не сможете ловить таким образом action кнопки (такие как Ctrl, Shift, функциональные кнопки и т.д.). Но setOnKeyPressed и setOnKeyReleased поймает их тоже. Так что, свободно заменяйте эту строку
    scene.setOnKeyTyped(new EventHandler<KeyEvent>() {
    На эту
    scene.setOnKeyPressed(new EventHandler<KeyEvent>() {

    Или эту
    scene.setOnKeyReleased(new EventHandler<KeyEvent>() {

    А проверку на нажатие допустим кнопки F12 заменить такой строкой
    if (ke.getCode().getName().equals("F12"))
    Ответ написан
    Комментировать