2013-10-21 85 views
2

我这有部分场景图树:了JavaFx,事件拦截/消费

CustomPane (with onMouseClicked Handler) 
→ ChildNode (with onMousePressed Handler) 

当我赶在ChildNode的事件的mousePressed,我可以使用它,从而使父母不接收到mousePressed事件。 但我想消耗相关的MouseClicked事件。因此,在鼠标上按下鼠标不会触发父级上的MouseClicked事件。

+0

为什么你就不能消耗以同样的方式,你正在消耗事件的mousePressed中的mouseClicked事件? – jewelsea

+0

我最终发现了这一点,但它只能以这种方式工作。如果你想忽略新闻事件,只有当它导致点击时,这个解决方案停止工作(如果你处理滚动事件,用例更清晰,但当你处理滑动事件时忽略这些)。 Sergey Grivev的答案提供了处理这些问题的通用方法。 – QuidNovi

回答

4
  1. 您可以添加将消耗所有事件的特定ChildNode#onMouse...处理程序。

  2. 或提供自己的EventDispatcher

    child.setEventDispatcher(new EventDispatcher() { 
    
        @Override 
        public Event dispatchEvent(Event event, EventDispatchChain tail) { 
         boolean valid = myValidationLogicForEvents(event); 
         return valid ? tail.dispatchEvent(event) : null; 
        } 
    }); 
    
+0

答案中的EventDispatcher部分提供了我需要的所有灵活性,thanx。 – QuidNovi