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

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

最佳答案

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

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

关于java - 使用 JavaFX 在任何地方处理鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18597939/

相关文章:

java - NumberAxis 标签名称(不是刻度标签)大小和字体

jquery - jquery keyup 上的多个类

ios - 检测ios中的调用事件

c++ - 使用函数 <void (boost::any)> 的事件系统是个好主意?

java - 使用 ActiveAndroid 的带有 DATE 变量的 Where 子句

java - Mockito:验证(模拟)问题

Javafx 将参数和值从一个 Controller 传递到另一个 Controller

javafx - FXML 文档命名约定

java - ClassNotFoundException : javax. wsdl.extensions.ExtensibilityElement 错误

JavaFx:如何在 FXML 中设置标签的 labelFor 属性?