我在我的程序中放了一个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);
有什么建议吗?
答案 0 :(得分:28)
我在我的程序中放了一个JFileChooser,但这只是拍摄图片。
有关该操作系统上该JRE支持的类型列表,请使用ImageIO
。
FileFilter imageFilter = new FileNameExtensionFilter(
"Image files", ImageIO.getReaderFileSuffixes());
bmp
jpg
jpeg
wbmp
png
gif
注意:不要对该列表进行硬编码!它可能会从版本更改为版本,OS可能会更改为操作系统。例如。
答案 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]