- PR -

JFileChooserのファイル保存ダイアログについて

1
投稿者投稿内容
アネゴ
会議室デビュー日: 2005/02/22
投稿数: 4
お住まい・勤務地: 東京
投稿日時: 2005-02-22 21:19
こんにちは
初めて質問させていただきます。

現在ファイル保存の時に使うJFileChooserの挙動に悩んでいます。

やりたいことは、ファイル保存ダイアログでファイルタイプに2種類のフィルターを設定し、
ファイル名のところにデフォルトのファイル名を表示させておく、というものです。
ファイル名はダイアログ表示時に表示させることができたのですが、ファイルタイプを変えるとファイル名が消えてしまいます。
Windowsのダイアログのようにファイルタイプを変えてもファイル名は消さないようにしたいのですが……

ダイアログ表示時のファイル名設定は以下のような方法で行いました。
JFileChooser fileChooser = new JFileChooser();
BasicFileChooserUI ui = (BasicFileChooserUI) fileChooser.getUI();
ui.setFileName("test.txt");

知っているかた、よろしくお願いします。
パテ太
ベテラン
会議室デビュー日: 2004/08/16
投稿数: 64
お住まい・勤務地: 千葉・東京
投稿日時: 2005-02-22 22:54
パテ太と申します。
JFileChooser が複数ファイル選択不可の状態で
setFileFilter メソッドが呼ばれると
選択ファイル名はクリアされるようです。

JFileChooser クラスを派生して
setFileFilter メソッドの中で
コード:
setFileFilter(FileFilter filter) {
  super.setFileFilter(filter);
  setSelectedFile(new File("デフォルトディレクトリ名", "デフォルトファイル名"));
}


ではだめでしょうか?
アネゴ
会議室デビュー日: 2005/02/22
投稿数: 4
お住まい・勤務地: 東京
投稿日時: 2005-02-23 09:57
パテ太さん

なるほど、そういうことでしたか。
教えていただいた方法を使っていろいろいじってみます。
アネゴ
会議室デビュー日: 2005/02/22
投稿数: 4
お住まい・勤務地: 東京
投稿日時: 2005-02-23 11:18
この方法を使っていろいろやってみましたがまだダメです……
こことは別のタイミングでファイル名が消されているようですね。
もう少し探してみます。
パテ太
ベテラン
会議室デビュー日: 2004/08/16
投稿数: 64
お住まい・勤務地: 千葉・東京
投稿日時: 2005-02-23 16:51
パテ太です。
ソースをもう少し追ってみたのですが
JChooseFilter#setFileFilter が呼び出された直後
ファイル名がクリアされているようです。
大間違いな情報を投稿してしまって大変申し訳ありませんでした。

・・・ということで
JFileChooser に PropertyChangeListener を登録して
PropertyChangeEvent が fileFilterChanged だった時に
BasicFileChooserUI#setFileName で
書き換えるというのはだめでしょうか?

(前回の投稿が大間違いだったので今回も
 あまり期待しないでいただきたいのですが・・・すみません。)

いくつか補足ですが

  1. ファイル名を削除するアクションは PropertyChange イベントを発行しないようです。
    なので PropertyChangeListener ではファイル名がクリアされたタイミングを
    捕捉できない(と思います。・・・たぶん)
  2. JFileChooser#setSelectedFile を使用する場合は
    コード:
    File file = new File(new File(directory, filename).getAbsolutePath());
    


    を使用するのが良いかも・・・。
    この場合絶対パス指定するのでカレントディレクトリの移動も発生します。
アネゴ
会議室デビュー日: 2005/02/22
投稿数: 4
お住まい・勤務地: 東京
投稿日時: 2005-02-23 19:10
パテ太さん

さっそくpropertyChangeからBasicFileChooserUI#setFileNameを使ってみましたがダメでした……
JFileChooser#setSelectedFileを使ってセットすると、すでに同名ファイルがあるばあいは
そのファイル選択まではしてくれますがファイル名までは空のままでした。


で プロジェクトで相談した結果、「これはswingの仕様だからしょうがない」ということで落ち着きそうですw
でも まだ何か方法あるような気がするので、個人的に追ってみようと思います。

ありがとうございました。
beco
会議室デビュー日: 2005/02/24
投稿数: 6
投稿日時: 2005-02-24 15:03
beco と申します。
私も以前のプロジェクトでFileChooserを使用していろいろ不都合がありました。
Swingの仕様ではWindowsユーザーの感覚と異なる動きが多いように感じます。
AWTの"FileDialog"を使用したところ比較的使いやすいように感じます。
検討されてみてはいかがでしょうか?
1

スキルアップ/キャリアアップ(JOB@IT)