JFileChooser выбирают выставочные файлы, но каталог

Я чувствую, что должен быть простой способ сделать это, но я не могу понять это. У меня есть JFileChooser, который позволяет пользователю выбирать каталоги. Я хочу показать все файлы в каталогах, чтобы дать пользователю некоторый контекст, но только каталоги должны быть приняты как выборы (возможно, кнопка Open была бы отключена, когда файл выбран). Существует ли простой способ сделать это?

17
задан Jeff Storey 21 May 2010 в 15:34
поделиться

5 ответов

Переопределить метод approveSelection(). Что-то вроде:

JFileChooser chooser = new JFileChooser( new File(".") )
{
    public void approveSelection()
    {
        if (getSelectedFile().isFile())
        {
            // beep
            return;
        }
        else
            super.approveSelection();
    }
};
13
ответ дан 30 November 2019 в 10:58
поделиться

См. setFileSelectionMode () в Как использовать средства выбора файлов :

setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY)

Приложение: эффект можно увидеть, раскомментировав строку 73 этого FileChooserDemo , но, похоже, он зависит от платформы.

Дополнение: при использовании FILES_AND_DIRECTORIES подумайте об изменении текста кнопки соответствующим образом:

chooser.setApproveButtonText("Choose directory");

Поскольку эффект зависит от L&F, рассмотрите возможность использования DIRECTORIES_ONLY на платформах, которые уже соответствуют вашим требованиям к пользовательскому интерфейсу:

if (System.getProperty("os.name").startsWith("Mac OS X")) {
    chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
} else {
    chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
}
13
ответ дан 30 November 2019 в 10:58
поделиться

AFAIK JFileChooser отделяет фильтрацию файлов (то, что можно просматривать, очень настраиваемое) от фильтрации выбора (то, что можно выбрать).

Конфигурация фильтрации выбора намного более ограничена, но, AFAIK, вы можете разрешить выбор только каталогов или только файлов с помощью setFileSelectionMode ()

1
ответ дан 30 November 2019 в 10:58
поделиться

Я думаю, что лучшим решением будет просто позволить пользователю выбрать либо файл, либо каталог. И если пользователь выберет файл, просто использовать каталог, в котором находится этот файл.

-1
ответ дан 30 November 2019 в 10:58
поделиться

Мое решение представляет собой слияние ответов camickr и trashgod:

    final JFileChooser chooser = new JFileChooser() {
            public void approveSelection() {
                if (getSelectedFile().isFile()) {
                    return;
                } else
                    super.approveSelection();
            }
    };
    chooser.setFileSelectionMode( JFileChooser.FILES_AND_DIRECTORIES );
17
ответ дан 30 November 2019 в 10:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: