Handle mouse event anywhere with JavaFX
You can add an event filter to the scene with addEventFilter(). This will be called before the event is consumed by any child controls. Here's what the code for the event filter looks like.
scene.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
System.out.println("mouse click detected! " + mouseEvent.getSource());
}
});
Sam De Meyer
Updated on August 08, 2020Comments
-
Sam De Meyer almost 4 years
I have a JavaFX application, and I would like to add an event handler for a mouse click anywhere within the scene. The following approach works ok, but not exactly in the way I want to. Here is a sample to illustrate the problem:
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(); }
If I click anywhere in empty space, the
EventHandler
invokes thehandle()
method, but if i click thebutton
, thehandle()
method is not invoked. There are many buttons and other interactive elements in my application, so I need an approach to catch clicks on those elements as well without having to manually add a new handler for every single element.