JavaFX назначает обработчик событий сцене при нажатой клавише - PullRequest
0 голосов
/ 17 апреля 2020

Когда я запускаю отладчик в Eclipse, когда я нажимаю алфавитную клавишу или командную клавишу, вызывается метод handle обработчика событий. Однако, когда я нажимаю любую клавишу со стрелкой, метод handle не вызывается. Что может быть не так?

Вот минимальный воспроизводимый пример.

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
​
public class Test extends Application {
​
    @Override
    public void start(Stage mainStage) throws Exception {
​
        VBox vbox = new VBox();

        Label welcome = new Label("Welcome to CST Man Adventures");
        Label survive = new Label("See how many rounds you can survive!");

        vbox.setAlignment(Pos.BASELINE_CENTER);
        vbox.getChildren().add(welcome);
        vbox.getChildren().add(survive);

        Button start = new Button("Start Round");

        HBox hbox = new HBox();
        hbox.getChildren().add(start);
        hbox.getChildren().add(new Label("Current round: 1"));
        vbox.getChildren().add(hbox);
​
        hbox.setTranslateY(100);
​
        Scene scene = new Scene(vbox, 700, 800);
        scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
            @Override
            public void handle(KeyEvent event) {
                if (event.getCode() == KeyCode.UP) {
                    System.out.println();
                } else if (event.getCode() == KeyCode.LEFT) {
                    System.out.println();
                } else if (event.getCode() == KeyCode.RIGHT) {
                    System.out.println();
                } else if (event.getCode() == KeyCode.DOWN) {
                    System.out.println();
                }
                event.consume();
            }
        });
​
        mainStage.setScene(scene);
        mainStage.setTitle("CST Man Adventures");
        mainStage.show();
​
    }
​
    public static void main(String[] args) {
        Application.launch(args);
    }
}
...