代码之家  ›  专栏  ›  技术社区  ›  Virat Kadaru

JFileChooser在OSX中返回不正确的路径(仅文件夹模式)

  •  3
  • Virat Kadaru  · 技术社区  · 14 年前

    我在javaswing中遇到一个问题,用户必须选择一个文件夹,所以我使用下面的代码。

    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. 导航到该文件夹,进入该文件夹,然后单击“选择”

    path = Users/<username>/Desktop/MYAPPFOLDER

    path = Users/<username>/Desktop/Desktop/MYAPPFOLDER

    如何避免第二种情况?

    1 回复  |  直到 14 年前
        1
  •  7
  •   Pat Wallace    14 年前

    问题是showDialog不知道这是一个加载还是保存操作,所以它提供了一个文本框来输入新的文件/文件夹名。当您单击要进入的文件夹(作为双击的第一次单击)并且用户随后按“选择”时,该对话框将设置为“桌面”,并假定您要创建一个具有该名称的新文件夹并将其返回到路径中。

    一种解决方案是改用showOpenDialog调用,手动更改选择器的标题和approve按钮。这样,用户就不会看到新的目录文本框。

    代码如下所示:

    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";
    }