В настоящее время я пытаюсь реплицировать диалоговое окно выбора файла 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);
ADDENDUM: Вот пример структуры файла, по которой мне нужно было бы перемещаться:
C:\USER\Documents\NetBeansProjects
|- Project
|- nbproject
|- New Folder (empty)
Я хочу иметь возможность выбрать только папку Project
, а не New Folder
. Оба все еще должны быть видны. Однако когда я выбираю New Folder
, программа утверждает и закрывает окно.
Это не то поведение, которое я хочу. Вместо этого я хочу, чтобы окно просто открывало папку.
(sidenote: я действительно не хочу переписывать весь класс только для этой цели. Но если это все сводится к этому, я мог бы использовать обходной путь, который не понадобится, чтобы это произошло.)