Как ограничить JFileChooser каталогом?

Я хочу ограничить своих пользователей каталогом и его подкаталогами, но кнопка «Родительский каталог» позволяет им переходить в произвольный каталог.

Как мне это сделать?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
23
0
14 739
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Вероятно, вы можете сделать это, установив свой собственный FileSystemView.

как получить представление файловой системы по умолчанию (например, делегировать ему)?

Jason S 03.02.2010 20:12

@Jason S - вероятно, с помощью статического метода getFileSystemView()

McDowell 03.02.2010 20:47

Если кому-то это может понадобиться, вот точный пример того, что хотел OP: tips4java.wordpress.com/2009/01/28/single-root-file-chooser

Big_Chair 24.03.2014 05:18

На случай, если это понадобится кому-то еще в будущем:

class DirectoryRestrictedFileSystemView extends FileSystemView
{
    private final File[] rootDirectories;

    DirectoryRestrictedFileSystemView(File rootDirectory)
    {
        this.rootDirectories = new File[] {rootDirectory};
    }

    DirectoryRestrictedFileSystemView(File[] rootDirectories)
    {
        this.rootDirectories = rootDirectories;
    }

    @Override
    public File createNewFolder(File containingDir) throws IOException
    {       
        throw new UnsupportedOperationException("Unable to create directory");
    }

    @Override
    public File[] getRoots()
    {
        return rootDirectories;
    }

    @Override
    public boolean isRoot(File file)
    {
        for (File root : rootDirectories) {
            if (root.equals(file)) {
                return true;
            }
        }
        return false;
    }
}

Очевидно, вам нужно будет создать лучший метод createNewFolder, но это ограничивает пользователя одним или несколькими каталогами.

И используйте это так:

FileSystemView fsv = new DirectoryRestrictedFileSystemView(new File("X:\"));
JFileChooser fileChooser = new JFileChooser(fsv);

или вот так:

FileSystemView fsv = new DirectoryRestrictedFileSystemView( new File[] {
    new File("X:\"),
    new File("Y:\")
});
JFileChooser fileChooser = new JFileChooser(fsv);

Решение Аллена практически завершено. Открыты для решения три проблемы:

  1. Нажатие кнопки «Домой» выводит пользователя из-под ограничений.
  2. DirectoryRestrictedFileSystemView недоступен вне пакета
  3. Начальная точка не Root

  1. Добавить @Override в DirectoryRestrictedFileSystemView

public TFile getHomeDirectory() { return rootDirectories[0]; }

  1. установить класс и конструктор public

  2. Измените JFileChooser fileChooser = new JFileChooser(fsv); на JFileChooser fileChooser = new JFileChooser(fsv.getHomeDirectory(),fsv);

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

Не нужно быть таким сложным. Вы можете легко установить режим выбора JFileChooser следующим образом

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

Вы можете прочитать дополнительную ссылку здесь Как использовать средства выбора файлов

Это ограничивает их каталогами в целом, но не конкретным каталогом, что является вопросом OP.

james.garriss 04.09.2013 19:40

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