2013-10-10 176 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.setFileFilter(filter),而不是fileChooser.addChoosableFileFilter(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,应该告诉它不要到所有文件类型的文件过滤器添加到文件筛选器列表。