JFileChooser在OS X下(仅限文件夹模式)返回错误的路径

3
我在Java Swing中遇到了一个问题,需要用户选择一个文件夹,因此我正在使用以下代码。
JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

if(fc.showDialog(singleton, SELECT) == JFileChooser.APPROVE_OPTION) {
  File folder = fc.getSelectedFile();
  String path = folder.getPath() + File.separatorChar + MYAPPFOLDER;
}

现在用户有两种选择文件夹的方式:
  1. 导航到文件夹并选择文件夹
  2. 导航到文件夹,进入该文件夹,然后点击选择
这两种方式在Windows上都可以正常工作,但在OS X上,我会得到以下结果:
如果我选择方式1:path = Users/<username>/Desktop/MYAPPFOLDER 如果我选择方式2:path = Users/<username>/Desktop/Desktop/MYAPPFOLDER 如何避免第二种情况?
提前感谢您的帮助。
1个回答

7
问题在于showDialog不知道这是一个加载还是保存操作,因此它会给你一个文本框来输入新文件/文件夹的名称。当你单击文件夹进行双击的第一次单击时,它被设置为“桌面”,如果用户然后按SELECT键,对话框会假定您想要使用该名称创建一个新文件夹,并将其返回到路径中。
解决方法之一是改用showOpenDialog调用,手动更改选择器的标题和批准按钮为SELECT。这样,用户就永远看不到新目录文本框。
代码应该如下所示:
JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

fc.setDialogTitle("Select a folder");
fc.setApproveButtonText(SELECT);
if(fc.showOpenDialog(singleton) == JFileChooser.APPROVE_OPTION) {
  File folder = fc.getSelectedFile();
  String path = folder.getPath() + File.separatorChar + "MYAPPFOLDER";
}

1
我本来不打算点赞这个,但是在 Javadoc 中看到设置自定义批准按钮文本会将对话框类型默认设置为 JFileChooser.CUSTOM_DIALOG(默认为打开对话框)。 - Powerlord

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