下午好,
我有一个javax.swing.JFileChooser的实例,我使用javax.swing.FileFilter添加了一些可选的addChoosableFileFilter。
但是,当我显示对话框(通过showSaveDialog)时,默认情况下不会选择我的自定义可选择FileFilter。
我想默认选择过滤器“Image Files”。
我们如何为javax.swing.JFileChooser对话框选择默认过滤器?
SSCCEd:
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new java.lang.Runnable() {
@Override
public void run() {
new javax.swing.JFrame() {
{
final javax.swing.JButton button = new javax.swing.JButton("Save");
button.addMouseListener(new java.awt.event.MouseAdapter() {
@Override
public void mousePressed(java.awt.event.MouseEvent e) {
new javax.swing.JFileChooser() {
{
addChoosableFileFilter(NewFileFilter("Text Files", new String[] { "txt" }));
addChoosableFileFilter(NewFileFilter("Image Files", new String[] { "gif", "png", "jpg" }));
addChoosableFileFilter(NewFileFilter("Audio Files", new String[] { "mp3" }));
addChoosableFileFilter(NewFileFilter("Video Files", new String[] { "mp4", "avi" }));
showSaveDialog(button);
}
private javax.swing.filechooser.FileFilter NewFileFilter(final String desc, final String[] allowed_extensions) {
return new javax.swing.filechooser.FileFilter() {
@Override
public boolean accept(java.io.File f) {
if (f.isDirectory()) {
return true;
}
int pos = f.getName().lastIndexOf('.');
if (pos == -1) {
return false;
} else {
String extension = f.getName().substring(pos + 1);
for (String allowed_extension : allowed_extensions) {
if (extension.equalsIgnoreCase(allowed_extension)) {
return true;
}
}
return false;
}
}
@Override
public String getDescription() {
return desc;
}
};
}
};
}
});
add(button);
setSize(100, 100);
setVisible(true);
}
};
}
});
}
答案 0 :(得分:13)
FileFilter ff = NewFileFilter("Image Files", new String[] { "gif", "png", "jpg" });
addChoosableFileFilter(ff);
setFileFilter(ff);
为什么要对文件选择器进行子类化,而不仅仅是使用它?为什么不尊重Java的命名约定(方法以小写字母开头)?为什么不尊重Swing的线程策略,它说Swing组件只能在EDT中使用。
答案 1 :(得分:0)
FileFilter filter = new FileNameExtensionFilter("Data Files", "*.dat");
JFileChooser fc = new JFileChooser();
fc.addChoosableFileFilter(filter);
fc.setMultiSelectionEnabled(false);