2016-12-13 73 views
0

我有Pane容器和這個容器的幾個子代是行。我也有事件處理程序的行:如何防止窗格監聽專用於兒童節點的鼠標事件

EventHandler<MouseEvent> lineOnMouseClicked = new EventHandler<MouseEvent>() { 

    @Override 
    public void handle(MouseEvent t) { 
     System.out.println("Line has been clicked"); 
    } 
}; 

的問題是,我還需要事件處理程序上的窗格是這樣的:

EventHandler<MouseEvent> paneOnMouseClicked = new EventHandler<MouseEvent>() { 

    @Override 
    public void handle(MouseEvent t) { 
     System.out.println("Pane Clicked"); 
    } 
}; 

我想:如果我點擊一個線,然後lineOnMouseClicked需要要調用,只有EventHandler,而不能與paneOnMouseClicked。

在我的情況下,當我點擊一行時,它們都會調用。

我已經做了一些研究,但不幸的是,沒有找到任何有用的東西。

回答

3

消費事件行:

EventHandler<MouseEvent> lineOnMouseClicked = new EventHandler<MouseEvent>() { 

    @Override 
    public void handle(MouseEvent t) { 
     System.out.println("Line has been clicked"); 
     t.consume(); // consume event -> no further propagation 
    } 
}; 


line.addEventHandler(MouseEvent.MOUSE_CLICKED, lineOnMouseClicked); 
pane.addEventHandler(MouseEvent.MOUSE_CLICKED, paneOnMouseClicked);