如何在JavaFXTreeView中仅显示文件名?
因此,我已经知道如何获取所有文件和目录,并将它们添加到树视图中,但它显示了完整的文件路径:C/user/file.txt我只需要文件或文件夹名,而不是路径 创建列表的代码如下所示:如何在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
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(TreeItem任何帮助都将不胜感激。使用自定义的
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
的类型参数或您的导入存在问题……如果可能,请您添加代码功能的说明。非常感谢。