首页 > 解决方案 > 在不使用 .setFileSelectionMode 的情况下限制 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,程序会批准并关闭窗口。这不是我想要的行为。相反,我希望窗口只是打开文件夹。

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

标签: javaswingjfilechooser

解决方案


It seems that there is no direct way or approach to solve this problem. I'll use my workaround instead, then.

The impetus for selecting the folder was to make serialization easier (one object per file), but I'll just stuff everything in one file instead.


推荐阅读