2014-11-01 67 views
2

我在我的ScalaFX應用程序中有以下問題。我在VBox中有一個標籤。兩者都分配有onMouseClicked偵聽器,如我的示例代碼所示。當點擊內部標籤時,這兩個處理程序都會執行。這不是我想強迫的行爲。我只想標籤偵聽器被執行。覆蓋元素鼠標偵聽器ScalaFx/JavaFx執行

例碼

new VBox{ 
    content add new Label { 
    text = "inside label" 
    onMouseClicked = (me : MouseEvent) => println("Execute just me!") 
    } 
    onMouseClicked = (me : MouseEvent) => println("Do not execute when label is clicked!") 
} 

有一種簡單的方法來阻止從點擊標籤時正在執行的垂直框處理?

回答

3

您需要使用該事件。下面的代碼工作中的JavaFX:

class TestPane extends Pane { 

    private Label label; 
    private VBox vbox; 

    public TestPane() { 
     label = new Label(); 
     label.setText("Waiting..."); 
     vbox = new VBox(); 
     vbox.getChildren().add(label); 
     getChildren().add(vbox); 
     label.setOnMouseClicked(new EventHandler<Event>() { 
      @Override 
      public void handle(Event event) { 
       System.out.println("label event"); 
       event.consume(); 
      } 
     }); 
     vbox.setOnMouseClicked(new EventHandler<Event>() { 
      @Override 
      public void handle(Event event) { 
       System.out.println("vbox event"); 
      } 
     }); 
    } 
} 

事件處理鏈是明確界定:

enter image description here

有一個關於如何處理事件的調度和處理這個網頁上的更多信息:Oracle Tutorial: Handling JavaFX Events

+0

這是一個很好的概述,並支持我對鼠標點擊觸發的理解。消費正常,我正在尋找。謝謝! – smoes 2014-11-02 18:42:29