Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaFXTreeView中仅显示文件名?_Java_Javafx_Treeview_Javafx 2_File Manager - Fatal编程技术网

如何在JavaFXTreeView中仅显示文件名?

如何在JavaFXTreeView中仅显示文件名?,java,javafx,treeview,javafx-2,file-manager,Java,Javafx,Treeview,Javafx 2,File Manager,因此,我已经知道如何获取所有文件和目录,并将它们添加到树视图中,但它显示了完整的文件路径:C/user/file.txt我只需要文件或文件夹名,而不是路径 创建列表的代码如下所示: private TreeItem<File> buildFileSys(File dir, TreeItem<File> parent){ TreeItem<File> root = new TreeItem<>(dir); root.setExpand

因此,我已经知道如何获取所有文件和目录,并将它们添加到树视图中,但它显示了完整的文件路径:C/user/file.txt我只需要文件或文件夹名,而不是路径

创建列表的代码如下所示:

private TreeItem<File> buildFileSys(File dir, TreeItem<File> parent){
    TreeItem<File> root = new TreeItem<>(dir);
    root.setExpanded(false);
    File[] files = dir.listFiles();
    for (File file : files) {
        if (file.isDirectory()) {
            buildFileSys(file,root);
        } else {
            root.getChildren().add(new TreeItem<>(file));
        }

    }
    if(parent==null){
        return root;
    } else {
        parent.getChildren().add(root);
    }
    return null;
}
private TreeItem buildFileSys(文件目录,TreeItem父级){
TreeItem root=新的TreeItem(dir);
root.setExpanded(false);
File[]files=dir.listFiles();
用于(文件:文件){
if(file.isDirectory()){
buildFileSys(文件,根);
}否则{
root.getChildren().add(新树项(文件));
}
}
如果(父项==null){
返回根;
}否则{
parent.getChildren().add(根目录);
}
返回null;
}
然后,我获取返回的TreeItem并执行treeview.setroot(TreeItemobj)


任何帮助都将不胜感激。

使用自定义的
cellFactory
来确定项目在
树视图中的显示方式:

treeView.setCellFactory(new Callback<TreeView<File>, TreeCell<File>>() {

    public TreeCell<File> call(TreeView<File> tv) {
        return new TreeCell<File>() {

            @Override
            protected void updateItem(File item, boolean empty) {
                super.updateItem(item, empty);

                setText((empty || item == null) ? "" : item.getName());
            }

        };
    }
});
treeView.setCellFactory(新回调(){
公共TreeCell呼叫(TreeView tv){
返回新的TreeCell(){
@凌驾
受保护的void updateItem(文件项,布尔值为空){
super.updateItem(项,空);
setText((空的| | item==null)?“”:item.getName();
}
};
}
});

使用自定义的
cellFactory
来确定项目在
树视图中的显示方式:

treeView.setCellFactory(new Callback<TreeView<File>, TreeCell<File>>() {

    public TreeCell<File> call(TreeView<File> tv) {
        return new TreeCell<File>() {

            @Override
            protected void updateItem(File item, boolean empty) {
                super.updateItem(item, empty);

                setText((empty || item == null) ? "" : item.getName());
            }

        };
    }
});
treeView.setCellFactory(新回调(){
公共TreeCell呼叫(TreeView tv){
返回新的TreeCell(){
@凌驾
受保护的void updateItem(文件项,布尔值为空){
super.updateItem(项,空);
setText((空的| | item==null)?“”:item.getName();
}
};
}
});

。嘿,谢谢您提供的解决方案,但我遇到了一个错误:类型不匹配:无法从new TreeCell(){}转换为TreeCell@Reggie:我忽略了javafx-2标记。您可能正在使用Java7,因此当然不允许使用lambda。(现在应该修复。)否则,
TreeView
的类型参数或您的导入存在问题……如果可能,请您添加代码功能的说明。谢谢。嘿,谢谢你提供的解决方案,但我遇到了一个错误:类型不匹配:无法从new TreeCell(){}转换为TreeCell@Reggie:我忽略了javafx-2标记。您可能正在使用Java7,因此当然不允许使用lambda。(现在应该修复。)否则,
TreeView
的类型参数或您的导入存在问题……如果可能,请您添加代码功能的说明。非常感谢。