2013-10-10 2 views
7

JFileChooserを使用してファイルを選択していますが、jpgまたはjpegファイルのみを表示するように制限しようとしています。 FileFilterとChoosableFileFilterを試してみましたが、ファイルの選択に制限はありません。JFileChooserでフィルタするファイルタイプ

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

Windows 7でJDK7を使用しても問題なく動作します。すべてのディレクトリが表示されます。その後、ファイルは拡張子でフィルタリングされます。 – camickr

+0

私と同じです。それは完全に動作します、JDK 7とW7 –

答えて

1

しようとすると、代わりにfileChooser.addChoosableFileFilter(filter)fileChooser.setFileFilter(filter)を使用します。ここに私のコードです。

0

はサンプルコードです:

はここで良い例とのリンクです!

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

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

これを試してみてください:

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

あなたは「それは、任意のファイルの種類のオプションが可能だ」のように「それは選択を制限していない」を意味するのですか?その場合は、JFileChooser.setAcceptAllFileFilterUsed(boolean)を試してください。

chooser.setAcceptAllFileFilterUsed(false); 

JFileChooser documentationによれば、ファイルフィルタリストにすべてのファイル・タイプのファイルフィルタを追加しないことを教えてください。