2012-04-07 11 views
7

(Vielen Dank im Voraus! Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen. Beispielcode unten.)Java JFileChooser mit Filter angezeigt werden angeblich nur Verzeichnisse nicht nur um zu zeigen Verzeichnisse

Problem Ich versuche, lösen:

ich versuche, dieses JFileChooser Objekt zu erhalten nur Verzeichnisse (und nicht-Dateien), durch die Verwendung eines javax.swing.filechooser.FileFilter Objekt anzuzeigen, dass dies im annehmen muss (File-Datei) außer Kraft gesetzt Methode: return file.isDirectory();. Allerdings scheint es zumindest auf meinem Mac nicht zu verhindern, dass Dateien zusammen mit den Verzeichnissen angezeigt werden (es verhindert, dass Dateien ohne die setFileSelectionMode() -Methode ausgewählt werden).

Frage

bin ich etwas fehlt? Wenn nicht, ist das schon mal jemandem begegnet?

Mein Verständnis/Annahmen:

  1. Die Magie passieren soll, wenn Sie in einem javax.swing.filechooser.FileFilter Objekt in den setFileFilter() Methode des JFileChooser passieren.
  2. Scheint wie meine JFileChooser mit setFileFilter() verhält sich wie sein von setSelectionMode(JFileChooser.DIRECTORIES_ONLY);
mit

-Code

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

// inside a method that's adding this to a JPanel 

_fileChooser = new JFileChooser("."); 
_fileChooser.setControlButtonsAreShown(false); 
_fileChooser.setFileFilter(new FolderFilter()); 
// _fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
_panelMidLeft.add(_fileChooser); 

// an inner class, defined somewhere else in the class 

private class FolderFilter extends javax.swing.filechooser.FileFilter { 
    @Override 
    public boolean accept(File file) { 
    return file.isDirectory(); 
    } 

    @Override 
    public String getDescription() { 
    return "We only take directories"; 
    } 
} 

Dank!

Alex

+0

Bitte lernen gemeinsam [Java Namenskonventionen] (http://java.sun.com/ docs/books/jls/second_edition/html/names.doc.html # 73307) (speziell der für die Namen verwendete Fall) für Klassen-, Methoden- und Attributnamen & konsistent verwenden. –

+0

Danke für den Vorschlag. Abgesehen von der Verwendung von '_' (was in meinem Fall tatsächlich Instanzvariablen anzeigen würde), würde es Ihnen etwas ausmachen, auf einige Dinge hinzuweisen, während ich gerade die Dokumentation über die Konventionen im Web durchblättere? –

Antwort

15

Ihr Code funktioniert für mich. Mein SSCCE:

import java.io.File; 
import javax.swing.JFileChooser; 

public class ShowDirectoriesOnly { 
    public static void main(String[] args) { 
     JFileChooser fileChooser = new JFileChooser("."); 
     fileChooser.setControlButtonsAreShown(false); 
     fileChooser.setFileFilter(new FolderFilter()); 
     fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
     fileChooser.showOpenDialog(null); 
    } 

    private static class FolderFilter extends javax.swing.filechooser.FileFilter { 
     @Override 
     public boolean accept(File file) { 
     return file.isDirectory(); 
     } 

     @Override 
     public String getDescription() { 
     return "We only take directories"; 
     } 
    } 
} 

Wenn Sie immer noch Probleme haben, ist die beste Ihre eigene SSCCE zu erstellen, das Ihr Problem demonstriert.

bearbeiten

Screenshot auf, wie es aussieht unter OS X mit JDK1.7

OS X screenshot

+2

Dieser Code zeigt mir einen JFileChooser, wo alle Dateien ausgegraut und nicht auswählbar, aber immer noch sichtbar (OS X, JDK 1.7) +1 für den SSCCE, macht es sehr einfach zu testen – Robin

+0

@Robin: Danke für die Köpfe hoch. Unter Windows 7 sehe ich die Dateien überhaupt nicht, nur die Verzeichnisse. Ich frage mich, ob das L & F-abhängig sein könnte. –

+0

Danke Hovercraft voll von Aalen & Robin. Ja, ich kann immer noch die Dateien auf meinem Mac sehen, mit Ihrem Beispiel.+1 für das SSCCE-Beispiel und ich werde das auch in meinen zukünftigen SO-Fragen tun. (Ich hatte gehofft, ich könnte hier ein Bild posten, aber stellt sich heraus, ich brauche 10 Rufpunkt oder mehr, bevor ich das auf SO tun konnte.) –