我怎样才能让一个Java的FileDialog接受目录作为其文件类型在OS X?(How can I

2019-06-27 18:23发布

我想从我的时候应用程序正在在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的接受任何目录方法)的输入。

Answer 1:

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



Answer 2:

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

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

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



Answer 3:

使用而最流行的解决方案后:

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;

请享用!



文章来源: How can I make a java FileDialog accept directories as its FileType in OS X?