2012-09-24 7 views
7

Ich verwende FileDialog zum Speichern und Laden in einem Java-Programm.Wie filtert man den Dateityp in FileDialog?

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

Ich habe den folgenden Code versucht, aber es scheint keine Wirkung zu haben.

Gibt es andere Möglichkeiten, dies zu tun?

Antwort

0

ich immer JFileChooser statt File-Dialog benutzt habe. Sie können dann mehrere ChoosableFileFilters für die verschiedenen Arten Ihr Programm auf diese Weise unterstützt hinzufügen:

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 
} 

Im Folgenden meine Implementierung eines Filefilter ist.

/** 
* 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; 
    } 
} 
+0

ok ... i habe meine Entscheidung getroffen, diesen Ansatz zu verwenden ... Vielen Dank ~ –

+0

Sollten Sie den Punkt nicht in das Erweiterungsargument des 'OpenFileFilter'-Konstruktors aufnehmen, damit' file.notJpg' nicht akzeptiert wird? –

+0

Ja, ich sollte. Vielen Dank. – Thorn

2

Es funktioniert auch nicht für mich. Filename filters do not function in Sun's reference implementation for Microsoft Windows.

Stattdessen können Sie den folgenden Code versuchen. Sie sollten auch den setFilenameFilter Teil entfernen:

saveFileDialog.setFile("*.jpg"); 
+0

es setzt nur den Standardnamen der Datei zu speichern, aber es ändert nichts an der Dropdown-Liste ... –

+0

ja, aber es funktioniert, weil Sie Dateien mit anderen Erweiterungen nicht sehen können. – RGO

+0

Was ich will ist, dass es irgendwelche Alternativen gibt, dass ich den Inhalt der Dropdown-Liste angeben kann? –

8

Die Antwort ist einfach. Sie können

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

Keine Notwendigkeit zu verwenden setFilenameFilter Methode verwenden. Sie können so viele Dateitypen wie Sie hinzufügen.

Die Lösung dieses Problems finden Sie in huxhorn 's Kommentar in Bug ID: 4031440 FileDialog doesn't call FilenameFilter.accept().

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

Es scheint, dass man höchstens zwei Typstrings verwenden kann. Versuchen Sie, fünf zu verwenden, und das getFile gibt nach der Auswahl falsche Informationen zurück. – SOUser

+0

Laut der SO-Post, http://StackOverflow.com/Questions/14972664, was ich beschwerte, ist ein Fehler in JDK 7. – SOUser

-1

Beginnend mit Java 8 Sie können einen Lambda-Ausdruck:

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

+0

Dies funktioniert einfach nicht unter Windows –