使用JFileChooser过滤文件类型

12

我正在使用JFileChooser选择文件,尝试限制显示仅为jpg或jpeg文件。我已经尝试使用FileFilter和ChoosableFileFilter来限制文件选择,但它并没有起到作用。以下是我的代码:

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
我也一样。它在JDK 7和W7上完美运行。 - Gianluca Pasqualato
5个回答

13

试试这个:

import javax.swing.JFileChooser;


JFileChooser fileChooser = new JFileChooser();
fileChooser.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") ;
       }
   }
});

2

您的意思是“它不会限制选择”,就是允许任何文件类型的选项吗?如果是这样,请尝试使用JFileChooser.setAcceptAllFileFilterUsed(boolean)

chooser.setAcceptAllFileFilterUsed(false);

根据JFileChooser文档,它应该告诉它不要将所有文件类型的文件过滤器添加到文件过滤器列表中。请注意保留HTML标签。

1

我相信现代Java在设置时会添加过滤器,如果它尚未在列表中。 - shieldgenerator7

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)";
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接