如何使用JFileChooser.showSaveDialog(...)设置建议的文件名?

66

JFileChooser似乎缺少一个功能:在保存文件时建议文件名(通常选择的那个,在用户开始键入时会被替换掉)。

是否有解决方法?

3个回答

116

如果我理解您的意思正确,您需要使用setSelectedFile方法。

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

文件无需存在。

如果您使用绝对路径传递一个文件,JFileChooser 将尝试定位到该目录(如果存在)。


然而,如果您处于“仅目录”模式,则此方法无效。我看不到设置新目录默认名称的方法。 - MasterHD

4

如上所述,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();
}

很不幸,UI界面中没有包含setFileName方法,因此需要动态调用它。仅在Mac上进行了测试。


1
如果那不起作用,这里有一个解决方法:
dialog.getUI().setFileName( name )

但是您应该检查选择模式是FILES_ONLY还是FILES_AND_DIRECTORIES。如果是DIRECTORIES_ONLY,那么setSelectedFile()将会剥离文件名。


你怎么访问对话框呢?它是私有的,在showSaveDialog()中即时创建,并在显示后立即被销毁,仍然在该函数内部。 - Nyerguds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接