java - 限制 JFileChooser 允许的选择而不使用 .setFileSelectionMode

标签 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。两者仍然需要可见。但是,当我选择新建文件夹时,程序会批准并关闭窗口。 这不是我想要的行为。相反,我希望窗口只是打开文件夹。

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

最佳答案

似乎没有直接的方法或途径来解决这个问题。那么我将使用我的解决方法。

选择文件夹的动机是为了使序列化更容易(每个文件一个对象),但我会将所有内容都填充到一个文件中。

关于java - 限制 JFileChooser 允许的选择而不使用 .setFileSelectionMode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54047484/

相关文章:

java - java 数组类型的方法未定义

java - 写入文件的最有效方法?

java - spring restTemplate动态映射

java - 使用 <object> 标记的 Java Applet 中的 ClassNotFoundException

java - 更新 JOptionPane 以反射(reflect)组件状态更改

java - 使导入的图像适合面板

java - 尝试从 JFileBrowser 访问文件时出现 NullPointerException

java - 如何根据更新的 JTable 的先前值设置单元格背景

java - 为 Ibatis 加密一个属性文件

java - 如何将使用 JFileChooser 拍摄的图像图标放在标签上?