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

时间:2010-06-17 16:59:26

标签: java swing macos jfilechooser

我在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. 导航到该文件夹​​,进入该文件夹,然后单击选择
  3. 两种方式在Windows上运行良好,但在OS X上,我得到了

    如果我做1:path = Users/<username>/Desktop/MYAPPFOLDER

    如果我做2:path = Users/<username>/Desktop/Desktop/MYAPPFOLDER

    如何避免第二种情况?

    提前致谢。

1 个答案:

答案 0 :(得分:6)

问题是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";
}