JFileChooser.showSaveDialog(...) - как установить предлагаемое имя файла
Кажется, что раздутый JFileChooser
отсутствует одна функция: способ предложить имя файла при сохранении файла (вещь, которая обычно выбирается так, что она будет заменена, когда пользователь начнет печатать).
Есть ли способ обойти это?
Ответы
Ответ 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);