2013-10-21 54 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