gpt4 book ai didi

java - 如何使目录在 javafx TreeView 中可扩展

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:09:37 24 4
gpt4 key购买 nike

我有一个问题,我不确定如何解决,也无法在网上找到一些线索,但这个问题应该是微不足道的......

我有一个 TreeView<File>我想根据给定路径填充目录和文件列表。问题是目录已添加到树中,但无法展开,因此我无法显示其中的文件。

这是我的一些不起眼的 Controller 代码:

public class MainViewController implements Initializable {
@FXML // fx:id="filesTree"
private TreeView<File> filesTree;

@Override
public void initialize(URL url, ResourceBundle rb) {
File currentDir = new File("src/xslt"); // current directory
findFiles(currentDir);
}

public void findFiles(File dir) {
TreeItem<File> root = new TreeItem<>(new File("Files:"));
root.setExpanded(true);
try {
File[] files = dir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
System.out.println("directory:" + file.getCanonicalPath());
findFiles(file);
} else {
System.out.println(" file:" + file.getCanonicalPath());
root.getChildren().add(new TreeItem<>(file));
}
root.getChildren().add(new TreeItem<>(file));
}

filesTree.setRoot(root);
} catch (IOException e) {
e.printStackTrace();
}
}

}

还有我的FXML View 非常简单 - 只是一个 AnchorPaneTreeView .但如果需要,我也可以分享它。

所以问题是 - 如何使目录可扩展?我找到了 setExpanded(true)方法,但这是不同的。

最佳答案

基本上,递归方法每次找到一个目录都要创建一个新的根目录。

private void findFiles(File dir, TreeItem<File> parent) {
TreeItem<File> root = new TreeItem<>(dir);
...
}

并且这个root 必须作为父级发送到下一级。

    if (file.isDirectory()) {
System.out.println("directory:" + file.getCanonicalPath());
findFiles(file,root);
}

最后,仅在最顶层我们将此根设置为 treeView 的根:

if(parent==null){
filesTree.setRoot(root);
}

在内层:

else {
parent.getChildren().add(root);
}

所以在这几次调整之后,这应该可以工作了:

@FXML private TreeView<File> filesTree;

@Override
public void initialize(URL url, ResourceBundle rb) {
File currentDir = new File("src/xslt"); // current directory
findFiles(currentDir,null);
}

private void findFiles(File dir, TreeItem<File> parent) {
TreeItem<File> root = new TreeItem<>(dir);
root.setExpanded(true);
try {
File[] files = dir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
System.out.println("directory:" + file.getCanonicalPath());
findFiles(file,root);
} else {
System.out.println(" file:" + file.getCanonicalPath());
root.getChildren().add(new TreeItem<>(file));
}

}
if(parent==null){
filesTree.setRoot(root);
} else {
parent.getChildren().add(root);
}
} catch (IOException e) {
e.printStackTrace();
}
}

关于java - 如何使目录在 javafx TreeView 中可扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26690247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com