10

Java プログラムでの保存と読み込みに FileDialog を使用しています。

ドロップダウン リストをフィルタリングして、ファイル タイプを「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。必要な数のファイルタイプを追加できます。

この問題の解決は、バグIDのhuxhornのコメントにあります。4031440FileDialogは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

私にとってもうまくいきません。ファイル名フィルタは、Microsoft Windows 用の Sun のリファレンス実装では機能しません。

代わりに、以下のコードを試すことができます。setFilenameFilter次の部分も削除する必要があります。

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

私は常に FileDialog の代わりに JFileChooser を使用してきました。次に、この方法でプログラムがサポートするさまざまなタイプに複数の 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
}

以下は、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 に答える