在不使用 .setFileSelectionMode 的情况下限制 JFileChooser 的允许选择
Limit the JFileChooser's allowed selection without using .setFileSelectionMode
目前我正在尝试复制 NetBeans 的 "Open Project" 文件选择对话框,因为我想要一个类似的 selecting 满足特定条件的文件夹系统。但是,我无法强制对话框选择满足我条件的文件夹,而不是任何文件夹。我该怎么做呢?
编辑:将文件夹视为 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)
我只想 select Project
文件夹而不是 New Folder
。两者仍然需要可见。但是,当我 select New Folder
时,程序批准并关闭 window。
这不是我想要的行为。相反,我希望 window 直接打开文件夹。
(旁注:我真的不想仅仅为了这个目的而重写整个 class。但如果确实如此,我可以使用不需要这种情况发生的解决方法.)
似乎没有直接的方法或途径来解决这个问题。那么我会改用我的解决方法。
选择文件夹的动机是为了使序列化更容易(每个文件一个对象),但我只是将所有内容都放在一个文件中。
目前我正在尝试复制 NetBeans 的 "Open Project" 文件选择对话框,因为我想要一个类似的 selecting 满足特定条件的文件夹系统。但是,我无法强制对话框选择满足我条件的文件夹,而不是任何文件夹。我该怎么做呢?
编辑:将文件夹视为 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)
我只想 select Project
文件夹而不是 New Folder
。两者仍然需要可见。但是,当我 select New Folder
时,程序批准并关闭 window。
这不是我想要的行为。相反,我希望 window 直接打开文件夹。
(旁注:我真的不想仅仅为了这个目的而重写整个 class。但如果确实如此,我可以使用不需要这种情况发生的解决方法.)
似乎没有直接的方法或途径来解决这个问题。那么我会改用我的解决方法。
选择文件夹的动机是为了使序列化更容易(每个文件一个对象),但我只是将所有内容都放在一个文件中。