Часть пути возвращается из каталогов. Только JFileChooser иногда дублируется - PullRequest
5 голосов
/ 16 июля 2009

В моем приложении я хочу, чтобы пользователь мог выбрать каталог для хранения материалов. У меня есть текстовое поле, которое я использую для отображения каталога, который он выбрал. Если они просто нажимают на каталог (не просматривайте его), все в порядке. Однако, если они дважды щелкают по каталогу и заглядывают внутрь, имя каталога дублируется.

Ex. Они находятся в домашнем каталоге, кликните один раз на папку «Рабочий стол ...», путь будет ~ / Desktop. С другой стороны, если они находятся в домашнем каталоге, дважды щелкните папку «Рабочий стол», и теперь они находятся в папке «Рабочий стол», возвращенный путь ~ / Desktop / Destkop.

Вот что я делаю:

JFileChooser chooser = new JFileChooser();
chooser.setMultiSelectionEnabled(false);
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int returnVal = chooser.showOpenDialog(this);

if (returnVal == JFileChooser.APPROVE_OPTION) {
    File f = chooser.getSelectedFile();
    loadField.setText(f.getPath());
}

Я также пытался сделать что-то вроде chooser.getCurrentDirectory(), но это тоже не сработало.

Редактировать: Использование Mac OS X, Java 1.6

Ответы [ 2 ]

3 голосов
/ 16 июля 2009

Кажется, работает на меня.

import javax.swing.JFileChooser;

public class FChoose {
    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() { public void run() {
            JFileChooser chooser = new JFileChooser();
            chooser.setMultiSelectionEnabled(false);
            chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            int returnVal = chooser.showOpenDialog(null);

            if (returnVal == JFileChooser.APPROVE_OPTION) {
                java.io.File f = chooser.getSelectedFile();
                System.err.println(f.getPath());
            }
        }});
    }
}

6u13 на Vista. Что-то странное в вашей настройке или что вы делаете?

Если есть конкретная ошибка в реализации Java для Mac OS X, вы можете, скажем, проверить, существует ли файл и, если нет, не выполнить дедупликацию последнего для элементов пути.

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

Проблема возникает при использовании chooser.showDialog или chooser.showSaveDialog вместо chooser.showOpenDialog. В XP chooser.showDialog возвращает правильный путь в соответствии с примером, приведенным в OP, но в Mac OS 10.5.7 (и, возможно, в более ранних версиях) вы получите ~ / Desktop / Desktop. (В моем случае мне нужно использовать showSaveDialog, потому что я хочу, чтобы у пользователей была возможность создать новую папку, поэтому похоже, что мне придется вручную де-дуплицировать путь. Это, похоже, ошибка в Apple Реализация Java.)

...