Я пытаюсь настроить JFileChooser так, чтобы через showOpenDialog разрешался только выбор определенного типа файла (pdf).
Я установил фильтр файлов, но не понимаю, какое действие он выполняет в JFileChooser.
Чего я пытаюсь достичь, так это:
- Визуально исключайте другие типы файлов, чтобы пользователь не мог выбрать их из списка.
- На самом деле предотвращает выбор других типов или недопустимого файла. (т.е. иметь getSelectedFile(), чтобы фактически вернуть действительный файл PDF)
Вот мой код:
JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
fc.setAcceptAllFileFilterUsed(false);
fc.setFileFilter(new FileNameExtensionFilter("PDF Files", "pdf"));
fc.setDialogTitle("Load MSDS");
int op = fc.showOpenDialog(this);
if(op == JFileChooser.APPROVE_OPTION) {
File f = fc.getSelectedFile();
lbl_msds_loaded.setForeground(Color.BLACK);
lbl_msds_loaded.setText(f.getName() + " (Size: " + utils.FileUtils.getFileSizeMegaBytes(f, 3) + ")");
}
Я получаю следующее поведение:
Визуально — фильтрация работает, и в диалоговом окне отображаются только PDF-файлы, поэтому я могу выбирать только PDF-файлы из списка.
Но — я все еще могу вручную выбрать недопустимый файл, введя какое-либо имя в поле «Имя файла:» и щелкнув «Открыть» (или нажав Enter).
Например: если я напишу Untitled.png (который существует в текущем открытом каталоге) и открою, я получу этот png-файл загружен.
Или, если написать несуществующее имя файла и нажать «Открыть», я фактически получу новый файл с загруженным именем.
(Под загруженным я подразумеваю файл, который getSelectedFile() будет return).
Есть ли способ запретить диалогу подтверждать действие открытия, если установлен недопустимый файл (конечно, на основе фильтра)?
Разве это не должно иметь место при использовании диалогов JFileChooser с фильтрами? ?
Что именно фильтр здесь делает? Документация для JFileChooser не объясняет ни один из этих аспектов.
Я был бы очень признателен за объяснение того, как это работает.
Также в чем разница между setFileFilter и addChoosableFileFilter? Они дают точно такое же поведение.
Наконец, вот несколько скриншотов диалогового окна и формы JFrame, над которой я работаю, для некоторого контекста:
https://ibb.co/bFVqVmt
https://ibb.co/5BcsXSW
https://ibb.co/2qq0qr9
https://ibb.co/jMXXXyN< br> https://ibb.co/g3kvtfd
https://ibb.co/2FshJpt
Большое спасибо!
approveSelection()
средства выбора файла, чтобы добавить дополнительное редактирование в файл. - person camickr   schedule 07.06.2021