Gérer l'événement de la souris n'importe où avec JavaFX

j'ai une application JavaFX, et j'aimerais ajouter un gestionnaire d'événements pour un clic de souris n'importe où dans la scène. L'approche suivante fonctionne ok, mais pas exactement comme je veux. Voici un exemple pour illustrer le problème:

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();
}

Si je clique n'importe où dans l'espace vide, l' EventHandler appelle handle() méthode, mais si je clique sur le button, le handle() méthode n'est pas appelée. Il y a beaucoup de boutons et d'autres éléments interactifs dans mon application, j'ai donc besoin d'un approche pour attraper les clics sur ces éléments aussi bien sans avoir à ajouter manuellement un nouveau gestionnaire pour chaque élément.

23
demandé sur SpaceCore186 2013-09-03 21:15:47

1 réponses

Vous pouvez ajouter un filtre d'événement de la scène avec addEventFilter (). Ceci sera appelé avant que l'événement ne soit consommé par les contrôles enfants. Voici à quoi ressemble le code du filtre d'événement.

scene.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {
    @Override
    public void handle(MouseEvent mouseEvent) {
        System.out.println("mouse click detected! " + mouseEvent.getSource());
    }
});
40
répondu Brian Blonski 2015-04-01 21:57:33