我正在使用FileDialog在Java程序中保存和加载.
如何过滤下拉列表以将文件类型指定为"JPG"或"JPEG"等?
我尝试了以下代码,但似乎没有效果.
有没有其他方法可以做到这一点?
public void actionPerformed(ActionEvent e) {
FileDialog saveFileDialog = new FileDialog(new Frame(), "Save", FileDialog.SAVE);
saveFileDialog.setFilenameFilter(new FilenameFilter(){
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".jpg") || name.endsWith(".jpeg");
}
});
saveFileDialog.setFile("Untitled.jpg");
saveFileDialog.setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)
答案很简单.您可以使用
saveFileDialog.setFile("*.jpg;*.jpeg");
Run Code Online (Sandbox Code Playgroud)
无需使用setFilenameFilter方法.您可以添加任意数量的文件类型.
解决这个问题可以在huxhorn的Bug ID中找到:4031440 FileDialog不调用FilenameFilter.accept().
public void actionPerformed(ActionEvent e) {
FileDialog saveFileDialog = new FileDialog(new Frame(), "Save", FileDialog.SAVE);
saveFileDialog.setFile("*.jpg;*.jpeg");
saveFileDialog.setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)
我一直使用 JFileChooser 而不是 FileDialog。然后,您可以为您的程序支持的各种类型添加多个 ChoosableFileFilters:
File myFilename;
chooser = new JFileChooser();
chooser.addChoosableFileFilter(new OpenFileFilter("jpeg","Photo in JPEG format") );
chooser.addChoosableFileFilter(new OpenFileFilter("jpg","Photo in JPEG format") );
chooser.addChoosableFileFilter(new OpenFileFilter("png","PNG image") );
chooser.addChoosableFileFilter(new OpenFileFilter("svg","Scalable Vector Graphic") );
int returnVal = chooser.showSaveDialog(mainWindow);
if (returnVal == JFileChooser.APPROVE_OPTION) {
myFilename = chooser.getSelectedFile();
//do something with the file
}
Run Code Online (Sandbox Code Playgroud)
下面是我的 FileFilter 实现。
/**
* This class defines which file types are displayed (by default) by the JFileChooser and what file
* types appear in the drop down menu in the file dialog.
* You could add more than one file type to the open file dialog by creating multiple instances of this
* class and then repeatedly calling addFileFilter.
* @author LaSpina
*/
import java.io.File;
import javax.swing.filechooser.*;
public class OpenFileFilter extends FileFilter {
String description = "";
String fileExt = "";
public OpenFileFilter(String extension) {
fileExt = extension;
}
public OpenFileFilter(String extension, String typeDescription) {
fileExt = extension;
this.description = typeDescription;
}
@Override
public boolean accept(File f) {
if (f.isDirectory())
return true;
return (f.getName().toLowerCase().endsWith(fileExt));
}
@Override
public String getDescription() {
return description;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21289 次 |
| 最近记录: |