在不使用.setFileSelectionMode

时间:2019-01-04 23:23:54

标签: java swing jfilechooser

当前,我正在尝试复制NetBeans的“打开项目”文件选择对话框,因为我希望使用类似的系统来选择满足某些条件的文件夹。但是,我无法强制对话框选择满足我的条件的对话框,而不选择任何文件夹。我该怎么做呢?

编辑:要将文件夹视为NetBeans项目需要满足的条件是它需要包含一个nbproject文件夹。

到目前为止,我已经尝试使用.setFileSelectionMode,但这对于我的目的而言还不够严格。

我的代码(采用main方法):

JFileChooser chooser = new JFileChooser();
FileFilter filter = new FileFilter() {
    @Override
    public boolean accept(File f) {
        if (f.isDirectory()) {
            // check if this folder is a NetBeans Project
            File[] list = f.listFiles();
            for (File sub : list) {
                if (sub.isDirectory()) {
                    if (sub.getName().equals("nbproject")) {
                        return true;
                    }
                }
            }
                return false;
        } else {
            return false;
        }
    }

    @Override
    public String getDescription() {
        return "NetBeans Projects";
    }
};

// so I can select the folder...
// ...but I only want the user to be able to select stuff my filter accepts
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

chooser.addChoosableFileFilter(filter);
chooser.setFileFilter(new FileFilter() {
    @Override
    public boolean accept(File f) {
        return f.isDirectory();
    }

    @Override
    public String getDescription() {
        return "Folders";
    }
});
chooser.setAcceptAllFileFilterUsed(false);

chooser.showOpenDialog(null);

附录:这是我必须浏览的示例文件结构:

C:\USER\Documents\NetBeansProjects
|- Project
   |- nbproject
|- New Folder (empty)

我只希望选择Project文件夹而不是New Folder文件夹。两者仍然需要可见。但是,当我选择New Folder时,程序将批准并关闭窗口。 这不是我想要的行为。相反,我希望窗口仅打开文件夹。

(旁注:我并不是真的想为此目的重写整个类。但是,如果确实如此,我可以使用不需要这种情况的解决方法。)

1 个答案:

答案 0 :(得分:0)

似乎没有直接的方法或方法来解决此问题。然后,我将使用解决方法。

选择文件夹的目的是简化序列化操作(每个文件一个对象),但是我将所有内容都填充到一个文件中。