使用JavaFX在任何地方处理鼠标事件

我有一个JavaFX应用程序,我想在场景中的任何地方添加一个鼠标单击的事件处理程序。 以下方法可以正常工作,但不完全符合我的要求。 这是一个说明问题的示例:

public void start(Stage primaryStage) { root = new AnchorPane(); scene = new Scene(root,500,200); scene.setOnMousePressed(new EventHandler() { @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()方法。 我的应用程序中有许多按钮和其他交互元素,因此我需要一种方法来捕获这些元素的点击,而无需为每个元素手动添加新的处理程序。

您可以使用addEventFilter()向场景添加事件filter。 这将在任何子控件使用事件之前调用。 以下是事件filter的代码。

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