Кажется, что раздутый JFileChooser
отсутствует одна функция: способ предложить имя файла при сохранении файла (вещь, которая обычно выбирается так, что она будет заменена, когда пользователь начнет печатать).
Есть ли способ обойти это?
Кажется, что раздутый JFileChooser
отсутствует одна функция: способ предложить имя файла при сохранении файла (вещь, которая обычно выбирается так, что она будет заменена, когда пользователь начнет печатать).
Есть ли способ обойти это?
Если вы правильно поняли, вам нужно использовать метод setSelectedFile
.
JFileChooser jFileChooser = new JFileChooser();
jFileChooser.setSelectedFile(new File("fileToSave.txt"));
jFileChooser.showSaveDialog(parent);
Файл не должен существовать.
EDIT: Если вы передадите файл с абсолютным путем, JFileChooser
попытается поместить себя в этот каталог (если он существует).
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.
Если это не сработает, вот обходной путь:
dialog.getUI().setFileName( name )
Но вы должны проверить, есть ли режим выбора FILES_ONLY
или FILES_AND_DIRECTORIES
. Если он DIRECTORIES_ONLY
, то setSelectedFile()
будет лишать имя файла.
Отлично! Прекрасно работает в 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);