Добавление выбора файлов к приложению Java
Составитель: Петр Дворжак (декабрь 2009 г.), редактор: Алёна Сташкова
В этом учебном курсе вы узнаете, как добавлять выбор файлов к приложению Java с помощью компонента javax.swing.JFileChooser. Код можно написать вручную, но использование редактора GUI Builder среды NetBeans существенно снижает объём работы. В рамках этого упражнения вы создадите небольшое приложение Java, загружающее файл .txt в текстовую область.
Вы можете загрузить созданный проект с выбором файла.
Содержание
Для работы с этим учебным курсом требуются программное обеспечение и ресурсы, перечисленные ниже.
Создание приложения
Прежде всего необходимо создать приложение Java:
- Выберите в главном меню "Файл > Новый проект". Выберите категорию "Java" и тип проекта "Приложение Java". Нажмите кнопку "Next" (Далее).
- В качестве имени проекта введите
JFileChooserDemo, затем укажите местоположение проекта.
- Снимите флажок "Создать главный класс".
- Проверьте, что установлен флажок "Установить как главный проект".
- Нажмите кнопку "Готово".
Создание формы приложения
В этом разделе вы создадите контейнер JFrame и добавите к нему несколько компонентов.
Создание формы JFrame:
- Щелкните правой кнопкой мыши узел "Исходные файлы" и выберите пункт "Создать > Другое". Выберите категорию "Формы Swing GUI" и тип файла "JFrameForm". Нажмите кнопку "Next" (Далее).
- В поле "Имя класса" введите
JFileChooserDemo.
- В поле "Пакет" введите
jfilechooserdemo.resources.
- Нажмите кнопку "Готово".
- В окне "Свойства" введите
Demo application в качестве свойства "Заголовок" и нажмите клавишу ВВОД для подтверждения.
Чтобы добавить компоненты к форме JFrame, выполните следующие действия.
- В окне "Палитра" откройте категорию "Меню Swing", выберите компонент "Строка меню" и перетащите его в левый верхний угол JFrame.
Примечание. Если окно палитры не отображается, выберите в главном меню пункты "Окно > Палитра" либо нажмите сочетание клавиш CTRL+SHIFT+8.
- Правой кнопкой мыши щелкните элемент "Правка" компонента "Строка меню" и выберите в контекстном меню пункт "Удалить".
- Чтобы добавить пункт меню, позволяющий открывать компонент FileChooser из выполняемого приложения, в категории "Меню Swing" в окне "Палитра" выберите новый пункт меню (JMenuItem1), перетащите его в элемент "Строка меню" и поместите его в поле "Файл" элемента "Строка меню".
Примечание. Прежде чем перетаскивать новый пункт меню, убедитесь, что элемент "Строка меню" выбран.
- Правой кнопкой мыши щелкните элемент jMenuItem1 в режиме проектирования и выберите в контекстном меню пункт "Изменить имя переменной". Измените имя элемента на
Open и нажмите кнопку "ОК".
- Убедитесь, что элемент jMenuItem1все еще выбран в режиме проектирования. Нажмите клавишу ПРОБЕЛ, чтобы изменить текст компонента. Измените текст на
Open и нажмите клавишу ВВОД для подтверждения.
- Укажите обработчик действий для пункта меню "Open". Правой кнопкой мыши щелкните пункт меню и выберите в контекстном меню "События >Действие > Выполненное действие". GUI Builder автоматически переключается в режим просмотра исходного кода, и создается новый метод обработчика событий с именем OpenActionPerformed(). Окно навигатора должно выглядеть следующим образом:
- Чтобы добавить пункт меню для выхода элемента FileChooser из создаваемого приложения, вернитесь в режим проектирования, в категории "Меню Swing" в окне "Палитра" выберите пункт меню JMenuItem1 и перетащите его в элемент "Строка меню" под пункт меню "Open". Место вставки элемента JMenuItem1 обозначено оранжевым цветом.

- Правой кнопкой мыши щелкните элемент jMenuItem1 в режиме проектирования и выберите в контекстном меню пункт "Изменить имя переменной". Измените имя элемента на
Exit и нажмите кнопку "ОК".
- Убедитесь, что элемент jMenuItem1 все еще выбран в режиме проектирования. Нажмите клавишу ПРОБЕЛ, чтобы изменить текст компонента. Измените текст на Exit и нажмите клавишу ВВОД для подтверждения.
- Укажите обработчик действий для пункта меню "Exit". Правой кнопкой мыши щелкните пункт меню и выберите в контекстном меню "События >Действие > Выполненное действие". GUI Builder автоматически переключается в режим просмотра исходного кода, и создается новый метод обработчика событий с именем
ExitActionPerformed(). В окне навигатора, под узлом OpenActionPerformed() отображается узел ExitActionPerformed.
- Чтобы сделать пункт меню "Exit" рабочим, в тело метода
ExitActionPerformed() необходимо включить следующий исходный код:
System.exit(0);
- Переключитесь обратно в режим проектирования. Перетащите текстовую область (JTextArea) из категории "Элементы управления Swing" окна "Палитра" в форму, как показано на следующей иллюстрации.
- Измените размер компонента, чтобы оставить место для текста, который отобразится в выборе файлов позже. Измените имя переменной на
textarea. Форма должна иметь следующий вид:
Основным упражнением данного учебного курса была настройка простого приложения Java. Сейчас следует добавить фактический выбор файлов.
Добавление выбора файлов
- Выберите "Окно > Навигация > Инспектор", чтобы открыть окно "Инспектор", если оно еще не открыто.
- В окне "Инспектор" щелкните правой кнопкой мыши узел "JFrame". Выберите в контекстном меню пункт "Добавить из палитры > Диалоговые окна Swing > Выбор файлов
Рекомендация для GUI Builder. Вместо использования контекстного меню "Добавить из палитры" можно перетащить компонент JFileChooser из категории "Окно Swing" палитры в область с белым фоном GUI Builder. Вы получите тот же результат, однако данный метод является более трудоемким, поскольку предварительный просмотр JFileChooser занимает достаточно большую область экрана, поэтому можно случайно вставить окно в одну из панелей, что не соответствует поставленной задаче.
- Окно "Инспектор" отображает добавление JFileChooser в форму.
- Правой кнопкой мыши щелкните узел JFileChooser и измените имя переменной на
fileChooser.
Вы добавили выбор файлов. Далее следует настроить выбор файлов для отображения необходимого заголовка, добавить пользовательский фильтр файлов и интегрировать выбор файлов в приложение.
Настройка выбора файлов
Реализация действия "Открыть"
- Выберите JFileChooser в окне "Инспектор", а затем измените его свойства в диалоговом окне "Свойства". Измените свойство dialogTitle на
Это мое диалоговое окно открытия, затем нажмите клавишу ВВОД и закройте диалоговое окно "Свойства".
-
Нажмите кнопку "Перейти к исходному тексту" в GUI Builder, чтобы вернуться к режиму просмотра исходного кода. Чтобы интегрировать выбор файлов в приложение, необходимо вставить в существующий метод
OpenActionPerformed() следующий фрагмент кода.
private void OpenActionPerformed(java.awt.event.ActionEvent evt) {
int returnVal = fileChooser.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
try {
// What to do with the file, e.g. display it in a TextArea
textarea.read( new FileReader( file.getAbsolutePath() ), null );
} catch (IOException ex) {
System.out.println("problem accessing file"+file.getAbsolutePath());
}
} else {
System.out.println("File access cancelled by user.");
}
}
Примечание. Удалите первую и последнюю строки фрагмента кода, дублирующие существующие строки исходного файла.
- Если в редакторе отобразится сообщение об ошибке кода, щелкните правой кнопкой мыши любой фрагмент кода и выберите пункт меню "Исправить выражения импорта" либо нажмите сочетание клавиш CTRL+SHIFT+I. В диалоговом окне "Исправить все выражения импорта" оставьте значения по умолчанию для обновления выражений импорта и нажмите кнопку "ОК".
Итак, метод FileChooser getSelectedFile() вызывается для определения файла, выбранного пользователем, в целях дальнейшей работы с ним. В этом примере считывается содержимое файлов, которое затем отображается в TextArea.
Реализация фильтра файлов
Теперь можно добавить пользовательский фильтр файлов, благодаря которому в выборе файлов будут отображаться только файлы*.txt.
- Переключитесь в режим проектирования и выберите элемент FileChooser в окне "Инспектор".
- В окне "Свойства" нажмите кнопку с многоточием ("..."), расположенную рядом со свойством "Фильтр файлов".
- В диалоговом окне "Фильтр файлов" выберите пользовательский код из поля со списком.

-
Введите new MyCustomFilter() в текстовое поле. Нажмите кнопку "ОК".
-
Для использования пользовательского кода необходимо создать внутренний (или внешний) класс MyCustomFilter, расширяющий класс FileFilter. Чтобы создать внутренний класс, реализующий фильтр, скопируйте и вставьте следующий фрагмент кода в исходный код класса под операторами импорта.
class MyCustomFilter extends javax.swing.filechooser.FileFilter {
@Override
public boolean accept(File file) {
// Разрешить только каталоги или файлы с расширением TXT
return file.isDirectory() || file.getAbsolutePath().endsWith(".txt");
}
@Override
public String getDescription() {
// Это описание будет отображаться в диалоговом окне,
// жестко запрограмированно = некрасиво, следует использовать интернационализацию
return "Text documents (*.txt)";
}
}
Примечание. Для получения сведений о внедрении более сложных, переключаемых фильтров файлов ознакомьтесь с методом в документации по интерфейсу API JDK.
Выполнение приложения
- Для запуска примера проекта щелкните проект JFileChooserDemo правой кнопкой мыши и нажмите кнопку "Выполнить".
-
В диалоговом окне "Запуск проекта" выберите главный класс
jfilechooserdemo.resources.JFileChooserDemo и нажмите кнопку "ОК".
- Чтобы запустить действие, выберите пункт "Открыть" в меню "Файл" в выполняемом демонстрационном приложении.
Результат должен иметь следующий вид:

- Чтобы закрыть приложение, выберите "Выход" в меню "Файл".
Следует обратить внимание на другие полезные окна и диалоговые окна Swing, например ColorChooser или OptionPane в палитре графического интерфейса.
Что дальше?