我认为你的问题是,当你展开或恢复树的一部分,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
谢谢!我做了类似的事情,我仍然使用TreeItem,但只是将图形设置为复选框并制作代码以处理选择/取消选择子项。 –