Как я могу заставить java FileDialog принимать каталоги как его FileType в OS X? - PullRequest
9 голосов
/ 04 августа 2009

Я пытаюсь переключиться с использования 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 принял любой каталог).

Ответы [ 3 ]

10 голосов
/ 04 августа 2009

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

1 голос
/ 04 августа 2009

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

Я бы посоветовал вам попытаться остаться в мире Swing и уклониться от мира с более тяжелым весом AWT. Существуют способы обойти проблемы с Swing L & F на Mac, если это ваша проблема. Посмотрите на этот пост на предыдущий вопрос , который ссылается на сайт, показывающий, как получить правильные значки Mac в окне выбора файлов.

Извините, что не совсем ответил на ваш вопрос. Если есть другие причины, по которым вы предпочитаете остаться с FileDialog, я с удовольствием удалю этот пост.

0 голосов
/ 17 сентября 2017

После использования самого популярного решения на время:

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;

Наслаждайтесь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...