Я думаю, ваша проблема в том, что при расширении или возобновлении части дерева 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, но просто установил графику в CheckBox и сделал код для обработки выбора/отмены выбора детей. –