Weitere aktuelle Java-Titel finden Sie bei dpunkt.
 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index


8.5.9

JFileChooser



Abbildung 8.27: JFileChooser
Abbildung 8.27

Über den JFileChooser können Dateien ausgewählt werden.

Welche Dateien dabei angezeigt und ausgewählt werden können, wird durch drei Ebenen definiert:
Internes FilternÜber die Methoden setFileHidingEnabled(false) ändert man die Standardeinstellung, versteckte Dateien (bspw. Dateien, deren Name auf Unix mit einem Punkt anfangen) nicht anzuzeigen.
Applikationsweites FilternDie Methode setFileFilter(FileFilter filter) bietet die Möglichkeit, einen eigenen Filter mit der setzen. Dieser Filter ist damit der Standard-Filter, der sofort die Dateien filtert. Zudem wird er zur Liste der auswählbaren Filter hinzugefügt.
Benutzerauswählbare FilterWenn mit der Methode addChoosableFileFilter() mehrere Filter zur Auswahl bereitgestellt werden, kann der Benutzer einen davon wählen und bekommt dementsprechend nur die dort zulässigen Dateien zu sehen.

Die Grundeinstellung des JFileChoosers hat bereits einen ChooseableFileFilter, der alle Dateien auswählbar macht. Möchte man also die Auswahl unbedingt einschränken, muss man diesen mittels
  removeChoosableFileFilter(
       fileChooser.getChoosableFileFilters()[0]);
entfernen. Seit der Java Version [1.3]1.3 kann dazu die Methode setAcceptAllFileFilterUsed(boolean flag) verwendet werden.

Beim Schreiben eines eigenen Filters ist darauf zu achten, dass die FileFilter Verzeichnisse annehmen, da sonst nur Dateien, aber keine Unterordner des Startordners auswählbar sind:

  class GIFFilter implements javax.swing.filechooser.FileFilter {

    public boolean accept(File f) {
      // Auch Unterverzeichnisse anzeigen
      if (f.isDirectory())
        return true;
      return f.getName().toLowerCase().endsWith(".gif");
    }

    public String getDescription() { return "GIFs"; }  

  }
Über die Methode setSelectionMode(int mode) kann eingestellt werden, dass nur Dateien (JFileChooser.FILES_ONLY), nur Verzeichnisse (JFileChooser.DIRECTORIES_ONLY) oder Dateien und Verzeichnisse (JFileChooser.FILES_AND_DIRECTORIES) ausgewählt werden können.

Hat der Benutzer eine oder mehrere Dateien über die Methode setMultiSelectionEnabled(boolean false) ausgewählt, kann der Programmierer auf diese mittels getSelectedFile() bzw. getSelectedFiles() zugreifen.

Zur Anzeige wird der JFileChooser über eine der drei Methoden

   public int showDialog(Component parent, 
                         String approveButtonText)  
   public int showOpenDialog(Component parent) 
   public int showSaveDialog(Component parent) 

Das Ergebnis des Aufrufes ist eine der folgenden Konstanten:

Abbildung 8.28: JFileChooser mit Accessory
Abbildung 8.28

Um das Aussehen zu ändern, kann man eine eigene Komponente an der rechten Seite anzeigen (typischerweise eine Preview-Komponente).

Dies geschieht über die Methode setAccessory(JComponent comp). Eine Preview-Komponente könnte sich so als PropertyChangeListener bei dem JFileChooser registrieren und bei einem JFileChooser.SELECTED_FILE_CHANGED_PROPERTY-Event die selektierte Datei (PropertyEvent.getNewValue()) als kleines Bild darstellen.

Wie eine Datei im JFileChoser angezeigt wird, bestimmt zunächst die javax.swing.filechooser.FileSystemView. Diese Klasse wird dabei vom Look-and-Feel gesetzt und liefert beispielsweise, welches Icon in der Dateiliste für bestimmte Dateien angezeigt werden soll. Diese Standard-Einstellungen können aber mit einem angepassten javax.swing.filechooser.FileView-Objekt überschrieben werden. Das FileView-Objekt kann mithilfe der Methode setFileView(FileView view) gesetzt werden.

Wenn eine Methode dieses FileView einen null-Wert zurückliefert, wird die gleiche Methode im FileSystemView aufgerufen, die dann den Standard-Wert liefert. Dadurch ist eine FileView als Erweiterungen anzusehen, in der man nur die zusätzlichen Informationen zurückliefern muss.

Beispiel

  JFileChooser chooser = new JFileChooser();
  chooser.addChoosableFileFilter(new FileFilter() {
    public boolean accept(File f) {
      if (f.isDirectory()) return true;
      return f.getName().toLowerCase().endsWith(".gif");
    }
    public String getDescription () { return "GIFs"; }  
  });
  chooser.setMultiSelectionEnabled(false);
  if (chooser.showOpenDialog(frame) == 
                                JFileChooser.APPROVE_OPTION)
     System.out.println ("Datei "+chooser.getSelectedFile()+
                        " ausgewählt.");


 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index

Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.