java - 在不使用 .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
,程序会批准并关闭窗口。这不是我想要的行为。相反,我希望窗口只是打开文件夹。
(旁注:我真的不想仅仅为此目的重写整个课程。但如果确实如此,我可以使用不需要发生这种情况的解决方法。)
解决方案
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.
推荐阅读
- c++11 - 基析构函数真的可以被 C++ 中的派生析构函数覆盖吗?
- javascript - 从Android中的内部html文件加载webview时javascript不起作用
- php - 如何在rest api magento 2中获取类别图像?
- python - 如何用 __add__ 添加两个字典对象?
- matlab - 如何在矩阵的每个元素中应用“/”?MATLAB
- range - 如何在c#中导出excel时将表格转换为正常范围的单元格
- php - 如何抑制 ASCII 码渲染?
- javascript - JavaScript 中的拖放功能问题
- java - 如何使用 restfb 通过 java 访问“我/帐户”访问令牌?
- angular - 在组件中使用选择器值