Подтвердить что ты не робот

Управление событием мыши в любом месте с помощью JavaFX

У меня есть приложение JavaFX, и я хотел бы добавить обработчик события для щелчка мыши в любом месте сцены. Следующий подход работает нормально, но не совсем так, как я хочу. Вот пример, иллюстрирующий проблему:

public void start(Stage primaryStage) {
    root = new AnchorPane();
    scene = new Scene(root,500,200);
    scene.setOnMousePressed(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            System.out.println("mouse click detected! "+event.getSource());
        }
    });

    Button button = new Button("click here");
    root.getChildren().add(button);

    primaryStage.setScene(scene);
    primaryStage.show();
}

Если я щелкнул в любом месте пустого пространства, EventHandler вызывает метод handle(), но если я нажму на button, метод handle() не будет вызван. В моем приложении много кнопок и других интерактивных элементов, поэтому мне нужен подход, чтобы ловить клики по этим элементам, без необходимости вручную добавлять новый обработчик для каждого отдельного элемента.

4b9b3361

Ответ 1

Вы можете добавить фильтр событий в сцену с помощью addEventFilter(). Это будет вызвано до того, как событие будет потреблено любыми дочерними элементами управления. Вот как выглядит код для фильтра событий.

scene.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {
    @Override
    public void handle(MouseEvent mouseEvent) {
        System.out.println("mouse click detected! " + mouseEvent.getSource());
    }
});