Java FX setOnAction 不执行任何操作

问题描述 投票:0回答:1

`我正在为大学开发一个项目,我需要使用 ADT 树创建个人文件系统。

目前我可以打开该文件夹,并且该文件夹的所有元素都添加到树中并显示在 Java FX 的 TreeView 中。我可以重命名文件、编辑文件并显示文件内容。但是,当我尝试创建新文件或新文件夹时,在上下文菜单中按该选项,什么也没有发生。

我尝试在 createFile 中添加 renameFile 的逻辑,但仍然没有任何反应,反之亦然。

这是我班级的代码。

``

/** * 意大利面的方法 */ 公共无效创建文件夹(){

    createFolder.setOnAction(event -> {
        File dir = getValue();
        if (!dir.isDirectory()) {
            return;
        }

        String dirName = dialogHandler.showTextInputDialog("Nova Pasta", "A criar    nova pasta", "Por favor insira o nome da pasta:", "pasta");
        if (dirName == null) {
            return;
        }

        File file = new File(dir, dirName);

        if (file.exists()) {
            dialogHandler.showAlert(AlertType.WARNING, "Aviso", "A pasta: " + file.getName() + " já existe",
                    "Não foi possível criar a pasta pois já existe uma com o mesmo nome");
        } else {
            boolean success = file.mkdir();
            if (!success) {
                dialogHandler.showAlert(AlertType.ERROR, "Erro",
                        "Erro a criar diretório: " + file.getName(),
                        "Não foi possível criar o diretório especificado");
            } else {
                // Adicionar à TreeLinked
                Position<File> parentPosition = treeLinked.isInternal(treeLinked.root()) ? treeLinked.root() : null;
                Position<File> insertedPosition = treeLinked.insert(parentPosition, file);

                // Adicionar à TreeView existente
                TreeItem<File> newTreeViewItem = new TreeItem<>(file);
                treeView.getRoot().getChildren().add(newTreeViewItem);

                // Expande o nó pai na TreeView para mostrar a nova pasta
                treeView.getRoot().setExpanded(true);
            }
        }
    });
}

``

java javafx tree treeview
1个回答
0
投票

解决方案:

// Somewhere in your controller:
private Class? createFolder;

// Somewhere in your initConstructorOrWhatever method:
public initConstructorOrWhatever(){
    initCreateFolder();
}

public void initCreateFolder() {
    createFolder.setOnAction(event -> {
        File dir = getValue();
        if (!dir.isDirectory()) {
            return;
        }
        // ... Code
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.