2013-10-10 11 views
7

Ich benutze JFileChooser, um eine Datei auszuwählen, und ich versuche, die Anzeige so einzuschränken, dass nur jpg oder jpeg Dateien angezeigt werden. Ich habe FileFilter und ChoosableFileFilter ausprobiert und es beschränkt nicht die Dateiauswahl. Hier ist mein Code:Dateitypen mit JFileChooser filtern

JFileChooser chooser = new JFileChooser(); 
FileFilter filter = new FileNameExtensionFilter("JPEG file", new String[] {"jpg", "jpeg"}); 
chooser.setFileFilter(filter); 
chooser.addChoosableFileFilter(filter); 
int returnVal = chooser.showOpenDialog(null); 
if(returnVal == JFileChooser.APPROVE_OPTION) { 
    debug.put("You chose to open this file: " + chooser.getSelectedFile().getAbsolutePath()); 
    File selectedFile = new File(chooser.getSelectedFile().getAbsolutePath()); 
... 
+2

Funktioniert gut für mich mit JDK7 unter Windows 7. Ich sehe alle Verzeichnisse. Dann werden die Dateien nach der Erweiterung gefiltert. – camickr

+0

Das gleiche für mich. Es funktioniert perfekt, JDK 7 und W7 –

Antwort

1

Versuchen und verwenden fileChooser.setFileFilter(filter) statt fileChooser.addChoosableFileFilter(filter).

0

Hier ist ein Beispielcode!

private void btnChangeFileActionPerformed(java.awt.event.ActionEvent evt) {            
     final JFileChooser fc = new JFileChooser(); 
     fc.addChoosableFileFilter(new ArffFilter()); 
     int returnVal = fc.showOpenDialog(this); 
     ... 
} 

Dann

class ArffFilter extends FileFilter { 

@Override 
public boolean accept(File file) { 
    if (file.isDirectory()) { 
     return true; 
    } 
    String fileName = file.getName(); 
    int i = fileName.lastIndexOf('.'); 

    if (i > 0 && i < fileName.length() - 1) { 
     if (fileName.substring(i + 1).toLowerCase().equals("arff")) { 
      return true; 
     } 
    } 

    return false; 
} 

    @Override 
    public String getDescription() { 
     return ".arff (Weka format)"; 
    } 
} 
5

Try this:

JFileChooser fileChooser = new JFileChooser(); 
JileChooser.setFileFilter(new FileFilter() { 

    public String getDescription() { 
     return "JPG Images (*.jpg)"; 
    } 

    public boolean accept(File f) { 
     if (f.isDirectory()) { 
      return true; 
     } else { 
      String filename = f.getName().toLowerCase(); 
      return filename.endsWith(".jpg") || filename.endsWith(".jpeg") ; 
     } 
    } 
}); 
1

Meinen Sie "es nicht um die Auswahl zu begrenzen", wie in "Es ist die Möglichkeit für jeden Dateityp erlaubt"? Wenn ja, versuchen Sie es mit JFileChooser.setAcceptAllFileFilterUsed(boolean).

chooser.setAcceptAllFileFilterUsed(false); 

Nach dem JFileChooser documentation, sollte es sie sagen nicht die all-Datei-Typen Dateifilter auf die Dateifilterliste hinzuzufügen.