410013796724260
• Webmoney
R335386147728
Z369087728698
Диалоговое окно JFileChooserSwing включает мощное средство для работы с файлами — компонент 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
Режимы работы JFileChooserПеред открытием диалогового окна для выбора файлов или директории необходимо определить режим работы JFileChooser. Компонент JFileChooser может работать в одном из трех режимов, который сохраняется в свойстве fileSelectionMode :
Для определения режима используется метод setFileSelectionMode(mode). Возвращаемые компонентом JFileChooser значения
Пример использования 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 = {{"docx", "Файлы Word (*.docx)"},
{"pdf" , "Adobe Reader(*.pdf)"}};
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 Кб). |
