JFileChooser的文件过滤器

20

我想限制一个JFileChooser只能选择MP3文件。但是,下面的代码允许选择所有类型的文件:

FileFilter filter = new FileNameExtensionFilter("MP3 File","mp3");
fileChooser.addChoosableFileFilter(filter);
fileChooser.showOpenDialog(frame);
File file = fileChooser.getSelectedFile();

没有尝试过,但根据构造函数的Javadoc,第一个参数只是过滤器的名称;接受的扩展名从第二个参数开始。 - tobias_k
我也试过那个,但它不起作用! - dev
5个回答

30

尝试使用fileChooser.setFileFilter(filter)代替fileChooser.addChoosableFileFilter(filter);


20

如果你只想要 MP3 文件:

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

public class SalutonFrame {

    public static void main(String[] args) {
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setAcceptAllFileFilterUsed(false);
        FileNameExtensionFilter filter = new FileNameExtensionFilter("MPEG3 songs", "mp3");
        fileChooser.addChoosableFileFilter(filter);
        fileChooser.showOpenDialog(null);

    }
}

终于有一个对我实际有效的解决方案了 - 已点赞,谢谢! - qraqatit

9

尝试:

FileFilter filter = new FileNameExtensionFilter("My mp3 description", "mp3");

第一个参数仅仅是对FileNameExtensionFilter的描述 - 由于第二个参数是var args,因此您可以像之前那样省略它,这意味着没有任何过滤器。


4

fileChooser.addChoosableFileFilter(filter)方法将自定义文件过滤器添加到可供用户选择的过滤器列表中。默认情况下,可供用户选择的过滤器列表包括“接受所有”过滤器,该过滤器允许用户查看所有非隐藏文件。

您需要调用:fileFilter.setAcceptAllFileFilterUsed(false)

setAcceptAllFileFilterUsed(boolean)方法确定是否在可选择的过滤器列表中使用“接受所有”文件过滤器。如果为false,则从可用文件过滤器列表中删除“接受所有”文件过滤器。如果为true,则“接受所有”文件过滤器将成为主动使用的文件过滤器。


谢谢!只是一句话:setAcceptAllFileFilterUsed() 属于 JFileChooser 类 ;) - Gordak

3
这段代码片段可能会对你有所帮助:
JFileChooser jfc=new JFileChooser(System.getProperty("user.dir","."));

FileFilter ff = new FileFilter(){
    public boolean accept(File f){
        if(f.isDirectory()) return true;
        else if(f.getName().endsWith(".mp3")) return true;
            else return false;
    }
    public String getDescription(){
        return "MP3 files";
    }
};

jfc.removeChoosableFileFilter(jfc.getAcceptAllFileFilter());
jfc.setFileFilter(ff);

if(jfc.showDialog(frame,"openG")==JFileChooser.APPROVE_OPTION){
        String fileName = jfc.getSelectedFile().getPath();
}

2
这个功能已经在“FileNameExtensonFilter”类中构建完成了... - Sinkingpoint

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接