我在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;
}
现在有两种方式可供用户选择文件夹
两种方式在Windows上运行良好,但在OS X上,我得到了
如果我做1:path = Users/<username>/Desktop/MYAPPFOLDER
如果我做2:path = Users/<username>/Desktop/Desktop/MYAPPFOLDER
如何避免第二种情况?
提前致谢。
答案 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";
}