13 Stimmen

Wie filtert man den Dateityp im FileDialog?

Ich verwende FileDialog zum Speichern und Laden in einem Java-Programm.

Wie kann ich die Dropdown-Liste filtern, um den Dateityp als "JPG" oder "JPEG" usw. anzugeben? ?

Ich habe den folgenden Code ausprobiert, aber er scheint keine Wirkung zu haben.

Gibt es andere Möglichkeiten, dies zu tun?

public void actionPerformed(ActionEvent e) {
            FileDialog saveFileDialog = new FileDialog(new Frame(), "Save", FileDialog.SAVE);

            saveFileDialog.setFilenameFilter(new FilenameFilter(){
                @Override
                public boolean accept(File dir, String name) {
                    return name.endsWith(".jpg") || name.endsWith(".jpeg");
                }
            });
            saveFileDialog.setFile("Untitled.jpg");
            saveFileDialog.setVisible(true);
        }

13voto

swemon Punkte 5824

Die Antwort ist einfach. Sie können verwenden

 saveFileDialog.setFile("*.jpg;*.jpeg");

Keine Notwendigkeit der Verwendung setFilenameFilter Methode. Sie können so viele Dateitypen hinzufügen, wie Sie möchten.

Die Lösung dieses Problems ist zu finden in huxhorn ' s Kommentar in Bug ID: 4031440 FileDialog ruft FilenameFilter.accept() nicht auf .

public void actionPerformed(ActionEvent e) {
            FileDialog saveFileDialog = new FileDialog(new Frame(), "Save", FileDialog.SAVE);
            saveFileDialog.setFile("*.jpg;*.jpeg");
            saveFileDialog.setVisible(true);
        }

3voto

RGO Punkte 4566

Bei mir klappt es auch nicht. Dateinamensfilter funktionieren nicht in der Referenzimplementierung von Sun für Microsoft Windows.

Stattdessen können Sie den folgenden Code verwenden. Sie sollten auch die setFilenameFilter Teil:

saveFileDialog.setFile("*.jpg");

2voto

Thorn Punkte 3965

Ich habe immer JFileChooser anstelle von FileDialog verwendet. Sie können dann mehrere ChoosableFileFilters für die verschiedenen Typen hinzufügen, die Ihr Programm auf diese Weise unterstützen wird:

File myFilename;
chooser = new JFileChooser();
chooser.addChoosableFileFilter(new OpenFileFilter("jpeg","Photo in JPEG format") );
chooser.addChoosableFileFilter(new OpenFileFilter("jpg","Photo in JPEG format") );
chooser.addChoosableFileFilter(new OpenFileFilter("png","PNG image") );
chooser.addChoosableFileFilter(new OpenFileFilter("svg","Scalable Vector Graphic") );
int returnVal = chooser.showSaveDialog(mainWindow);
if (returnVal == JFileChooser.APPROVE_OPTION) {
     myFilename = chooser.getSelectedFile();
     //do something with the file
}

Nachfolgend sehen Sie meine Implementierung eines FileFilters.

/**
 * This class defines which file types are displayed (by default) by the JFileChooser and what file
 * types appear in the drop down menu in the file dialog.
 * You could add more than one file type to the open file dialog by creating multiple instances of this 
 * class and then repeatedly calling addFileFilter.
 * @author LaSpina
 */

import java.io.File;
import javax.swing.filechooser.*;

public class OpenFileFilter extends FileFilter {

    String description = "";
    String fileExt = "";

    public OpenFileFilter(String extension) {
        fileExt = extension;
    }

    public OpenFileFilter(String extension, String typeDescription) {
        fileExt = extension;
        this.description = typeDescription;
    }

    @Override
    public boolean accept(File f) {
        if (f.isDirectory())
            return true;
        return (f.getName().toLowerCase().endsWith(fileExt));
    }

    @Override
    public String getDescription() {
        return description;
    }
}

-1voto

panticz Punkte 1799

Ab Java 8 können Sie einen Lambda-Ausdruck verwenden:

fileDialog.setFilenameFilter((File dir, String name) -> name.endsWith(".html"));

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X