我想检测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);
});
答案 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);
});