我有一个JavaFX应用程序,我想添加一个事件处理程序,用于在场景中的任何位置单击鼠标。下面的方法还可以,但不是完全按照我想要的方式
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();
}
如果我单击空白中的任何位置,EventHandler
将调用handle()
方法,但如果我单击button
,则不会调用handle()
方法。我的应用程序中有许多按钮和其他交互式元素,因此我需要一种方法来捕捉这些元素上的点击,而不必为每个元素手动添加新的处理程序。
您可以使用addEventFilter()将事件过滤器添加到场景中。这将在任何子控件使用事件之前调用。以下是事件过滤器的代码。
scene.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
System.out.println("mouse click detected! " + mouseEvent.getSource());
}
});