Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Handle mouse event anywhere with JavaFX

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 the handle() method, but if i click the button, the handle() 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.

like image 227
Sam De Meyer Avatar asked Sep 03 '13 17:09

Sam De Meyer


People also ask

What is ActionEvent JavaFX?

public class ActionEvent extends Event. An Event representing some type of action. This event type is widely used to represent a variety of things, such as when a Button has been fired, when a KeyFrame has finished, and other such usages.

What event consumes JavaFX?

Consuming of an EventAn event can be consumed by an event filter or an event handler at any point in the event dispatch chain by calling the consume() method.


1 Answers

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());     } }); 
like image 116
Brian Blonski Avatar answered Sep 30 '22 03:09

Brian Blonski