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

时间:2013-09-03 17:15:47

标签: java event-handling javafx mouseevent

我有一个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()方法。我的应用程序中有许多按钮和其他交互元素,因此我需要一种方法来捕获这些元素的点击,而无需为每个元素手动添加新的处理程序。

1 个答案:

答案 0 :(得分:47)

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

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