TITLE:JFileChooserを開いたままファイルの上書き警告ダイアログを表示する
Posted by aterai at 2012-07-02

JFileChooserを開いたままファイルの上書き警告ダイアログを表示する

JFileChooserで名前を付けて保存する場合、すでに存在するファイルを選択してセーブボタンを押すと上書き警告ダイアログを表示するように設定します。
  • category: swing folder: FileAlreadyExistsDialog title: JFileChooserを開いたままファイルの上書き警告ダイアログを表示する tags: [JFileChooser, JOptionPane] author: aterai pubdate: 2012-07-02T17:20:50+09:00 description: JFileChooserで名前を付けて保存する場合、すでに存在するファイルを選択してセーブボタンを押すと上書き警告ダイアログを表示するように設定します。 image: https://lh6.googleusercontent.com/-77H8Wl7UgV0/T_E-hZznv2I/AAAAAAAABOo/RIVqWmchCfw/s800/FileAlreadyExistsDialog.png hreflang:
       href: https://java-swing-tips.blogspot.com/2012/08/jfilechooser-with-file-already-exists.html
       lang: en

概要

JFileChooserで名前を付けて保存する場合、すでに存在するファイルを選択してセーブボタンを押すと上書き警告ダイアログを表示するように設定します。
FileAlreadyExistsDialog.png

サンプルコード

#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
JFileChooser fileChooser = new JFileChooser() {
  @Override public void approveSelection(){
  @Override public void approveSelection() {
    File f = getSelectedFile();
    if(f.exists() && getDialogType() == SAVE_DIALOG) {
    if (f.exists() && getDialogType() == SAVE_DIALOG) {
      String m = String.format(
          "<html>%s already exists.<br>Do you want to replace it?",
          f.getAbsolutePath());
      int rv = JOptionPane.showConfirmDialog(
          this, m, "Save As", JOptionPane.YES_NO_OPTION);
      if(rv!=JOptionPane.YES_OPTION) {
      if (rv != JOptionPane.YES_OPTION) {
        return;
      }
    }
    super.approveSelection();
  }
};

解説

上記のサンプルでは、ユーザーがSaveボタンをクリックした時に呼び出される JFileChooser#approveSelection() をオーバーライドし、選択されているファイルがすでに存在する場合は、上書きしても良いかを確認するConfirmDialogをJFileChooserを親にして呼び出しています。Yesの場合は、super.approveSelection() を実行して結果を返してJFileChooserを閉じる、Noの場合は、なにもせずにJFileChooserに戻ります。

解説

  • JFileChooserSaveボタンをクリックした時に呼び出されるJFileChooser#approveSelection()メソッドをオーバーライドし、選択されているファイルがすでに存在するかどうかをチェック
    • ファイルが存在しない場合は通常のJFileChooserの処理を実行
    • 存在する場合は上書きしても良いかを確認するConfirmDialogJFileChooserを親にして呼び出し
  • ConfirmDialogYesをクリック
    • super.approveSelection()を実行して結果を返してJFileChooserを閉じる
    • 上記のサンプルでは、このボタンをクリックしても選択しているファイル名をコンソールに出力するだけで実際にそのファイルを保存したり上書きする機能は実装していない
  • ConfirmDialogNoをクリック
    • なにもせずにJFileChooserに戻る

参考リンク

参考リンク

コメント

コメント