使用 JavaFX 随时随地处理鼠标事件

2022-09-01 11:42:31

我有一个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();
}

如果我单击空白空间中的任意位置,则 调用该方法,但是如果我单击 ,则不会调用该方法。我的应用程序中有许多按钮和其他交互式元素,因此我需要一种方法来捕获对这些元素的单击,而不必为每个元素手动添加新的处理程序。EventHandlerhandle()buttonhandle()


答案 1

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

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

答案 2

推荐