我想从我的时候应用程序正在在Mac上运行,因此它会使用OS X文件选择使用JFileChooser,以一个FileDialog的切换。到目前为止,我有以下代码:

    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的接受任何目录方法)的输入。

有帮助吗?

解决方案

假设你决定使用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,我认为这不是一个问题。

其他提示

  

我想在我的应用程序正在在Mac上运行使用一个JFileChooser到FileDialog的切换,这样它将使用OSX的文件选择

我建议你尽量留在Swing世界,并从重量级的世界AWT的避而远之。有办法解决的问题与Swing的L&F在Mac上,如果这是你的问题是什么。看看这个帖子前面一个问题,该链接到一个网站,显示如何得到正确的Mac图标在文件选择。

对不起,我不完全回答你的问题。如果有其他原因,你宁愿留在FileDialog,我会很乐意删除此帖子。

使用最普遍的解决方案,同时后:

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;

享受!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top