更新TreeView上的项目

时间:2017-08-31 00:15:51

标签: java javafx javafx-2 javafx-8

我想从TreeItem更新我的TreeView

自定义root元素,其中将下载其他元素:

public class FilePathTreeItem extends TreeItem<Path> {
private boolean isFirstTimeChildren = true;
private boolean isFirstTimeLeaf = true;
private boolean isLeaf;

public boolean isDirectory() {
    return Files.isDirectory(getValue());
}

public FilePathTreeItem(Path f) {
    super(f);
}

@Override
public ObservableList<TreeItem<Path>> getChildren() {
    if (isFirstTimeChildren) {
        isFirstTimeChildren = false;

        super.getChildren().setAll(buildChildren());
    }
    return super.getChildren();
}

@Override
public boolean isLeaf() {
    if (isFirstTimeLeaf) {
        isFirstTimeLeaf = false;
        isLeaf = Files.exists(getValue()) && !Files.isDirectory(getValue());
    }
    return isLeaf;
}

private ObservableList<TreeItem<Path>> buildChildren() {
    if (Files.isDirectory(getValue())) {
        try {
            return Files.list(getValue())
                    .map(FilePathTreeItem::new)
                    .collect(Collectors.toCollection(FXCollections::observableArrayList));
        } catch (IOException e) {
            e.printStackTrace();
            return FXCollections.emptyObservableList();
        }
    }

    return FXCollections.emptyObservableList();
}
}

我也看到了这个解决方案:https://gist.github.com/jewelsea/5174074 这是必要的,但在更新TreeView之后,我希望能够保存isExpended()属性。否则,所有文件夹都将关闭。

我尝试使用其他变量存储以前的TreeItem并计算新的TreeItem。但是我有相同的附加变量,因为它是不可变的。我尝试了不同类型的Cloning,但没有任何内容(来自github的GsonApachenative cloningdeep cloning

我花了很多时间寻找解决方案,但没有找到理想的解决方案。

此外,我尝试了refresh方法,但它很简单,并且不会使用新的外部文件更新TreeView

0 个答案:

没有答案