以编程方式为 JFileChooser 设置文件过滤器

Posted

技术标签:

【中文标题】以编程方式为 JFileChooser 设置文件过滤器【英文标题】:Programmatically Setting Up File Filter for JFileChooser 【发布时间】:2018-12-27 20:08:07 【问题描述】:

我目前正在尝试通过使用数组(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

文件类型.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;
    */


一切(几乎)工作,但我不知道如何将扩展合并到一个描述中(即它重复描述,但使用不同的扩展过滤器)。 image here.

虽然确实使用了可变参数,但我似乎找不到在 for 循环中一次传递多个值的方法

【问题讨论】:

【参考方案1】:

好吧,我真是个笨蛋。 这就是答案:

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);

我上次做的是遍历扩展数组,这使得程序一个接一个地传递值。

【讨论】:

以上是关于以编程方式为 JFileChooser 设置文件过滤器的主要内容,如果未能解决你的问题,请参考以下文章

使用 JFileChooser 过滤文件类型

以编程方式将资源加载为字节数组

Swing-JFileChooser的使用

JFileChooser - 设置固定文件名

如何以编程方式在 iphone 中将音乐文件设置为通话音和消息音

如何将setOnClickListener设置为以编程方式添加的TextView?