アプリケーションに「名前を付けて保存」というメソッドがあり、コンピューター上のアプリケーションの画像をファイルに保存します。 JFileChooserを使用して、ユーザーがファイルを保存する場所を選択できるようにしました。問題は、ユーザーがファイル形式を明示的に入力しない限り、拡張子なしでファイルを保存することです。 [ファイルタイプ]ドロップダウンメニューでjpg、pngなどの形式を使用するにはどうすればよいですか。
また、画像ファイルを保存するために[ファイルタイプ]ドロップメニューから拡張子を取得するにはどうすればよいですか。
ImageIO.write(image,extension,file);
最後に、私は自分の問題を解決しました:
JFileChooser fc = new JFileChooser("C:/");
fc.addChoosableFileFilter(new JPGSaveFilter());
fc.addChoosableFileFilter(new JPEGSaveFilter());
fc.addChoosableFileFilter(new PNGSaveFilter());
fc.addChoosableFileFilter(new GIFSaveFilter());
fc.addChoosableFileFilter(new BMPSaveFilter());
fc.addChoosableFileFilter(new WBMPSaveFilter());
int retrieval = fc.showSaveDialog(null);
if (retrieval == JFileChooser.APPROVE_OPTION) {
String ext = "";
String extension = fc.getFileFilter().getDescription();
if (extension.equals("*.jpg,*.JPG")) {
ext = ".jpg";
} else if (extension.equals("*.png,*.PNG")) {
ext = ".png";
} else if (extension.equals("*.gif,*.GIF")) {
ext = ".gif";
} else if (extension.equals("*.wbmp,*.WBMP")) {
ext = ".wbmp";
} else if (extension.equals("*.jpeg,*.JPEG")) {
ext = ".jpeg";
} else if (extension.equals("*.bmp,*.BMP")) {
ext = ".bmp";
}
}
フィルタの例:
package example
import Java.io.File;
import javax.swing.filechooser.FileFilter;
class JPGSaveFilter extends FileFilter {
@Override
public boolean accept(File f) {
if (f.isDirectory()) {
return false;
}
String s = f.getName().toLowerCase();
return s.endsWith(".jpg");
}
@Override
public String getDescription() {
return "*.jpg,*.JPG";
}
}
ファイルチューザーフィルターを準備します。
jFileChooser.addChoosableFileFilter(new FileNameExtensionFilter("File X (.xxx)", "xxx"));
jFileChooser.addChoosableFileFilter(new FileNameExtensionFilter("File Y (.yyy)", "yyy"));
jFileChooser.addChoosableFileFilter(new FileNameExtensionFilter("File Z (.zzz)", "zzz"));
// set default type
jFileChooser.setFileFilter(jFileChooser.getChoosableFileFilters()[0]);
// set default file
jFileChooser().setSelectedFile(defaultFile);
検証を承認した後
//Add extension to Selected file
File file = new File(jFileChooser().getSelectedFile().getCanonicalPath() + "." + ((FileNameExtensionFilter) jFileChooser().getFileFilter()).getExtensions()[0]);
選択したファイルに拡張子が付いているかどうかを検証することをお勧めします。
JFileChoose.SetFileFilterの例を使用します: http://www.Java2s.com/Code/JavaAPI/javax.swing/JFileChoosersetFileFilterFileFilterfilter.htm
私はより良い解決策を得たと思います。サンプルコードフラグメントで説明します。
これは私がファイルフィルターを設定する方法です:jFileChooser.setFileFilter(new FileNameExtensionFilter(".txt", "txt"));
。
この後、主な節約ライン:textArea1.write(new BufferedWriter(new FileWriter(jFileChooser.getSelectedFile().getAbsolutePath() + jFileChooser.getFileFilter().getDescription().replace("All Files", ""))));
。
もちろん、最も重要なのは次のフラグメントです:jFileChooser.getSelectedFile().getAbsolutePath() + jFileChooser.getFileFilter().getDescription().replace("All Files", "")
。
私が気に入らないのは、「getExtension」のようなメソッドが見つからなかったことだけです。つまり、文字列に不必要な問題がなければ、Niceの説明を作成することはできません。
はい、わかった。あなたはそのようなことをすることができます:jFileChooser.getFileFilter().toString().replaceFirst(".*extensions=\\[(.*)]]", ".$1").replaceFirst(".*AcceptAllFileFilter.*", "")
。
残念ながら、それほど美しくはありませんが、魅力のように機能しているようです。