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

我该如何避免第二种情况?

提前致谢。

4

1 回答 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";
}
于 2010-06-17T18:41:53.700 回答