Как выбрать FileFilter по умолчанию при создании диалога JFileChooser? - PullRequest
7 голосов
/ 20 февраля 2012

Добрый день всем,

У меня есть экземпляр javax.swing.JFileChooser , и я добавил несколько выбираемых javax.swing.FileFilter с использованием addChoosableFileFilter .

Однако, когда я показываю диалоговое окно (через showSaveDialog ), мой произвольно выбираемый FileFilter по умолчанию не выбирается.

Я хотел выбрать фильтр "Файлы изображений" по умолчанию ..

Как выбрать фильтр по умолчанию для диалогового окна javax.swing.JFileChooser ?

SSCCEd:

public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new java.lang.Runnable() {
        @Override
        public void run() {
            new javax.swing.JFrame() {
                {
                    final javax.swing.JButton button = new javax.swing.JButton("Save");
                    button.addMouseListener(new java.awt.event.MouseAdapter() {
                        @Override
                        public void mousePressed(java.awt.event.MouseEvent e) {
                            new javax.swing.JFileChooser() {
                                {
                                    addChoosableFileFilter(NewFileFilter("Text Files", new String[] { "txt" }));
                                    addChoosableFileFilter(NewFileFilter("Image Files", new String[] { "gif", "png", "jpg" }));
                                    addChoosableFileFilter(NewFileFilter("Audio Files", new String[] { "mp3" }));
                                    addChoosableFileFilter(NewFileFilter("Video Files", new String[] { "mp4", "avi" }));
                                    showSaveDialog(button);
                                }

                                private javax.swing.filechooser.FileFilter NewFileFilter(final String desc, final String[] allowed_extensions) {
                                    return new javax.swing.filechooser.FileFilter() {
                                        @Override
                                        public boolean accept(java.io.File f) {
                                            if (f.isDirectory()) {
                                                return true;
                                            }
                                            int pos = f.getName().lastIndexOf('.');
                                            if (pos == -1) {
                                                return false;
                                            } else {
                                                String extension = f.getName().substring(pos + 1);
                                                for (String allowed_extension : allowed_extensions) {
                                                    if (extension.equalsIgnoreCase(allowed_extension)) {
                                                        return true;
                                                    }
                                                }
                                                return false;
                                            }
                                        }

                                        @Override
                                        public String getDescription() {
                                            return desc;
                                        }
                                    };
                                }
                            };
                        }
                    });
                    add(button);
                    setSize(100, 100);
                    setVisible(true);
                }
            };
        }
    });
}

Ответы [ 2 ]

13 голосов
/ 20 февраля 2012

Использование setFileFilter () :

FileFilter ff = NewFileFilter("Image Files", new String[] { "gif", "png", "jpg" });
addChoosableFileFilter(ff);
setFileFilter(ff);

Почему вы выбираете средство выбора файлов, а не просто используете его? И почему вы не соблюдаете соглашения об именах Java (методы начинаются со строчной буквы)? И почему вы не уважаете политику потоков Swing, в которой говорится, что компоненты Swing должны использоваться только в EDT.

0 голосов
/ 04 августа 2017
FileFilter filter = new FileNameExtensionFilter("Data Files", "*.dat"); 
JFileChooser fc   = new JFileChooser(); 
fc.addChoosableFileFilter(filter); 
fc.setMultiSelectionEnabled(false);
...