为了清楚起见,我正在创建一个树视图,该树视图将在用户创建文件夹后实例化,并且该文件夹将作为树项添加。
我目前有这个:
TreeView treeView = new TreeView();
// Create new folder
MenuItem menuItem1 = new MenuItem("Create New Folder");
menuItem1.setOnAction(e -> {
System.out.println("Please name your directory:");
Scanner in = new Scanner(System.in);
String strFolder = in. nextLine();
createFolder(strFolder); // Create folder
TreeItem rootFolder = new TreeItem(strFolder); // Create new TreeItem
treeView.setRoot(rootFolder); // Replace old folder with new one
// rootFolder.getChildren().add(rootFolder);
// rootItem.getChildren().add(rootFolder);
});
在treeView之后,我声明了一个新的Menu Item,该菜单项在单击后将触发事件。
该事件将要求用户提供一个名称,以用作treeView的根文件夹。现在就可以了。
现在我遇到的麻烦是,如何在创建的根文件夹内创建更多文件夹,并在treeView中将它们显示为子文件夹?
到目前为止,我的代码仅将旧的根文件夹替换为创建的新根文件夹。而不是再次设置根文件夹,我该怎么做,使其仅将那些文件夹添加到第一个文件夹中,并再次将它们显示在treeView中作为子文件夹?
我自己解释了吗?
谢谢。
仅将TreeItem
添加到TreeItem
的子列表中。如果未选择任何项目,则以下示例替换根,否则将新项目添加为所选项目的子项目:
TreeView<String> treeView = new TreeView<>(); // never use raw type without good reason
// Create new folder
MenuItem menuItem1 = new MenuItem("Create New Folder");
menuItem1.setOnAction(e -> {
TextInputDialog dialog = new TextInputDialog(); // replacing console input with dialog here
dialog.setHeaderText("Please name your directory:");
String strFolder = dialog.showAndWait().orElse(null);
if (strFolder != null) {
TreeItem<String> newFolder = new TreeItem<>(strFolder); // Create new TreeItem
TreeItem<String> selection = treeView.getSelectionModel().getSelectedItem();
createFolder(strFolder); // Create folder ; TODO: make dependent on parent???
if (selection == null) {
treeView.setRoot(newFolder); // Replace old folder with new one
} else {
selection.getChildren().add(newFolder);
selection.setExpanded(true); // make sure we're able to see the new child
}
}
});