2013-06-27 66 views
3

我有這個代碼在遠程Java類中創建新選項卡。如何在雙擊樹節點時觸發事件

treeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TreeItem<String>>() 
     { 
      @Override 
      public void changed(ObservableValue<? extends TreeItem<String>> observable, TreeItem<String> oldValue, TreeItem<String> newValue) 
      { 
       System.out.println("Selected Text : " + newValue.getValue()); 
       // Create New Tab 
       Tab tabdata = new Tab(); 
       Label tabALabel = new Label("Test"); 
       tabdata.setGraphic(tabALabel); 

       DataStage.addNewTab(tabdata); 
      } 
     }); 

你能告訴我如何修改代碼,當我雙擊樹節點時打開新的選項卡。在我的代碼中,當我單擊一次時,該選項卡將打開。我需要什麼事件處理程序?

回答

7

您可以將EventHandler<MouseEvent>添加到TreeView.setOnMouseClicked()方法中,並檢查MouseEventgetClickCount()返回值以確定它是否是雙擊。刪除上面的ChangeListener並將邏輯添加到EventHandler

Use the description here and apply it to your treeView variable.

它會是這個樣子。您可能還想檢查項目是否爲null

treeView.setOnMouseClicked(new EventHandler<MouseEvent>() 
{ 
    @Override 
    public void handle(MouseEvent mouseEvent) 
    {    
     if(mouseEvent.getClickCount() == 2) 
     { 
      TreeItem<String> item = treeView.getSelectionModel().getSelectedItem(); 
      System.out.println("Selected Text : " + item.getValue()); 

      // Create New Tab 
      Tab tabdata = new Tab(); 
      Label tabALabel = new Label("Test"); 
      tabdata.setGraphic(tabALabel); 

      DataStage.addNewTab(tabdata); 
     } 
    } 
}); 
+0

您能否告訴我一些實現代碼?我是JavaFX的新手,這對我來說是先進的。 –

+0

如果他們用另一種方法(如鍵盤)來擴展節點會怎麼樣?我想我們必須綁定多個事件到相同的處理程序= /。似乎應該有一個這樣的事情單處理程序。 (onNodeActivated或其他) – crush

+0

@crush這個答案是特定於雙擊動作。如果您想觸發任何展開/摺疊事件,那麼您需要查看'TreeItem .expandedProperty()'。你可以添加一個'ChangeListener'(也許通過一個'TreeCell <>'工廠)並在那裏添加你的功能。在這裏檢查答案:[如何獲取當前TreeItem引用,由用戶在JavaFx 2中單擊進行擴展?](http://stackoverflow.com/a/14241151/1625196) – OttPrime