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

Posted

技术标签:

【中文标题】使用 JavaFX 在任何地方处理鼠标事件【英文标题】:Handle mouse event anywhere with JavaFX 【发布时间】:2013-09-07 00:31:37 【问题描述】:

我有一个 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】:

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

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

【讨论】:

以上是关于使用 JavaFX 在任何地方处理鼠标事件的主要内容,如果未能解决你的问题,请参考以下文章

JavaFX LineChart 悬停值

JavaFX实战:几种事件监听实现,键盘按键事件监听,鼠标滚轮事件监听,鼠标按键事件监听,鼠标移动事件监听

JavaFX实战:几种事件监听实现,键盘按键事件监听,鼠标滚轮事件监听,鼠标按键事件监听,鼠标移动事件监听

JavaFX实战:几种事件监听实现,键盘按键事件监听,鼠标滚轮事件监听,鼠标按键事件监听,鼠标移动事件监听

JavaFX:鼠标事件

如何在 JavaFX 中的 SplitPane Divider 上检测鼠标拖动事件