2014-05-12 57 views
0

用例:我試圖提供一種功能,用戶將元素組合到一個最終解決方案中。元素將有版本。爲此,我需要結合CheckBox來定義要包含的元素,然後單選按鈕(嵌套在每個複選框下)來定義選定元素應使用的版本。JavaFX:用單選按鈕製作樹形視圖

我目前正在使用ControlsFX的CheckTreeView控件。但我找不到一種方法將RadioButtonMenuItems作爲子樹中的CheckBoxTreeItem放入樹中。有沒有辦法改變CheckBoxTreeItem看起來像一個RadioButton?

我目前的解決方案是我爲所有樹節點使用CheckBoxItems,但那些用於定義版本行爲的單選按鈕 - 選擇其中一個將取消選擇其餘部分。

關於如何解決這個問題的任何想法?

編輯:發佈新問題+代碼在這裏here

回答

1

對於你需要創建自己的定製TreeCellFactory需要的是會顯示一個複選框或單選按鈕起動。例如:

public class TreeCellFactory implements Callback<TreeView<Object>,TreeCell<Object>> 
{ 
    @Override 
    public TreeCell call(TreeView param) 
    { 
     return new TreeCell<Object>() 
     { 
      private final CheckBox check = new CheckBox(); 
      private final RadioButton radio = new RadioButton(); 
      private Property<Boolean> prevRadioProp; 
      { 
       setContentDisplay(ContentDisplay.GRAPHIC_ONLY); 
      } 

      @Override 
      public void updateItem(Object item, boolean empty) 
      { 
       if (prevRadioProp != null) 
       { 
        radio.selectedProperty().unbindBidirectional(prevRadioProp); 
        prevRadioProp = null; 
       } 
       check.selectedProperty().unbind(); 

       if (! empty && item != null) 
       { 
        Property<Boolean> selectedProp = ....; 

        if (getTreeItem().isLeaf()) // display radio button 
        { 
         radio.setText(...); 
         radio.selectedProperty().bindBidirectional(selectedProp); 
         prevRadioProp = selectedProp; 
         setGraphic(radio); 
        } 
        else       // display checkbox 
        { 
         check.setText(...); 
         check.selectedProperty().bind(selectedProp); 
         setGraphic(check); 
        } 
       } 
       else 
       { 
        setGraphic(null); 
        setText(null); 
       } 
      } 
     }; 
    } 
} 
+0

謝謝,我會給它一個鏡頭。 – melkhaldi