10

我正在使用 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);
        }
4

4 回答 4

13

答案很简单。您可以使用

 saveFileDialog.setFile("*.jpg;*.jpeg");

无需使用setFilenameFilter方法。您可以添加任意数量的文件类型。

可以在huxhornBug ID: 4031440 FileDialog doesn't call FilenameFilter.accept()中的评论中找到解决此问题的方法。

public void actionPerformed(ActionEvent e) {
            FileDialog saveFileDialog = new FileDialog(new Frame(), "Save", FileDialog.SAVE);
            saveFileDialog.setFile("*.jpg;*.jpeg");
            saveFileDialog.setVisible(true);
        }
于 2012-09-24T04:28:53.070 回答
3

它对我也不起作用。文件名过滤器在 Sun 的 Microsoft Windows 参考实现中不起作用。

相反,您可以尝试以下代码。您还应该删除该setFilenameFilter部分:

saveFileDialog.setFile("*.jpg");
于 2012-09-24T03:26:48.433 回答
2

我一直使用 JFileChooser 而不是 FileDialog。然后,您可以为您的程序将以这种方式支持的各种类型添加多个 ChoosableFileFilter:

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
}

下面是我对 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;
    }
}
于 2012-09-24T03:59:43.817 回答
-1

从 Java 8 开始,您可以使用 Lambda 表达式:

fileDialog.setFilenameFilter((File dir, String name) -> name.endsWith(".html"));

于 2015-09-22T19:28:28.460 回答