以编程方式为 JFileChooser 设置文件过滤器
Programmatically Setting Up File Filter for JFileChooser
我目前正在尝试通过使用数组(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;
}*/
}
一切(几乎)都有效,但我不知道如何将扩展合并到一个描述中(即重复描述,但使用不同的扩展过滤器)。
image here.
虽然使用了可变参数,但我似乎找不到在 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);
}
我上次做的是遍历扩展数组,让程序一个一个传值
我目前正在尝试通过使用数组(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;
}*/
}
一切(几乎)都有效,但我不知道如何将扩展合并到一个描述中(即重复描述,但使用不同的扩展过滤器)。 image here.
虽然使用了可变参数,但我似乎找不到在 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);
}
我上次做的是遍历扩展数组,让程序一个一个传值