Spec-Zone .ru
спецификации, руководства, описания, API
След: Создание GUI С JFC/Swing
Урок: Используя Компоненты Swing
Раздел: Как Использовать Различные Компоненты
Как Использовать Селекторов Файла
Домашняя страница > Создание GUI С JFC/Swing > Используя Компоненты Swing

Как Использовать Селекторов Файла

Селекторы файла обеспечивают GUI для того, чтобы он переместился по файловой системе, и затем или выбрал файл или каталог из списка, или ввел имя файла или каталога. Чтобы вывести на экран селектора файла, Вы обычно используете JFileChooser API, чтобы показать модальное диалоговое окно, содержащее селектора файла. Другой способ представить селектора файла состоит в том, чтобы добавить экземпляр JFileChooser к контейнеру.


Отметьте: 

Если Вы намереваетесь распределить свою программу, поскольку Сеть Java™ без знака Запускает приложение, то вместо того, чтобы использовать JFileChooser API следует использовать файловые службы, обеспеченные API JNLP. Эти службы — FileOpenService и FileSaveService — не только оказывают поддержку для того, чтобы выбрать файлы в ограниченной среде, но также и заботятся о фактическом открытии и сохранении их. Пример использования этих служб находится в JWSFileChooserDemo. Документация для того, чтобы использовать API JNLP может быть найдена в Сети Java, Запускают урок.


Нажмите кнопку Launch, чтобы работать, JWSFileChooserDemo, используя Сеть Java™ Запускаются (загрузите JDK 6 или позже). Альтернативно, чтобы скомпилировать и выполнить пример самостоятельно, консультируйтесь, пример индексируют.

Запускает приложение JWSFileChooserDemo

Работая с JWSFileChooserDemo пример, бояться терять файлы, в которых Вы нуждаетесь. Всякий раз, когда Вы нажимаете сохранить кнопку и выбираете существующий файл, этот демонстрационный пример переводит Файл в рабочее состояние, Существует диалоговое окно с запросом, чтобы заменить файл. Принятие запроса перезаписывает файл.

Остальная часть этого раздела обсуждает, как использовать JFileChooser API. A JFileChooser возразите только подаркам GUI для того, чтобы выбрать файлы. Ваша программа ответственна за выполнение чего-то с выбранным файлом, таким как открытие или сохранение этого. Обратитесь к Основному вводу-выводу для информации о том, как считать и записать файлы.

JFileChooser API облегчает переводить в рабочее состояние открытый и сохранять диалоговые окна. Тип стили определяет то, на что похожи эти стандартные диалоговые окна и как они отличаются. В стили Java сохранить диалоговое окно выглядит одинаково как открытое диалоговое окно, за исключением title на окне диалогового окна и текста на кнопке, которая одобряет работу. Вот изображение открытого диалогового окна стандарта в стили Java:

Стандарт открывает диалоговое окно, показанное в стили Java

Вот изображение вызванного приложения FileChooserDemo это переводит в рабочее состояние открытое диалоговое окно и сохранить диалоговое окно.

Программа, которая переводит открытое в рабочее состояние или сохраняет диалоговое окно

Попробуйте это: 
  1. Скомпилируйте и выполните пример, консультируйтесь, пример индексируют.
  2. Нажмите кнопку Open a File. Переместитесь вокруг селектора файла, выберите файл, и нажмите кнопку Open диалогового окна.
  3. Используйте кнопку Save a File, чтобы перевести сохранить диалоговое окно в рабочее состояние. Попытайтесь использовать все средства управления на селекторе файла.
  4. В исходном файле FileChooserDemo.java, измените режим выбора файла на режим только для каталогов. (Поиск DIRECTORIES_ONLY и непрокомментируйте строку, которая содержит это.) Затем компилируют и выполняют пример снова. Вы только будете в состоянии видеть и выбрать каталоги, не обычные файлы.

Перевод в рабочее состояние стандарта открывается, диалоговое окно требует только двух строк кода:

//Create a file chooser
final JFileChooser fc = new JFileChooser();
...
//In response to a button click:
int returnVal = fc.showOpenDialog(aComponent);

Параметр showOpenDialog метод определяет родительский компонент для диалогового окна. Родительский компонент влияет на позицию диалогового окна и фрейма, от которого зависит диалоговое окно. Например, стиль Java помещает диалоговое окно непосредственно по родительскому компоненту. Если родительский компонент находится во фрейме, то диалоговое окно зависит от того фрейма. Это диалоговое окно исчезает, когда фрейм минимизируется и вновь появляется, когда фрейм максимизируется.

По умолчанию, селектор файла, которого не показали перед дисплеями все файлы в корневом каталоге пользователя. Можно определить начальный каталог селектора файла при использовании одного из JFileChooser's другие конструкторы, или можно установить каталог с setCurrentDirectory метод.

Звонок showOpenDialog появляется в actionPerformed метод слушателя действия кнопки Open a File:

public void actionPerformed(ActionEvent e) {
    //Handle open button action.
    if (e.getSource() == openButton) {
        int returnVal = fc.showOpenDialog(FileChooserDemo.this);

        if (returnVal == JFileChooser.APPROVE_OPTION) {
            File file = fc.getSelectedFile();
            //This is where a real application would open the file.
            log.append("Opening: " + file.getName() + "." + newline);
        } else {
            log.append("Open command cancelled by user." + newline);
        }
   } ...
}

showXxxDialog методы возвращают целое число, которое указывает ли пользователь, выбранный файл. В зависимости от того, как Вы используете селектора файла, часто достаточно проверить, является ли возвращаемое значение APPROVE_OPTION и затем не изменить любое другое значение. Чтобы получить выбранный файл (или каталог, если Вы устанавливаете селектора файла, чтобы позволить выборы каталога), вызовите getSelectedFile метод на селекторе файла. Этот метод возвращает экземпляр File.

Пример получает имя файла и использует это в сообщении журнала. Можно обратиться к другим методам File объект, такой как getPath, isDirectory, или exists получить информацию о файле. Можно также вызвать другие методы такой как delete и rename изменить файл в некотором роде. Конечно, Вы могли бы также хотеть открыть или сохранить файл при использовании одного из классов чтения или классов для записи, обеспеченных платформой Java. См. Основной ввод-вывод для информации об использовании читателей и писателей, чтобы считать и записать данные в файловую систему.

Пример программы использует тот же самый экземпляр JFileChooser class, чтобы вывести на экран стандарт сохраняет диалоговое окно. На сей раз вызовы программы showSaveDialog:

int returnVal = fc.showSaveDialog(FileChooserDemo.this);

При использовании того же самого экземпляра селектора файла, чтобы вывести на экран ее открытое и сохранить диалоговые окна, программа пожинает следующие преимущества:

Наконец, у примера программы есть закомментированные строки кода, которые позволяют Вам изменять режим выбора файла. Например, следующая строка кода делает селектора файла способным выбрать только каталоги, и не файлы:

fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

Другой возможный режим выбора FILES_AND_DIRECTORIES. Значение по умолчанию FILES_ONLY. Следующее изображение показывает открытое диалоговое окно с набором режима выбора файла к DIRECTORIES_ONLY. Отметьте, что, в стили Java, по крайней мере, только каталоги видимы — не файлы.

Селектор файла в режиме DIRECTORIES_ONLY

Если Вы хотите создать селектора файла для задачи кроме открытия или сохранения, или если Вы хотите настроить селектора файла, продолжите читать. Мы обсудим следующие темы:

Другой Пример: FileChooserDemo2

Давайте смотреть на FileChooserDemo2 пример, измененная версия предыдущей демонстрационной программы, которая использует больше JFileChooser API. Этот пример использует селектора файла, который был настроен несколькими способами. Как исходный пример, пользователь вызывает селектора файла с нажатием кнопки. Вот изображение селектора файла:

Селектор файла с различными настройками

Поскольку данные показывают, этот селектор файла был настроен для специальной задачи (Присоединяют), обеспечивает пользовательский-choosable фильтр файла (Только Изображения), использует специальное представление файла для файлов изображений, и имеет вспомогательное компонент, который выводит на экран набросок в настоящий момент выбранного файла изображения.

Остаток от этого раздела показывает Вам код, который создает и настраивает этого селектора файла. См., что пример индексирует для ссылок ко всем файлам, требуемым этим примером.

Используя Селектора Файла для Пользовательской Задачи

Поскольку Вы видели, JFileChooser class обеспечивает showOpenDialog метод для того, чтобы вывести на экран открытое диалоговое окно и showSaveDialog метод для того, чтобы вывести на экран сохранить диалоговое окно.

У class есть другой метод, showDialog, для того, чтобы вывести на экран селектора файла для пользовательской задачи в диалоговом окне. В стили Java единственной разницей между этим диалоговым окном и другими диалоговыми окнами селектора файла является title на диалоговом окне и метка на одобрить кнопке. Вот код от FileChooserDemo2 это переводит диалоговое окно селектора файла в рабочее состояние для Присоединить задачи:

JFileChooser fc = new JFileChooser();
int returnVal = fc.showDialog(FileChooserDemo2.this, "Attach");

Первый параметр showDialog метод является родительским компонентом для диалогового окна. Вторым параметром является a String объект, который обеспечивает и title для диалогового окна и метку для одобрить кнопки.

Еще раз селектор файла ничего не делает с выбранным файлом. Программа ответственна за реализацию пользовательской задачи, для которой создавался селектор файла.

Фильтрация Списка Файлов

По умолчанию селектор файла выводит на экран все файлы и каталоги, которые это обнаруживает, за исключением скрытых файлов. Программа может применить один или более фильтров файла к селектору файла так, чтобы селектор показал только некоторые файлы. Селектор файла вызывает фильтр accept метод для каждого файла, чтобы определить, должно ли это быть выведено на экран. Фильтр файла принимает или отклоняет файл, основанный на критериях, таких как тип файла, размер, владение, и так далее. Фильтры влияют на список файлов, выведенных на экран селектором файла. Пользователь может ввести имя любого файла, даже если это не выводится на экран.

JFileChooser поддерживает три различных видов фильтрации. Фильтры проверяются в порядке, перечисленном здесь. Например, управляемый приложением фильтр видит только те файлы, принятые встроенной фильтрацией.

Встроенная фильтрация
Фильтрация устанавливается через определенные вызовы метода на селекторе файла. В настоящий момент единственный встроенный доступный фильтр для скрытых файлов, таких как те, имена которых начинаются с периода (.) на системах UNIX. По умолчанию скрытые файлы не показывают. Вызвать setFileHidingEnabled(false) показать скрытые файлы.
Управляемая приложением фильтрация
Приложение определяет, какие файлы показывают. Создайте пользовательский подкласс FileFilter, инстанцируйте этого, и используйте экземпляр в качестве параметра setFileFilter метод. Установленный фильтр выводится на экран в списке пользовательских-choosable фильтров. Селектор файла показывает только те файлы, что фильтр принимает.
Пользователь-choosable, фильтрующий
GUI селектора файла обеспечивает список фильтров, из которых может выбрать пользователь. Когда пользователь выбирает фильтр, селектор файла показывает только те файлы, принятые тем фильтром. FileChooserDemo2 добавляет пользовательский фильтр файла к списку пользовательских-choosable фильтров:
fc.addChoosableFileFilter(new ImageFilter());
По умолчанию список пользовательских-choosable фильтров включает Принятие Всего фильтра, который позволяет пользователю видеть все нескрытые файлы. Этот пример использует следующий код, чтобы отключить Принятие Всего фильтра:
fc.setAcceptAllFileFilterUsed(false);
Наш пользовательский фильтр файла реализуется в ImageFilter.java и подкласс FileFilter. ImageFilter class реализует getDescription метод, чтобы возвратить "Только Изображения" — строка, чтобы вставить список пользовательских-choosable фильтров. ImageFilter также реализации accept метод так, чтобы это приняло все каталоги и любой файл, у которого есть a .png, .jpg, .jpeg, .gif, .tif, или .tiff расширение файла.
public boolean accept(File f) {
    if (f.isDirectory()) {
        return true;
    }

    String extension = Utils.getExtension(f);
    if (extension != null) {
        if (extension.equals(Utils.tiff) ||
            extension.equals(Utils.tif) ||
            extension.equals(Utils.gif) ||
            extension.equals(Utils.jpeg) ||
            extension.equals(Utils.jpg) ||
            extension.equals(Utils.png)) {
                return true;
        } else {
            return false;
        }
    }

    return false;
}
Принимая все каталоги, этот фильтр позволяет пользователю перемещаться вокруг файловой системы. Если бы полужирные строки были опущены от этого метода, то пользователь был бы ограничен каталогом, с которым был инициализирован селектор.

Предыдущий пример кода использует getExtension метод и несколько строковых констант от Utils.java, показанный здесь:

public class Utils {

    public final static String jpeg = "jpeg";
    public final static String jpg = "jpg";
    public final static String gif = "gif";
    public final static String tiff = "tiff";
    public final static String tif = "tif";
    public final static String png = "png";

    /*
     * Get the extension of a file.
     */  
    public static String getExtension(File f) {
        String ext = null;
        String s = f.getName();
        int i = s.lastIndexOf('.');

        if (i > 0 &&  i < s.length() - 1) {
            ext = s.substring(i+1).toLowerCase();
        }
        return ext;
    }
}

Настройка Представления Файла

В стили Java список селектора показывает имя каждого файла и выводит на экран маленький значок, который представляет, является ли файл истинным файлом или каталогом. Можно настроить это представление файла, создавая пользовательский подкласс FileView и использование экземпляра class как параметр setFileView метод. Пример использует экземпляр пользовательского class, реализованного в ImageFileView.java, как представление файла селектора файла.

fc.setFileView(new ImageFileView());

ImageFileView class показывает различный значок для каждого типа изображения, принятого фильтром изображения, описанным ранее.

ImageFileView class переопределяет пять абстрактных методов, определенных в FileView следующим образом.

String getTypeDescription(File f)
Возвращает описание типа файла. Вот ImageFileView's реализация этого метода:
public String getTypeDescription(File f) {
    String extension = Utils.getExtension(f);
    String type = null;

    if (extension != null) {
        if (extension.equals(Utils.jpeg) ||
            extension.equals(Utils.jpg)) {
            type = "JPEG Image";
        } else if (extension.equals(Utils.gif)){
            type = "GIF Image";
        } else if (extension.equals(Utils.tiff) ||
                   extension.equals(Utils.tif)) {
            type = "TIFF Image";
        } else if (extension.equals(Utils.png)){
            type = "PNG Image";
        }
    }
    return type;
}
Icon getIcon(File f)
Возвращает значок, представляющий файл или его тип. Вот ImageFileView's реализация этого метода:
public Icon getIcon(File f) {
    String extension = Utils.getExtension(f);
    Icon icon = null;

    if (extension != null) {
        if (extension.equals(Utils.jpeg) ||
            extension.equals(Utils.jpg)) {
            icon = jpgIcon;
        } else if (extension.equals(Utils.gif)) {
            icon = gifIcon;
        } else if (extension.equals(Utils.tiff) ||
                   extension.equals(Utils.tif)) {
            icon = tiffIcon;
        } else if (extension.equals(Utils.png)) {
            icon = pngIcon;
        }
    }
    return icon;
}
String getName(File f)
Возвращает имя файла. Большинство реализаций этого метода должно возвратиться null указать, что стиль должен понять это. Другая общая реализация возвраты f.getName().
String getDescription(File f)
Возвращает описание файла. Намерение состоит в том, чтобы описать отдельные файлы более определенно. Общая реализация этого метода возвраты null указать, что стиль должен понять это.
Boolean isTraversable(File f)
Возвраты, проходим ли каталог. Большинство реализаций этого метода должно возвратиться null указать, что стиль должен понять это. Некоторые приложения могли бы хотеть препятствовать тому, чтобы пользователи убывали в определенный тип каталога, потому что он представляет составной документ. isTraversable метод никогда не должен возвращаться true для некаталога.

Обеспечение Вспомогательного Компонент

Специализированный селектор файла в FileChooserDemo2 имеет вспомогательное компонент. Если в настоящий момент выбранный пункт является PNG, JPEG, РАЗМОЛВКОЙ, или изображением ДЖИФА, вспомогательное, компонент выводит на экран набросок изображения. Иначе, вспомогательное компонент пусто. Кроме предварительного средства просмотра, вероятно наиболее популярный способ использования вспомогательного компонент является панелью с большим количеством средств управления на этом, таких как флажки тот переключатель между функциями.

Пример вызывает setAccessory метод, чтобы установить экземпляр ImagePreview class, реализованный в ImagePreview.java, как селектор, вспомогательный компонент:

fc.setAccessory(new ImagePreview(fc));

Любой объект, который наследовался от JComponent class может быть вспомогательным компонент. У компонента должен быть привилегированный размер, который выглядит хорошим в селекторе файла.

Селектор файла запускает событие изменения свойства, когда пользователь выбирает элемент в списке. Программа со вспомогательным, которое компонент должен зарегистрировать, чтобы получить эти события, чтобы обновить вспомогательное компонент всякий раз, когда выбор изменяется. В примере, ImagePreview сам объект регистрируется для этих событий. Это сохраняет весь код связанным со вспомогательным компонент вместе в одном class.

Вот реализация примера propertyChange метод, который является методом, вызванным, когда событие изменения свойства запускается:

//where member variables are declared
File file = null;
...
public void propertyChange(PropertyChangeEvent e) {
    boolean update = false;
    String prop = e.getPropertyName();

    //If the directory changed, don't show an image.
    if (JFileChooser.DIRECTORY_CHANGED_PROPERTY.equals(prop)) {
        file = null;
        update = true;

    //If a file became selected, find out which one.
    } else if (JFileChooser.SELECTED_FILE_CHANGED_PROPERTY.equals(prop)) {
        file = (File) e.getNewValue();
        update = true;
    }

    //Update the preview accordingly.
    if (update) {
        thumbnail = null;
        if (isShowing()) {
            loadImage();
            repaint();
        }
    }
}

Если SELECTED_FILE_CHANGED_PROPERTY свойство, которое изменилось, этот метод получает a File объект от селектора файла. loadImage и repaint методы используют File возразите, чтобы загрузить изображение и перекрасить вспомогательное компонент.

API Селектора Файла

API для того, чтобы использовать селекторов файла попадает в эти категории:

Создание и Показ Селектора Файла
Метод или Конструктор Цель
JFileChooser ()
JFileChooser (Файл)
JFileChooser (Строка)
Создает экземпляр селектора файла. File и String параметры, когда существующий, обеспечивают начальный каталог.
интервал showOpenDialog (Компонент)
интервал showSaveDialog (Компонент)
интервал showDialog (Компонент, Строка)
Показывает модальное диалоговое окно, содержащее селектора файла. Эти методы возврат APPROVE_OPTION если пользователь, одобренный работа и CANCEL_OPTION если пользователь отменял это. Другое возможное возвращаемое значение ERROR_OPTION, что означает, что непредвиденная ошибка произошла.
Выбор Файлов и Каталогов
Метод Цель
освободите setSelectedFile (Файл)
Файл getSelectedFile ()
Наборы или получают в настоящий момент выбранный файл или (если выбор каталога был включен), каталог.
освободите setSelectedFiles (Файл [])
Файл [] getSelectedFiles ()
Наборы или получают в настоящий момент выбранные файлы, если селектор файла устанавливается позволить множественный выбор.
освободите setFileSelectionMode (интервал)
освободите getFileSelectionMode ()
булев isDirectorySelectionEnabled ()
булев isFileSelectionEnabled ()
Наборы или получают режим выбора файла. Приемлемые значения FILES_ONLY (значение по умолчанию), DIRECTORIES_ONLY, и FILES_AND_DIRECTORIES.
Интерпретирует или каталоги, или файлы являются выбираемыми согласно текущему режиму выбора.
освободите (булев) setMultiSelectionEnabled
булев isMultiSelectionEnabled ()
Наборы или интерпретируют, могут ли многократные файлы быть выбраны сразу. По умолчанию пользователь может выбрать только один файл.
освободите (булев) setAcceptAllFileFilterUsed
булев isAcceptAllFileFilterUsed ()
Наборы или получают ли AcceptAll фильтр файла используется в качестве допустимого выбора в списке фильтра choosable; значение по умолчанию true.
Диалоговое окно createDialog (Компонент) Учитывая родительский компонент, создает и возвращает новое диалоговое окно, которое содержит этого селектора файла, зависит от фрейма родителя, и центрируется по родителю.
Навигация по Списку Селектора Файла
Метод Цель
освободите ensureFileIsVisible (Файл) Прокручивает список селектора файла так, что, обозначенный файл видим.
освободите setCurrentDirectory (Файл)
Файл getCurrentDirectory ()
Наборы или получают каталог, файлы которого выводятся на экран в списке селектора файла.
освободите changeToParentDirectory () Изменяет список, чтобы вывести на экран родителя текущего каталога.
освободите rescanCurrentDirectory () Проверяет файловую систему и обновляет список селектора.
освободите (булев) setDragEnabled
булев getDragEnabled ()
Наборы или получают свойство, которое определяет, перетаскивают ли автоматический обработку, включается. См. Перетаскивают и Отбрасывание и Передача данных для большего количества деталей.
Настройка Селектора Файла
Метод Цель
освободите setAccessory (javax.swing. JComponent)
JComponent getAccessory ()
Наборы или получают селектора файла, вспомогательного компонент.
освободите setFileFilter (FileFilter)
FileFilter getFileFilter ()
Наборы или получают основной фильтр файла селектора файла.
освободите setFileView (FileView)
FileView getFileView ()
Наборы или получают представление файла селектора.
FileFilter [] getChoosableFileFilters ()
освободите addChoosableFileFilter (FileFilter)
булев removeChoosableFileFilter (FileFilter)
освободите resetChoosableFileFilters ()
FileFilter getAcceptAllFileFilter ()
Наборы, получает, или изменяет список пользовательских-choosable фильтров файла.
освободите (булев) setFileHidingEnabled
булев isFileHidingEnabled ()
Наборы или получают, выводятся ли скрытые файлы на экран.
освободите (булев) setControlButtonsAreShown
булев getControlButtonsAreShown ()
Наборы или получают свойство, которое указывает, показывают ли кнопки Approve и Cancel в селекторе файла. Это свойство является истиной по умолчанию.

Примеры Тот Файл Использования Селекторы

Эта таблица показывает примеры, что селекторы файла использования и точки туда, где те примеры описываются.

Пример Где Описано Примечания
FileChooserDemo Этот раздел Выводит на экран открытое диалоговое окно и сохранить диалоговое окно.
FileChooserDemo2 Этот раздел Использует селектора файла с пользовательской фильтрацией, пользовательским представлением файла, и вспомогательным компонент.
JWSFileChooserDemo Этот раздел Использует API JNLP, чтобы открыть и сохранить файлы.

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Как Использовать текстовые Области и Редактор Пэйнс
Следующая страница: Как Использовать Отформатированные Текстовые поля