Я хочу фильтр файлов с двумя параметрами, один для отображения всех файлов, а другой для отображения определенного расширения.Установите новый JFileChooser FileFilter и сбросьте предыдущие
Конкретное расширение должно быть выбрано по умолчанию.
Я использую тот же JFileChooser дважды, первый раз, чтобы показать файлы .fas, а второй - показать файлы .xls.
Сейчас я использую этот код, но по некоторым причинам он не перезаписывает предыдущие расширения файлов. Многие ответы здесь на SO имеют аналогичный код и точно такую же проблему, если вы перерабатываете свой JFileChooser.
Первая часть, все работает
fileChooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
@Override
public boolean accept(File file) {
return file.isDirectory() || file.getAbsolutePath().endsWith(".fas");
}
@Override
public String getDescription() {
return "Fasta";
}
});
// more modern API, same result
// fileChooser.setFileFilter(new FileNameExtensionFilter("File fasta", "fas"));
Вторая часть. Это используется во втором «открытии» того же JFileChooser. Похоже, что он просто добавляет фильтр (опция для выбора файлов .fas остается).
// delete name of previously selected file
File currentDirectory = fileChooser.getCurrentDirectory();
fileChooser.setSelectedFile(new File(""));
fileChooser.setCurrentDirectory(currentDirectory);
// set new file filter
fileChooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
@Override
public boolean accept(File file) {
return file.isDirectory() || file.getAbsolutePath().endsWith(".xls");
}
@Override
public String getDescription() {
return "Excel 97";
}
});
// more modern API, same result
// fileChooser.setFileFilter(new FileNameExtensionFilter("Excel 97", "xls"));
Я не вижу необходимости различать первый и второй выбор. – Thomas
@Thomas спасибо, исправлено сейчас – Agostino
Я думаю, что это более читаемо, чем ответ @Thomas (хотя его ответ правильный). – PhoneixS