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
注意:不要硬编码该列表!它可能会随着版本和操作系统的不同而变化。例如
您可以使用
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]