Java JFileChooser过滤器

Java JFileChooser过滤器,java,image,swing,jfilechooser,jai,Java,Image,Swing,Jfilechooser,Jai,我在我的程序中放置了一个JFileChooser,但它只拍摄图像。因此,我决定添加过滤器: 代码 我直接从Java教程中了解到了这一点。但Eclipse强调以下错误: fc.addChoosableFileFilter(new ImageFilter()); fc.setAcceptAllFileFilterUsed(false); 有什么建议吗?您使用了错误的ImageFiler类:-) 教程中的ImageFilter不是来自您正在导入的java.awt包。 此ImageFilter必须实现

我在我的程序中放置了一个
JFileChooser
,但它只拍摄图像。因此,我决定添加过滤器:

代码 我直接从Java教程中了解到了这一点。但Eclipse强调以下错误:

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

有什么建议吗?

您使用了错误的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";
        }

    });

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

fc.addChoosableFileFilter(new FileNameExtensionFilter("Image Files", "jpg", "png", "tif");
我在我的程序中放了一个JFileChooser,但它只拍摄图像

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

看到的类型-Java 1.6/Windows 7 注意:不要硬编码该列表!它可能会随着版本和操作系统的不同而变化。例如

  • 我对Windows支持加载BMP并不感到惊讶,但这在Mac中出现了吗
  • 看到这一点让我意识到了这种格式的存在 如果安装了,该列表将有更多的格式

    在选择器中显示时进行筛选 我正在使用setFileFilter()

    下面是我的代码(JAVA-JSE1.6)


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

    现在在你的主课上:

    fc.setFileFilter(new ImageFilter());
    
    接受的答案(将FileNameExtensionFilter与ImageIO.GetReaderFileSuffix()一起使用)存在一些问题

    在我的系统(Ubuntu上的jdk1.8.0192)上,ImageIO.GetReaderFileSuffix()返回如下数组:

    [, 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);
    
    另一方面,在2019-01-15版本为openjdk“11.0.2”的同一系统上,我得到了以下扩展:

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

    错误是??我通常使用
    JFileChooser#setFileFilter(..)
    ImageFilter
    包含在
    java.awt.image.ImageFilter
    中,您没有导入它,只是将上面的一些代码放在一起,但我在真实代码中导入了java。抱歉给你添麻烦了!下面是您要查找的类:注意,在本例中,这与.JPG扩展不匹配。假设您在一个不区分大小写的文件系统上,您应该改为执行
    f.getName().toLowerCase().endsWith(“.jpg”)
    。这排除了Windows上的目录,您应该使用
    FileNameExtensionFilter
    我想我错过了导入部分。。。你不这么认为吗?
    fc.setFileFilter(new ImageFilter());
    
    [, jpg, tiff, bmp, pcx, gif, png, ppm, tif, pgm, wbmp, jpeg, pbm]
    
    IllegalArgumentException: Each extension must be non-null and not empty
    
    String[] extensions = ArrayUtils.removeAllOccurences(ImageIO.getReaderFileSuffixes(), "");
    FileFilter filter = new FileNameExtensionFilter("Images", extensions);
    
    [jpg, tif, tiff, bmp, gif, png, wbmp, jpeg]