Java 以编程方式为JFileChooser设置文件筛选器

Java 以编程方式为JFileChooser设置文件筛选器,java,arrays,jfilechooser,filefilter,Java,Arrays,Jfilechooser,Filefilter,我目前正试图通过使用数组(1D表示描述,2D表示扩展名)添加文件过滤器,如下所示: void findFile(){ chooser = new JFileChooser(); chooser.setCurrentDirectory(new java.io.File(".")); chooser.setDialogTitle("Choose file to upload"); chooser.setFileSelectionMode(JFileChooser.FI

我目前正试图通过使用数组(1D表示描述,2D表示扩展名)添加文件过滤器,如下所示:

void findFile(){
    chooser = new JFileChooser();
    chooser.setCurrentDirectory(new java.io.File("."));
    chooser.setDialogTitle("Choose file to upload");
    chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    chooser.setAcceptAllFileFilterUsed(true);

    ft = new FileType(this.chooser);
... //rest of code
}
FileType.java

package function;

import java.io.FileFilter;

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

public class FileType {

    private String[] desc = {
        "Word Document (.doc, .docx)", "Excel Document (.xlsx, .xls)"
    };

    private String[][] ext = {
            {"doc", "docx"}, {"xlsx", "xls"}    
    };

    public int counts = desc.length;

    FileNameExtensionFilter fe;
    JFileChooser session;

    public FileType(JFileChooser session){
        this.session = session;

        generateCode();
    }

    void generateCode(){
        for(int i = 0; i < counts; i++){
            for(String pass : ext[i]){
                System.out.println(pass);
                generateFileType(desc[i], pass);    
            }
        }
    }

    public void generateFileType(String a, String...b){

        for(String x : b){
            fe = new FileNameExtensionFilter(a, x);
        }

        session.addChoosableFileFilter(fe);
    }

    /*public JFileChooser generateFilter(JFileChooser a){
        generateCode();
        for(int i = 0; i < counts; i++){
            a.addChoosableFileFilter(fe);
        }

        return a;
    }*/

}
封装功能;
导入java.io.FileFilter;
导入javax.swing.JFileChooser;
导入javax.swing.filechooser.FileNameExtensionFilter;
公共类文件类型{
私有字符串[]描述={
Word文档(.doc、.docx)”,“Excel文档(.xlsx、.xls)”
};
专用字符串[][]扩展={
{“doc”,“docx”},{“xlsx”,“xls”}
};
公共整数计数=描述长度;
FileNameExtensionFilter fe;
JFileChooser会话;
公共文件类型(JFileChooser会话){
this.session=会话;
生成代码();
}
无效生成代码(){
对于(int i=0;i
一切(几乎)都正常,但我不知道如何将扩展合并到一个描述中(即,它重复描述,但使用不同的扩展过滤器)。


虽然使用了varargs,但我似乎找不到一种方法在
for
循环中一次传递多个值。 答案是:

void generateCode(){
    for(int i = 0; i < counts; i++){
        generateFileType(desc[i], ext[i]);  

    }
}

public void generateFileType(String a, String...b){
        fe = new FileNameExtensionFilter(a, b);


    session.addChoosableFileFilter(fe);
}
void generateCode(){
对于(int i=0;i
我上次做的是迭代扩展数组,这使得程序一个接一个地传递值