FileChooser.java
package imageFilter;
import java.awt.Component;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
* JFileChooserを継承し拡張する,ファイル選択ダイアログ * * 主にPNG画像の入出力を目的とするダイアログオブジェクトである.画像ファイルの選択とデータの取得,画像ファイルの書き出しのほか, * ファイルの拡張子の確認も行う. * * @author Kogure Moriaki * @version 0.0.1 */
public class FileChooser extends JFileChooser {
/** * 直列化用のIDを定義(警告回避のため) */ private static final long serialVersionUID = 1L;
/** * ファイルを指定しない場合のコンストラクタ * * カレントディレクトリは,絶対パスで「C:¥」で指定する. */ public FileChooser() {
super(new File("C:¥"));
FileFilter filter = new FileNameExtensionFilter("PNGファイル", "png"); this.setFileFilter(filter); }
/** * フィアルを指定する場合のコンストラクタ * * @param file * JFileChooserにおいて,カレントディレクトリを指定するための変数 */ public FileChooser(File file) {
super(file);
FileFilter filter = new FileNameExtensionFilter("PNGファイル", "png"); this.setFileFilter(filter); }
/** * ファイルを選択し,PNG画像を取得するメソッド * * 返される画像はPNG画像のファイルであること,返り値にnullがないことを保証する. * * @param parent * ファイル選択ダイアログを表示するコンポーネント * @return 取得した画像 */ public BufferedImage getImage(Component parent) {
BufferedImage image = null;
int option = showOpenDialog(parent);
if (option == APPROVE_OPTION) {
File file = getSelectedFile();
// ファイルのエラー処理 if (getFileSuffix(file) == null | | getFileSuffix(file).compareTo("png") != 0) { JOptionPane.showMessageDialog(this, "対応しているファイルはPNG画像ファイルです\n拡張子が「.png」のファイルを選択してください", "ERROR", JOptionPane.ERROR_MESSAGE); System.exit(ERROR); }
// ファイルから画像データを取得 try { image = ImageIO.read(file); if (image == null) { JOptionPane.showMessageDialog(this, "選択したファイルから画像が取得できませんでした\n画像が破損している可能性があります", "ERROR", JOptionPane.ERROR_MESSAGE); System.exit(ERROR); } } catch (IOException e) { System.err.println(e.getMessage()); System.exit(ERROR); }
} else if (option == CANCEL_OPTION) { JOptionPane.showMessageDialog(this, "ファイルが選択されなかったため,プロセスを終了します", "INFORMATION", JOptionPane.INFORMATION_MESSAGE); System.exit(ERROR); }
return image; }
/** * 引数の画像を指定したファイルに保存するメソッド * * @param parent * ファイル選択ダイアログを表示するコンポーネント * @param image * 保存する画像 */ public void saveImage(Component parent, BufferedImage image) {
int option = showSaveDialog(parent);
if (option == APPROVE_OPTION) {
try { File file = getSelectedFile(); OutputStream out; if (getFileSuffix(file) != null && getFileSuffix(file).compareTo("png") == 0) out = new FileOutputStream(file); else if (getFileSuffix(file) == null) out = new FileOutputStream(new File(file.getName() + ".png")); else { JOptionPane.showMessageDialog(this, "対応するファイルはPNG画像ファイルです\n拡張子を「.png」で指定してください", "ERROR", JOptionPane.ERROR_MESSAGE); return; } ImageIO.write(image, "PNG", out); } catch (IOException e) { System.err.println(e.getMessage()); System.exit(ERROR); } } }
/** * ファイルの拡張子を取得する関数 * * ファイルがnullの場合や,拡張子が存在しない場合,nullを返す. * * @param file * 拡張子を取得するファイル * @return ファイルの拡張子 */ private static String getFileSuffix(File file) {
if (file == null) return null; int pointIndex = file.getName().lastIndexOf('.'); return pointIndex != -1 ? file.getName().substring(pointIndex + 1) : null; }
}
- 最終更新:2017-06-12 14:00:57