检测JavaFx场景中的每个MouseEvent

时间:2015-10-22 14:31:37

标签: javafx mouseevent

我想检测JavaFx MouseEvent中的每个Scene,尤其是鼠标点击。我的以下解决方案适用于某些点击,但仅适用于某些控件而非每个控件。所以我的问题是,有没有办法检测MouseReleased的所有Nodes上的每个Scene事件?

scene.addEventHandler(MouseEvent.ANY, (EventHandler<MouseEvent>) event -> {
    EventTarget comp = event.getTarget();
    logger.debug("## " + (comp != null ? comp.getClass().getSimpleName() : event.getClass().getSimpleName()) + " [" + event.getEventType() + "] ## Komponente: " + event.getTarget() + " --------> Details:" + event);
});

1 个答案:

答案 0 :(得分:1)

按照@James_D的建议,我的日志记录正在运行。要捕获所有事件,必须使用EventFilter因为EventHandler缺少Event已经消耗的事件。该文件解释了差异:

  

<强> addEventFilter
  将事件过滤器注册到此场景。当场景在事件传递的捕获阶段接收到指定类型的事件时,将调用过滤器。

     

<强>的addEventHandler
  向此场景注册事件处理程序。当场景在事件传递的冒泡阶段接收到指定类型的事件时,将调用该处理程序。

一个有效的代码示例:

scene.addEventFilter(MouseEvent.MOUSE_RELEASED, (EventHandler<MouseEvent>) event -> {
    EventTarget comp = event.getTarget();
    logger.debug("## " + (comp != null ? comp.getClass().getSimpleName() : event.getClass().getSimpleName()) + " [" + event.getEventType() + "] ## Komponente: " + event.getTarget() + " --------> Details:" + event);
});