【问题标题】:How to create many folders inside a main folder using treeview in JavaFX?如何使用 JavaFX 中的树视图在主文件夹中创建多个文件夹?
【发布时间】:2019-11-16 09:15:12
【问题描述】:

为了清楚起见,我正在创建一个树视图,它将在用户创建文件夹后实例化自身,并且所述文件夹将被添加为树项。

我目前有这个:

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之后,我声明了一个新的菜单项,它会在被点击后触发一个事件。

该事件将要求用户输入一个名称以用作 treeView 的根文件夹。现在一切正常。

现在我遇到的问题是如何在创建的根文件夹中创建更多文件夹并将它们显示为树视图中的子文件夹?

到目前为止,我的代码仅将旧的根文件夹替换为新创建的根文件夹。而不是再次设置根文件夹,我怎样才能使它只是将这些文件夹添加到第一个文件夹中并再次显示它们在树视图中作为子文件夹?

我自己解释了吗?

谢谢。

【问题讨论】:

    标签: javafx treeview javafx-8


    【解决方案1】:

    只需将TreeItem(s) 添加到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
            }
        }
    });
    

    【讨论】:

    • 这正是我想要的!。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    相关资源
    最近更新 更多