web-dev-qa-db-ja.com

JFileChooser.showSaveDialog(...)-推奨ファイル名を設定する方法

JFileChooserの機能が不足しているようです。ファイルを保存するときにファイル名を提案する方法(通常、ユーザーが入力を開始したときに置き換えられるように選択されるもの)。

これを回避する方法はありますか?

51
yanchenko

正しく理解できた場合は、setSelectedFileメソッドを使用する必要があります。

JFileChooser jFileChooser = new JFileChooser();
jFileChooser.setSelectedFile(new File("fileToSave.txt"));
jFileChooser.showSaveDialog(parent);

ファイルは存在する必要はありません。

EDIT:絶対パスでファイルを渡すと、JFileChooserはそのディレクトリに自分自身を配置しようとします(存在する場合)。

96
bruno conde

setSelectedFileは上記のディレクトリでは機能しません。解決策は

    try {
        FileChooserUI fcUi = fileChooser.getUI();
        fcUi.setSelectedFile(defaultDir);
        Class<? extends FileChooserUI> fcClass = fcUi.getClass();
        Method setFileName = fcClass.getMethod("setFileName", String.class);
        setFileName.invoke(fcUi, defaultDir.getName());
    } catch (Exception e) {
        e.printStackTrace();
    }

残念ながら、setFileNameはUIインターフェースに含まれていないため、動的に呼び出す必要があります。 Macでのみテストされています。

4
Erik Martino

それがうまくいかない場合、次の回避策があります。

_dialog.getUI().setFileName( name )
_

ただし、選択モードが_FILES_ONLY_か_FILES_AND_DIRECTORIES_かを確認する必要があります。 _DIRECTORIES_ONLY_の場合、setSelectedFile()はファイル名を削除します。

1
Aaron Digulla