17

我想限制 aJFileChooser只选择 mp3 文件。但是,以下代码允许所有文件类型:

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

5 回答 5

28

尝试使用fileChooser.setFileFilter(filter)而不是fileChooser.addChoosableFileFilter(filter);

于 2013-12-05T22:40:53.417 回答
18

如果您只想要 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);

    }
}
于 2013-12-05T22:34:12.283 回答
9

尝试:

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

第一个参数只是对FileNameExtensionFilter- 的描述,由于第二个参数是 var args,您可以像以前一样将其省略,这实际上意味着没有过滤器。

于 2013-12-05T22:29:33.497 回答
4

fileChooser.addChoosableFileFilter(filter)将自定义文件过滤器添加到用户可选择的过滤器列表中。默认情况下,用户可选择的过滤器列表包括Accept All 过滤器,它使用户能够查看所有非隐藏文件

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

确定setAcceptAllFileFilterUsed(boolean)AcceptAll FileFilter 是否用作可选过滤器列表中的可用选项。如果false,则从可用文件过滤器列表中删除 AcceptAll 文件过滤器。如果true,AcceptAll 文件过滤器将成为主动使用的文件过滤器。

于 2013-12-05T23:04:43.417 回答
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();
}
于 2013-12-05T22:30:44.917 回答