每当我实例化一个CheckBoxTreeView时,它需要一个带有 no 的TreeItem选择的子TreeItems 取消选择。我该如何改变?我尝试在父TreeItem上调用 setIndependent(true),但它仍然必须至少检查一个被检查的子TreeItem。
我尝试使用复选框作为图形制作自定义TreeCell,但无法弄清楚如何防止项目重置。此问题发布在此处:https://stackoverflow.com/questions/17606280/javafx-2-checkbox-in-treecell-keeps-resetting-cant-bind-it
答案 0 :(得分: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 - &gt; GeoObj customCheckBoxCell-&gt; CustomCheckBoxCell