Простой JFileChooser FileFilter не работает - PullRequest
2 голосов
/ 14 января 2020

Ниже приведен простой код для сохранения файла в пользовательском каталоге ввода с использованием JFileChooser, полученного из this , как это предлагается this ответа из другого вопроса stackoverflow. Однако этот код не будет работать должным образом, так как фильтр файлов не отображает все определенные фильтры.

public static void main(String[] args) {
    JFrame main = new JFrame();

    JButton saveto = new JButton("save");
    saveto.addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent e) 
        { 
            JFileChooser chooser = new JFileChooser();
            int retval = chooser.showDialog(chooser, "Save");

            FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG & GIF Images", "jpg", "gif");
            chooser.setFileFilter(filter);

            if (retval == JFileChooser.APPROVE_OPTION) 
            {
                File f_sample = chooser.getSelectedFile();
                System.out.println(f_sample + ".csv");
            }
        }
    });

    main.add(saveto);
    main.setSize(300,300);
    main.setLocationRelativeTo(null);
    main.setVisible(true);
    main.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}

Файл f_sample также будет содержать ноль, но удаление фильтра приведет к файлу f_sample работать по назначению, содержащий выбранный файл. Итак, я предположил, что причиной неисправности является FileFilter

Что не так с файловым фильтром? И как я могу заставить это работать? Обратите внимание, что код взят из Oracle Tutorial с небольшим изменением.

Последнее изменение

Поэтому я использовал chooser.addChoosableFileFilter(filter); вместо chooser.setFileFilter(filter); и файл f_sample теперь содержит файл, определенный пользователем. Однако определенные фильтры не будут отображаться в окне JFileChooser.

1 Ответ

3 голосов
/ 14 января 2020

Вы показываете свой выбор перед установкой фильтра

изменить на

JFileChooser chooser = new JFileChooser();

FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG & GIF Images", 
                                                                        "jpg", "gif");
chooser.setFileFilter(filter);
int retval = chooser.showDialog(chooser, "Save");

// etc
...