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