JFileChooser возвращает неверный путь в OS X (режим только для папок) - PullRequest
3 голосов
/ 17 июня 2010

У меня проблема в java swing, когда пользователь должен выбрать папку, поэтому я использую приведенный ниже код.

JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

if(fc.showDialog(singleton, SELECT) == JFileChooser.APPROVE_OPTION) {
  File folder = fc.getSelectedFile();
  String path = folder.getPath() + File.separatorChar + MYAPPFOLDER;
}

Теперь есть 2 способа, которыми пользователь может выбрать папку

  1. Перейдите в папку и выберите папку
  2. Перейдите в папку, перейдите в папку и нажмите кнопку выбора

Оба способа отлично работают на Windows, но наOS X, я получаю

Если я делаю 1: path = Users/<username>/Desktop/MYAPPFOLDER

Если я делаю 2: path = Users/<username>/Desktop/Desktop/MYAPPFOLDER

Как мне избежать этого второго случая?

Заранее спасибо.

1 Ответ

6 голосов
/ 17 июня 2010

Проблема в том, что showDialog не знает, является ли это операцией загрузки или сохранения, поэтому он дает вам текстовое поле для ввода нового имени файла / папки. Это значение установлено на «Рабочий стол», когда вы нажимаете на папкучтобы войти в него (как первый щелчок двойным щелчком), и если пользователь затем нажимает SELECT, диалоговое окно предполагает, что вы хотите создать новую папку с этим именем, и возвращает ее по пути.

Oneрешение состоит в том, чтобы вместо этого использовать вызов showOpenDialog и вручную изменить заголовок средства выбора и утвердить кнопки SELECT.Таким образом, пользователь никогда не увидит текстовое поле нового каталога.

Код будет выглядеть примерно так:

JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

fc.setDialogTitle("Select a folder");
fc.setApproveButtonText(SELECT);
if(fc.showOpenDialog(singleton) == JFileChooser.APPROVE_OPTION) {
  File folder = fc.getSelectedFile();
  String path = folder.getPath() + File.separatorChar + "MYAPPFOLDER";
}
...