我認爲你的問題是,當你展開或恢復樹的一部分,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,但只是將圖形設置爲複選框並製作代碼以處理選擇/取消選擇子項。 –