Как я могу заставить java FileDialog принимать каталоги в качестве типа файла в OS X?

StackOverflow https://stackoverflow.com/questions/1224714

Вопрос

Я пытаюсь переключиться с использования JFileChooser на FileDialog, когда мое приложение запускается на Mac, чтобы оно использовало средство выбора файлов 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 принимал любой каталог).

Это было полезно?

Решение

Предполагая, что вы решили использовать 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, я предполагаю, что это не проблема.

Другие советы

  

Я пытаюсь перейти от использования JFileChooser к FileDialog, когда мое приложение запускается на Mac, чтобы оно использовало средство выбора файлов OSx

Я бы посоветовал вам попытаться остаться в мире Swing и уйти от более тяжелого мира AWT. Есть способы обойти проблемы с Swing L & amp; 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