Подтвердить что ты не робот

JFileChooser.showSaveDialog(...) - как установить предлагаемое имя файла

Кажется, что раздутый JFileChooser отсутствует одна функция: способ предложить имя файла при сохранении файла (вещь, которая обычно выбирается так, что она будет заменена, когда пользователь начнет печатать).

Есть ли способ обойти это?

4b9b3361

Ответ 1

Если вы правильно поняли, вам нужно использовать метод setSelectedFile.

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

Файл не должен существовать.

EDIT: Если вы передадите файл с абсолютным путем, JFileChooser попытается поместить себя в этот каталог (если он существует).

Ответ 2

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.

Ответ 3

Если это не сработает, вот обходной путь:

dialog.getUI().setFileName( name )

Но вы должны проверить, есть ли режим выбора FILES_ONLY или FILES_AND_DIRECTORIES. Если он DIRECTORIES_ONLY, то setSelectedFile() будет лишать имя файла.

Ответ 4

Отлично! Прекрасно работает в Windows с Java 1.6.35. Только небольшое изменение в моем случае:

FileChooserUI fcUi = jFileChooser.getUI();
Class<? extends FileChooserUI> fcClass = fcUi.getClass();
Method setFileName = fcClass.getMethod("setFileName", String.class);
setFileName.invoke(fcUi, defaultDirectoryName);