- Диалоговое окно JFileChooser
- Конструкторы JFileChooser
- Основные метод JFileChooser
- Режимы работы JFileChooser
- Возвращаемые компонентом JFileChooser значения
- Пример использования JFileChooser
- Листинг примера JFileChooser
- Листинг метода addFileChooserListeners
- Выбор директории
- Сохранение файла
- Использование фильтра
- Скачать примеры
Диалоговое окно JFileChooser
Swing включает мощное средство для работы с файлами — компонент JFileChooser —, представляющий контейнер, в котором расположены несколько компонентов, списков и кнопок, «управляющих» выбором файлов. JFileChooser можно добавить в любое место пользовательского интерфейса, поскольку это весьма гибкий компонент, позволяющий тонко настраивать внешний вид. При необходимости можно полностью изменить стандартное расположение входящих в JFileChooser компонентов и добавить дополнительные элементы, такие как панели предварительного просмотра файлов.
Все стандартные диалоговые окна Swing имеют собственные UI-представители, отвечающие за интерфейс окна в используемом приложении. Это особенно важно для внешних видов окон, имитирующих известные платформы, пользователи которых не должны ощущать значительной разницы при переходе от «родных» приложений к Java-приложения. UIManager позволяет выполнять настройку и локализацию интерфейса диалогового окна JFileChooser.
Начиная с выпуска JDK 1.3 библиотека Swing предлагает легко настраиваемый инструмент JFileChooser для выбора файлов и при необходимости каталогов. Особенности различных файловых систем скрыты в подклассах абстрактного класса FileSystemView, который представляет внешний вид файловой структуры согласно используемой операционной системе.
JFileChooser — это обычный компонент, унаследованный от класса JComponent, так что можно включить его в любое место интерфейса. Настроить и вывести на экран несложное диалоговое окно для открытия файла или сохранения в нем данных совсем легко.
Конструкторы JFileChooser
// Создание JFileChooser с указанием директории пользователя по умолчанию JFileChooser() // Создание JFileChooser с указанием currentDirectory директории JFileChooser(File currentDirectory) // Создание JFileChooser с указанием currentDirectory директории и // файловой системы JFileChooser(File currentDirectory, FileSystemView fsv) // Создание JFileChooser с определенной файловой системы JFileChooser(FileSystemView fsv) // Создание JFileChooser с указанием currentDirectoryPath пути JFileChooser(String currentDirectoryPath) // Создание JFileChooser с указанием currentDirectoryPath пути и // файловой системы JFileChooser(String currentDirectoryPath, FileSystemView fsv)
Основные метод JFileChooser
Метод | Описание |
---|---|
File getCurrentDirectory() | Функция чтения текущей директории |
String getDialogTitle() | Функция чтения заголовка окна |
int getDialogType() | Функция чтения типа диалогового окна |
FileFilter getFileFilter() | Функция чтения текущего фильтра |
File getSelectedFile() | Функция чтения выделенного файла |
File[] getSelectedFiles() | Функция получения списка выделенных файлов, если установлен флаг выделения нескольких файлов MULTI_SELECTION_ENABLED_CHANGED_PROPERTY |
void setCurrentDirectory(File dir) | Метод определения текущей директории |
void setDialogTitle(String dialogTitle) | Метод определения заголовка диалогового окна |
void setDialogType(int dialogType) | Метод определения типа диалогового окна |
void setFileFilter(FileFilter filter) | Метод установки файлового фильтра |
void setFileSelectionMode(int mode) | Метод определения выделяемых объектов — файлы, директории или файлы с директориями |
void setMultiSelectionEnabled(boolean b) | Метод определения возможности выделения нескольких файлов |
void setSelectedFile(File file) | Метод выделения файла |
void setSelectedFiles(File[] selectedFiles) | Метод выделения списка файлов, если установлен флаг выделения нескольких файлов MULTI_SELECTION_ENABLED_CHANGED_PROPERTY |
int showDialog(Component parent, String approveButtonText) | Функция открытия окна выбора файла с настроенным наименованием кнопки |
int showOpenDialog(Component parent) | Функция открытия диалогового окна «Открыть файл» |
int showSaveDialog(Component parent) | Функция открытия диалогового окна «Сохранить файл» |
Режимы работы JFileChooser
Перед открытием диалогового окна для выбора файлов или директории необходимо определить режим работы JFileChooser. Компонент JFileChooser может работать в одном из трех режимов, который сохраняется в свойстве fileSelectionMode :
- FILES_ONLY — доступны только файлы, независимо от того, сохраняется файл или открывается. По умолчанию JFileChooser работает именно в этом режиме.
- FILES_AND_DIRECTORIES — доступны каталоги и файлы. Этот режим следует использовать только в том случае, когда необходимо поменять общие свойства файловой системы (файлы не отличаются от каталогов).
- DIRECTORIES_ONLY — доступны только каталоги.
Для определения режима используется метод setFileSelectionMode(mode).
Возвращаемые компонентом JFileChooser значения
- APPROVE_OPTION — выбор файла в диалоговом окне прошел успешно; выбранный файл можно получить методом getFile();
- CANCEL_OPTION — выбор файла отменен нажатием на кнопке Cancel;
- ERROR_OPTION — при выборе файла произошла ошибка, или было закрыто диалоговое окно выбора файла.
Пример использования JFileChooser
В примере FileChooserTest.java используется диалоговое окно выбора файла и директории с использованием компонента JFileChooser. Интерфейс окна включает 3 кнопки, по нажатию на которые открывается соответствующее диалоговое окно. Интерфейс главного окна представлен на следующем скриншоте.
Листинг примера JFileChooser
В примере определены кнопки, компонент выбора файла fileChooser и параметры файлового фильтра FILTERS. В конструкторе определяется интерфейс окна и вызывается метод addFileChooserListeners() для подключения к кнопкам слушателей.
// Пример использования диалоговых окон работы с файлами и директориями import javax.swing.*; import java.awt.event.*; public class FileChooserTest extends JFrame < private JButton btnSaveFile = null; private JButton btnOpenDir = null; private JButton btnFileFilter = null; private JFileChooser fileChooser = null; private final String[][] FILTERS = , >; public FileChooserTest() < super("Пример FileChooser"); setDefaultCloseOperation(EXIT_ON_CLOSE); // Кнопка создания диалогового окна для выбора директории btnOpenDir = new JButton("Открыть директорию"); // Кнопка создания диалогового окна для сохранения файла btnSaveFile = new JButton("Сохранить файл"); // Кнопка создания диалогового окна для сохранения файла btnFileFilter = new JButton("Фильтрация файлов"); // Создание экземпляра JFileChooser fileChooser = new JFileChooser(); // Подключение слушателей к кнопкам addFileChooserListeners(); // Размещение кнопок в интерфейсе JPanel contents = new JPanel(); contents.add(btnOpenDir ); contents.add(btnSaveFile ); contents.add(btnFileFilter); setContentPane(contents); // Вывод окна на экран setSize(360, 110); setVisible(true); >public static void main(String[] args) < // Локализация компонентов окна JFileChooser UIManager.put( "FileChooser.saveButtonText", "Сохранить"); UIManager.put( "FileChooser.cancelButtonText", "Отмена"); UIManager.put( "FileChooser.fileNameLabelText", "Наименование файла"); UIManager.put( "FileChooser.filesOfTypeLabelText", "Типы файлов"); UIManager.put( "FileChooser.lookInLabelText", "Директория"); UIManager.put( "FileChooser.saveInLabelText", "Сохранить в директории"); UIManager.put( "FileChooser.folderNameLabelText", "Путь директории"); new FileChooserTest(); >>
Следует отметить, что компоненты диалогового окна локализованы с использованием метода put менеджера пользовательского интерфейса UIManager библиотеки Swing.
Листинг метода addFileChooserListeners
В методе addFileChooserListeners() к каждой кнопке подключается свой слушатель, который формирует собственное диалоговое окно с определенными настройками.
Выбор директории
btnOpenDir.addActionListener(new ActionListener() < public void actionPerformed(ActionEvent e) < fileChooser.setDialogTitle("Выбор директории"); // Определение режима - только каталог fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int result = fileChooser.showOpenDialog(FileChooserTest.this); // Если директория выбрана, покажем ее в сообщении if (result == JFileChooser.APPROVE_OPTION ) JOptionPane.showMessageDialog(FileChooserTest.this, fileChooser.getSelectedFile()); >>);
В коде определяется заголовок окна и режим открытия (JFileChooser.DIRECTORIES_ONLY). Интерфейс окна JFileChooser в режиме выбора директории представлен на следующем скриншоте.
Сохранение файла
btnSaveFile.addActionListener(new ActionListener() < public void actionPerformed(ActionEvent e) < fileChooser.setDialogTitle("Сохранение файла"); // Определение режима - только файл fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); int result = fileChooser.showSaveDialog(FileChooserTest.this); // Если файл выбран, то представим его в сообщении if (result == JFileChooser.APPROVE_OPTION ) JOptionPane.showMessageDialog(FileChooserTest.this, "Файл '" + fileChooser.getSelectedFile() + " ) сохранен"); >>);
В коде определяется заголовок окна и режим открытия (JFileChooser.FILES_ONLY). Интерфейс окна JFileChooser в режиме сохранения файла представлен на следующем скриншоте.
Использование фильтра
Покажем два способа подключения файлового фильтра. Первый способ — файловый фильтр можно создать и подключить к объекту JFileChooser с использованием класса FileNameExtensionFilter, пример использования которого представлен в следующем коде.
import javax.swing.filechooser.FileNameExtensionFilter; . FileNameExtensionFilter filter = new FileNameExtensionFilter( "Word & Excel", "docx", "xlsx"); fileChooser.setFileFilter(filter);
Второй способ — используем вспомогательный внутренний класс FileFilterExt, наследующий свойства класса FileFilter, в котором определяем два поля (расширение файлов extension, описание description) и переопределяем методы accept и getDescription.
// Фильтр выбора файлов определенного типа class FileFilterExt extends javax.swing.filechooser.FileFilter < String extension ; // расширение файла String description; // описание типа файлов FileFilterExt(String extension, String descr) < this.extension = extension; this.description = descr; >@Override public boolean accept(java.io.File file) < if(file != null) < if (file.isDirectory()) return true; if( extension == null ) return (extension.length() == 0); return file.getName().endsWith(extension); >return false; > // Функция описания типов файлов @Override public String getDescription() < return description; >>
В следующем коде слушателя выбора файла для кнопки btnFileFilter определяется заголовок окна, в цикле создаются экземпляры фильтров FileFilterExt, которые подключаются к fileChooser, и определяется режим открытия (JFileChooser.FILES_ONLY).
btnFileFilter.addActionListener(new ActionListener() < public void actionPerformed(ActionEvent e) < fileChooser.setDialogTitle("Выберите файл"); // Определяем фильтры типов файлов for (int i = 0; i < FILTERS[0].length; i++) < FileFilterExt eff = new FileFilterExt(FILTERS[i][0], FILTERS[i][1]); fileChooser.addChoosableFileFilter(eff); >// Определение режима - только файл fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); int result = fileChooser.showSaveDialog(FileChooserTest.this); // Если файл выбран, покажем его в сообщении if (result == JFileChooser.APPROVE_OPTION ) JOptionPane.showMessageDialog(FileChooserTest.this, "Выбран файл ( " + fileChooser.getSelectedFile() + " )"); > >);
Интерфейс окна JFileChooser в режиме выбора файла с использованием файлового фильтра представлен на следующем скриншоте.
Скачать примеры
Исходные коды примеров, рассмотренных на странице, можно скачать здесь (2.20 Кб).