JFileChooser过滤器

时间:2012-11-22 17:43:33

标签: java image swing jfilechooser

我在我的程序中放了一个JFileChooser,但这只是拍摄图像。所以我决定添加过滤器:

代码

import javax.swing.*;

public class fileChooser {

 public static void main(String[] args) {
    JPanel panel = new JPanel();

    final JFileChooser fc = new JFileChooser();
    int file = fc.showOpenDialog(panel);
    fc.addChoosableFileFilter(new ImageFilter());
    fc.setAcceptAllFileFilterUsed(false);
 }
}

我直接从Java教程那里得到了。但是Eclipse强调了以下错误:

fc.addChoosableFileFilter(new ImageFilter());
fc.setAcceptAllFileFilterUsed(false);

有什么建议吗?

6 个答案:

答案 0 :(得分:28)

  

我在我的程序中放了一个JFileChooser,但这只是拍摄图片。

有关该操作系统上该JRE支持的类型列表,请使用ImageIO

FileFilter imageFilter = new FileNameExtensionFilter(
    "Image files", ImageIO.getReaderFileSuffixes());

看到的类型 - Java 1.6 / Windows 7

bmp
jpg
jpeg
wbmp
png
gif

注意:不要对该列表进行硬编码!它可能会从版本更改为版本,OS可能会更改为操作系统。例如。

  1. 我对Windows支持加载BMP并不感到惊讶,但这是否会出现在Mac上?
  2. 看到WBMP提醒我存在这样的格式!
  3. 如果安装了,该列表会有更多格式。

    在选择器中显示的过滤器

    Image Chooser

答案 1 :(得分:7)

fc.addChoosableFileFilter()的参数应该是javax.swing.filechooser.FileFilter的子类。例如,您可以将代码更改为

fc.addChoosableFileFilter(new FileNameExtensionFilter("Image Files", "jpg", "png", "tif");

答案 2 :(得分:4)

我正在使用setFileFilter()。

我的代码在下面(JAVA-JSE 1.6)

JFileChooser c = new JFileChooser();
//Setting Up The Filter
FileFilter imageFilter = new FileNameExtensionFilter(
    "Image files", ImageIO.getReaderFileSuffixes());

//Attaching Filter to JFileChooser object
c.setFileFilter(imageFilter);

//Displaying Filechooser
int rVal = c.showOpenDialog(new JPanel());

答案 3 :(得分:2)

您使用的是错误的ImageFiler类: - )

教程中的ImageFilter不是来自您要导入的java.awt包。 此ImageFilter必须实现javax.swing.filechooser.FileFilter。

请检查教程中是否定义了其他ImageFilter类并使用它。

正确的文件过滤器示例:

new JFileChooser().addChoosableFileFilter(new FileFilter() {

        @Override
        public boolean accept(File f) {
            // TODO Auto-generated method stub
            return f.getName().endsWith(".jpg");
        }

        @Override
        public String getDescription() {
            return "JPEG files";
        }

    });

答案 4 :(得分:1)

您可以使用FileFilter课程,然后使用setFileFilter()

class ImageFilter extends FileFilter {

@Override
public boolean accept(File pathname) {
  String filename = pathname.getName();
  if (pathname.isDirectory()) {
    return true;

  } else if (filename.endsWith("jpg'") || filename.endsWith("jpeg") || filename.endsWith("png") || filename.endsWith("gif")) {
    return true;
  } else {
    return false;
  }
}

现在在你的主要课程中:

fc.setFileFilter(new ImageFilter());

答案 5 :(得分:1)

可接受的答案(将FileNameExtensionFilter与ImageIO.getReaderFileSuffixes()一起使用)存在一些问题。

在我的系统上(在Ubuntu上为jdk1.8.0_192)ImageIO.getReaderFileSuffixes()返回如下数组:

[, jpg, tiff, bmp, pcx, gif, png, ppm, tif, pgm, wbmp, jpeg, pbm]

请注意第一个空字符串。此字符串在FileNameExtensionFilter中无效:

IllegalArgumentException: Each extension must be non-null and not empty

对此的一种解决方案是使用Apache commons-lang删除空字符串:

String[] extensions = ArrayUtils.removeAllOccurences(ImageIO.getReaderFileSuffixes(), "");
FileFilter filter = new FileNameExtensionFilter("Images", extensions);

附带说明-在具有openjdk版本“ 11.0.2”的同一系统上,2019年1月15日,我得到了这些扩展名:

[jpg, tif, tiff, bmp, gif, png, wbmp, jpeg]