2013-07-10 126 views
2

每當我實例化一個CheckBoxTreeView,它需要一個TreeItem與沒有所選的孩子TreeItems是未選中。我該如何改變它?我試圖在父TreeItem上調用setIndependent(true),但它仍然必須至少有一個檢查過的子TreeItem被檢查。JavaFX選擇一個項目CheckBoxTreeView而不選擇子項?

我試圖用複選框作爲圖形做一個自定義TreeCell,但無法弄清楚如何保持項目不重置。這個問題貼在這裏:https://stackoverflow.com/questions/17606280/javafx-2-checkbox-in-treecell-keeps-resetting-cant-bind-it

回答

1

我認爲你的問題是,當你展開或恢復樹的一部分,TreeView創建全新的CustomCheckBoxCell,它們在默認情況下是未選定的。您可以跟蹤數組中的CustomCheckBoxCell,並在需要時將它們提供給TreeView。我無法解決它。

但是我聽起來有點明顯,你可能已經嘗試過了,但爲什麼不使用TreeItem<CheckBox>對象並將它們添加到你的TreeView?

我試圖在下面的代碼重現您的問題,告訴我,如果我得到它的權利。

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.CheckBox; 
import javafx.scene.control.CheckBoxTreeItem; 
import javafx.scene.control.TreeItem; 
import javafx.scene.control.TreeView; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 


public class CheckBoxTreeView extends Application{ 

    @Override 
    public void start(Stage primaryStage) throws Exception { 

     CheckBoxTreeItem<CheckBox> rootItem = 
       new CheckBoxTreeItem<CheckBox>(new CheckBox("root")); 
     rootItem.setExpanded(true);     

     final TreeView<CheckBox> tree = new TreeView<CheckBox>(rootItem); 
     tree.setEditable(true); 

     for (int i = 0; i < 8; i++) { 

      System.out.println("new tree Item"); 
      final TreeItem<CheckBox> checkBoxTreeItem = 
        new TreeItem<CheckBox>(new CheckBox(GeoObj.toString())); 
      rootItem.getChildren().add(checkBoxTreeItem);     
     } 

     tree.setRoot(rootItem); 
     System.out.println("root item set"); 
     tree.setShowRoot(true); 

     StackPane root = new StackPane(); 
     root.getChildren().add(tree); 
     primaryStage.setScene(new Scene(root, 300, 250)); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 

} 

你的類型的第一個字母必須根據好的原則是大寫...... 然後geoObj - > GeoObj customCheckBoxCell-> CustomCheckBoxCell

+0

謝謝!我做了類似的事情,我仍然使用TreeItem ,但只是將圖形設置爲複選框並製作代碼以處理選擇/取消選擇子項。 –

相關問題