如何在FileDialog中过滤文件类型?

Z.p*_*yyy 7 java filedialog

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

swe*_*mon 8

答案很简单.您可以使用

 saveFileDialog.setFile("*.jpg;*.jpeg");
Run Code Online (Sandbox Code Playgroud)

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

解决这个问题可以在huxhornBug 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)


Tho*_*orn 2

我一直使用 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)