JFileChooser的过滤器(JFileChooser filters)

2019-06-21 06:26发布

我把一个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);

有什么建议?

Answer 1:

我把一个JFileChooser在我的程序,但只需要图像。

对于由OS上的JRE支持的类型列表,使用ImageIO

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

类型见过 - Java的1.6 / Windows 7的

bmp
jpg
jpeg
wbmp
png
gif

注意:不要硬代码列表! 它可能因版本,以及OS更改为OS。 例如

  1. 我并不感到惊讶,Windows已经支持加载BMP,但这是否拿出一个苹果?
  2. 眼看WBMP提醒我这样的格式的存在!

这份名单将有更多的格式,如果JAI安装。

过滤器,因为它出现在选配



Answer 2:

的参数fc.addChoosableFileFilter()应的子类javax.swing.filechooser.FileFilter 。 例如,你可以改变你的代码

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


Answer 3:

我使用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());


Answer 4:

您正在使用错误的ImageFiler类:-)

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

请检查是否有在教程中定义的其他ImageFilter类,并使用它。

适当的FileFilter的实施例:

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

    });


Answer 5:

您可以使用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());


文章来源: JFileChooser filters