使用texfield搜索/过滤树视图

时间:2018-02-07 20:39:54

标签: java javafx treeview

我一直试图找到答案,但这似乎很难做到。

我想要做的是我有一个树视图和一个文本字段我希望能够搜索,所以只有树视图中的树状项与文本字段显示的匹配。

例如,如果有人写了" lat"在文本字段中,树视图显示文件夹,如" latency" "拉脱维亚"等等。

树视图填充代码就是这个

@FXML
private void fillTreeView() {
    // The tree needs a root, and it needs to be a DocumentObject
    // so we create an empty folder and hide it
    TreeItem<DocumentObject<?>> treeRoot = new TreeItem<>(new Folder());

    for (Folder folder : logic.getFolderList()) {
        TreeItem<DocumentObject<?>> folderNode = new TreeItem<>(folder);

        for (FileReference file : folder.getFileList()) {
            TreeItem<DocumentObject<?>> fileNode = new TreeItem<>(file);
            folderNode.getChildren().add(fileNode);
        }

        treeRoot.getChildren().add(folderNode);
        treeRoot.setExpanded(true);
    }

    treeNav.setRoot(treeRoot);
    treeNav.setShowRoot(false);
}

然后我希望Textfield搜索两个treeitems并显示用户搜索的内容

1 个答案:

答案 0 :(得分:3)

如果您只是过滤根节点的直接子节点,那么它非常简单。只需将顶级节点保留在单独的ObservableList中,在其周围包裹FilteredList,然后使用Bindings.bindContent()确保根节点的子节点列表包含与FilteredList

假设您的DocumentObject有一个方法,请说getName()返回您要应用过滤器的文本,并且您有一个名为TextField的{​​{1}}用户键入过滤器文本,这看起来像:

textField

如果您想过滤整个树,那么您需要在每个级别执行相同的操作....