10

当我的应用程序在 Mac 上运行时,我试图从使用 JFileChooser 切换到 FileDialog,以便它将使用 OS X 文件选择器。到目前为止,我有以下代码:

    FileDialog fd = new FileDialog(this);
    fd.setDirectory(_projectsBaseDir.getPath());
    fd.setLocation(50,50);
    fd.setFile(?);
    fd.setVisible(true);
    File selectedFile = new File(fd.getFile());

我会为这个问题输入什么?这样我的文件选择器将允许任何目录作为文件选择器的输入(下面的方法已经检查以确保该目录是正确的目录类型,我只想让 FileDialog 接受任何目录)。

4

3 回答 3

11

假设您决定使用 FileDialog 而不是可移植的 JFileChooser,您需要设置系统属性,以便创建的 FileDialogs 用于目录。

有问题的财产是apple.awt.fileDialogForDirectories

因此,只需执行以下操作:

System.setProperty("apple.awt.fileDialogForDirectories", "true");
FileDialog fd = new FileDialog(this); 
fd.setDirectory(_projectsBaseDir.getPath()); 
fd.setLocation(50,50);
fd.setVisible(true); 
File selectedFile = new File(fd.getFile());
System.setProperty("apple.awt.fileDialogForDirectories", "false");

应该注意的是,这不是可移植的,但是,由于您要替换可移植的 JFileDialog,我认为这不是问题。

于 2009-08-03T21:35:32.197 回答
1

当我的应用程序在 Mac 上运行时,我试图从使用 JFileChooser 切换到 FileDialog,以便它将使用 OSx 文件选择器

我建议您尝试留在 Swing 世界中并回避 AWT 的重量级世界。有一些方法可以解决 Mac 上的 Swing L&F 问题,如果这是您的问题的话。看看这个帖子到一个较早的问题,它链接到一个网站,该网站显示如何在文件选择器中获取正确的 Mac 图标。

对不起,我没有完全回答你的问题。如果还有其他原因让您更愿意留下来FileDialog,我很乐意删除这篇文章。

于 2009-08-03T21:36:27.140 回答
1

使用最流行的解决方案一段时间后:

System.setProperty("apple.awt.fileDialogForDirectories", "true");

我无法解析原生 FileDialog 实现的按钮(仅英文)的翻译。

所以我得到了一个在 macOS 上完美运行的解决方法:

try {
    Process process = Runtime.getRuntime().exec(new String[]{//
        "/usr/bin/osascript", //
        "-e", //
        "set selectedFolder to choose folder\n"//
        + "return POSIX path of selectedFolder"
    });
    int result = process.waitFor();
    if (result == 0) {
        String selectedFolder = new BufferedReader(new InputStreamReader(process.getInputStream())).readLine();
        return new File(selectedFolder);
    }
} catch (Exception ex) {
}

return null;

享受!

于 2017-09-17T14:37:23.500 回答