2013-07-10 94 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 ,但只是将图形设置为复选框并制作代码以处理选择/取消选择子项。 –

相关问题