blob: 2e9f511b1190d4b2547b22368109f9d05ad7e9f8 [file] [log] [blame]
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
= Добавление выбора файлов к приложению Java
:jbake-type: tutorial
:jbake-tags: tutorials
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Добавление выбора файлов к приложению Java - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Добавление выбора файлов к приложению Java
_Составитель: Петр Дворжак link:http://blogs.oracle.com/joshis/entry/a_quick_jfilechooser_demo[+(декабрь 2009 г.)+], редактор: Алёна Сташкова_
В этом учебном курсе вы узнаете, как добавлять выбор файлов к приложению Java с помощью компонента ``javax.swing.JFileChooser`` . Код можно написать вручную, но использование редактора GUI Builder среды NetBeans существенно снижает объём работы. В рамках этого упражнения вы создадите небольшое приложение Java, загружающее файл ``.txt`` в текстовую область.
Полученный проект link:https://netbeans.org/projects/samples/downloads/download/Samples%252FJava%252FJFileChooserDemo.zip[+ можно загрузить с использованием средства выбора файлов+].
image::images/netbeans-stamp-80-74-73.png[title="Содержимое этой страницы применимо к IDE NetBeans 7.0 и более поздним версиям"]
*Для работы с этим учебным курсом требуются программное обеспечение и ресурсы, перечисленные ниже.*
|===
|Программное обеспечение или материал |Требуемая версия
|link:http://netbeans.org/downloads/[+IDE NetBeans+] |Версия 7.0 или более поздняя
|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Комплект для разработки приложений на языке Java+] (JDK) |Версия 6, 7 или 8
|===
== Создание приложения
Прежде всего необходимо создать приложение Java:
1. Выберите в главном меню "Файл > Новый проект". Выберите категорию "Java" и тип проекта "Приложение Java". Нажмите кнопку "Далее".
2. В качестве имени проекта введите `JFileChooserDemo`, затем укажите местоположение проекта.
3. Снимите флажок "Создать главный класс".
[.feature]
--
image::images/newproj-small.png[role="left", link="images/newproj.png"]
--
. Нажмите кнопку "Завершить".
== Создание формы приложения
В этом разделе вы создадите контейнер ``JFrame`` и добавите к нему несколько компонентов.
*Создание формы JFrame:*
1. Щелкните правой кнопкой мыши узел "Исходные файлы" и выберите пункт "Создать > Другое". Выберите категорию "Формы Swing GUI" и тип файла "JFrameForm". Нажмите кнопку "Далее".
2. В поле "Имя класса" введите `JFileChooserDemo`.
3. В поле "Пакет" введите `jfilechooserdemo.resources`.
[.feature]
--
image::images/newjframeform-small.png[role="left", link="images/newjframeform.png"]
--
. Нажмите кнопку "Завершить".
. В окне "Свойства" введите `Demo application` в качестве свойства "Заголовок" и нажмите ENTER для подтверждения.
*Чтобы добавить компоненты к форме JFrame, выполните следующие действия.*
1. В окне "Палитра" откройте категорию "Меню Swing", выберите компонент "Строка меню" и перетащите его в левый верхний угол JFrame.
*Примечание.* Если палитра не отображается, выберите 'Окно > Палитра' в главном меню.
[.feature]
--
image::images/menubaradded-small.png[role="left", link="images/menubaradded.png"]
--
. Правой кнопкой мыши щелкните элемент "Правка" компонента "Строка меню" и выберите в контекстном меню пункт "Удалить".
. Чтобы добавить пункт меню, позволяющий открывать компонент FileChooser из выполняемого приложения, в категории "Меню Swing" в окне "Палитра" выберите новый пункт меню (JMenuItem1), перетащите его в элемент "Строка меню" и поместите его в поле "Файл" элемента "Строка меню".
[.feature]
--
image::images/menuitemadded-small.png[role="left", link="images/menuitemadded.png"]
--
*Примечание. * Убедитесь, что панель меню выбрана до перетаскивания другого элемента меню в него, чтобы добавить этот другой элемент на панель меню.
. Правой кнопкой мыши щелкните элемент jMenuItem1 в режиме конструирования и выберите 'Изменить имя переменной' в контекстном меню. Измените имя элемента на `Open` и нажмите кнопку "ОК".
. Убедитесь, что элемент jMenuItem1 все еще выбран в режиме проектирования. Нажмите клавишу ПРОБЕЛ, чтобы изменить текст компонента. Измените текст на `Open` и нажмите ENTER для подтверждения.
. Укажите обработчик действий для пункта меню "Open". Правой кнопкой мыши щелкните пункт меню и выберите в контекстном меню "События >Действие > Выполненное действие". GUI Builder автоматически переключается в режим просмотра исходного кода, и создается новый метод обработчика событий с именем ``OpenActionPerformed()`` . Окно навигатора должно выглядеть следующим образом:
image::images/openactionperformednavigator.png[]
. Чтобы добавить пункт меню для выхода элемента FileChooser из создаваемого приложения, вернитесь в режим проектирования, в категории "Меню Swing" в окне "Палитра" выберите пункт меню JMenuItem1 и перетащите его в элемент "Строка меню" под пункт меню "Open". Место вставки элемента ``JMenuItem1`` выделено оранжевым цветом.
[.feature]
--
image::images/highlighting-small.png[role="left", link="images/highlighting.png"]
--
. Щелкните правой кнопкой мыши элемент ``jMenuItem1`` в режиме конструирования и выберите 'Изменить имя переменной' в контекстном меню. Измените имя элемента на `Exit` и нажмите кнопку "ОК".
. Убедитесь, что элемент ``jMenuItem1`` все еще выбран в режиме конструирования. Нажмите клавишу ПРОБЕЛ, чтобы изменить текст компонента. Измените текст на ``Exit`` и нажмите ENTER для подтверждения.
. Укажите обработчик действий для пункта меню "Exit". Правой кнопкой мыши щелкните пункт меню и выберите в контекстном меню "События >Действие > Выполненное действие". GUI Builder автоматически переключается в режим просмотра исходного кода, и создается новый метод обработчика событий с именем `ExitActionPerformed()`. В окне навигатора, под узлом `OpenActionPerformed()` отображается узел `ExitActionPerformed`.
. Чтобы сделать пункт меню "Exit" рабочим, в тело метода `ExitActionPerformed()` необходимо включить следующий исходный код:
[source,java]
----
System.exit(0);
----
. Переключитесь обратно в режим проектирования. Перетащите текстовую область ( ``JTextArea`` ) из категории 'Элементы управления Swing' палитры на форму, как показано на иллюстрации.
[.feature]
--
image::images/textareadded-small.png[role="left", link="images/textareadded.png"]
--
. Измените размер компонента, чтобы оставить место для текста, который отобразится в выборе файлов позже. Измените имя переменной на `textarea`. Форма должна иметь следующий вид:
[.feature]
--
image::images/jfilechooserdemoview_final-small.png[role="left", link="images/jfilechooserdemoview_final.png"]
--
Основным упражнением данного учебного курса была настройка простого приложения Java. Сейчас следует добавить фактический выбор файлов.
== Добавление выбора файлов
1. Выберите Окно > Навигация > Навигатор, чтобы открыть окно 'Навигатор'(если оно еще не открыто).
2. В навигаторе щелкните правой кнопкой мыши узел ``Другие компоненты`` . Выберите в контекстном меню пункт "Добавить из палитры > Диалоговые окна Swing > Выбор файлов
Помимо использования контекстного меню ``Добавить из палитры`` можно также перетащить компонент ``JFileChooser`` из категории 'Окно Swing' палитры на белое поле конструктора графического интерфейса. Вы получите тот же результат, но данный метод требует немного больше усилий, так как эскиз ``JFileChooser`` занимает достаточно большую область экрана и можно случайно вставить окно в одну из панелей, что не соответствует поставленной задаче.
. Навигатор показывает, что элемент ``JFileChooser`` добавлен в форму.
. Щелкните узел ``JFileChooser`` правой кнопкой мыши и измените имя переменной на `fileChooser`.
image::images/navigator_jframe.png[]
Вы добавили выбор файлов. Далее следует настроить выбор файлов для отображения необходимого заголовка, добавить пользовательский фильтр файлов и интегрировать выбор файлов в приложение.
== Настройка выбора файлов
=== Реализация действия "Открыть"
1. Выберите элемент ``JFileChooser`` в окне 'Навигатор', затем измените его свойства в диалоговом окне 'Свойства' Измените свойство ``dialogTitle`` на `Мой открытый диалог`, затем нажмите Enter и закройте диалоговое окно 'Свойства'
2. Нажмите кнопку "Перейти к исходному тексту" в GUI Builder, чтобы вернуться к режиму просмотра исходного кода. Чтобы интегрировать выбор файлов в приложение, необходимо вставить в существующий метод `OpenActionPerformed()` следующий фрагмент кода.
[source,java]
----
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. В диалоговом окне 'Исправить все выражения импорта' примите значения по умолчанию для обновления операторов импорта и нажмите OK.
Итак, метод FileChooser ``getSelectedFile()`` вызывается для определения файла, выбранного пользователем, в целях дальнейшей работы с ним. В этом примере считывается содержимое файлов, которое затем отображается в TextArea.
=== Реализация фильтра файлов
Теперь можно добавить пользовательский фильтр файлов, благодаря которому в выборе файлов будут отображаться только файлы ``*.txt`` .
1. Переключитесь в режим конструирования и выберите элемент ``fileChooser`` в окне 'Навигатор'.
2. В окне 'Свойства' нажмите кнопку обзора ('...') рядом со свойством ``fileFilter`` .
3. В диалоговом окне "Фильтр файлов" выберите пользовательский код из поля со списком.
[.feature]
--
image::images/combobox-small.png[role="left", link="images/combobox.png"]
--
. Введите ``new MyCustomFilter()`` в текстовое поле. Нажмите кнопку "ОК".
. Для использования пользовательского кода необходимо создать внутренний (или внешний) класс ``MyCustomFilter`` , расширяющий класс ``FileFilter`` . Чтобы создать внутренний класс, реализующий фильтр, скопируйте и вставьте следующий фрагмент кода в исходный код класса под операторами импорта.
[source,java]
----
class MyCustomFilter extends javax.swing.filechooser.FileFilter {
@Override
public boolean accept(File file) {
// Allow only directories, or files with ".txt" extension
return file.isDirectory() || file.getAbsolutePath().endsWith(".txt");
}
@Override
public String getDescription() {
// This description will be displayed in the dialog,
// hard-coded = ugly, should be done via I18N
return "Text documents (*.txt)";
}
}
----
*Примечание.* Описание реализации более интеллектуальных, поддерживающих переключение фильтров файлов просмотрите метод link:http://java.sun.com/javase/7/docs/api/javax/swing/JFileChooser.html#addChoosableFileFilter%28javax.swing.filechooser.FileFilter%29[+addChoosableFileFilter+].
== Выполнение приложения
1. Для запуска примера проекта щелкните проект JFileChooserDemo правой кнопкой мыши и нажмите кнопку "Выполнить".
2. В диалоговом окне "Запуск проекта" выберите главный класс `jfilechooserdemo.resources.JFileChooserDemo` и нажмите кнопку "ОК".
image::images/run.png[]
. В меню 'Файл' запущенного демо-приложения выберите 'Открыть', чтобы инициировать действие. Результат должен иметь следующий вид:
[.feature]
--
image::images/result_jfilechooserdemo-small.png[role="left", link="images/result_jfilechooserdemo.png"]
--
. Чтобы закрыть приложение, выберите "Выход" в меню "Файл".
Следует обратить внимание на другие полезные окна и диалоговые окна Swing, например ColorChooser или OptionPane в палитре графического интерфейса.
link:/about/contact_form.html?to=3&subject=Feedback:%20Adding%20a%20FileChooser[+Отправить отзыв по этому учебному курсу+]
== Что дальше?
* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG920[+Реализация графических интерфейсов Java+] в документе _Разработка приложений в IDE NetBeans_
* link:gui-binding.html[+Привязка компонентов Bean и данных в приложениях Java с помощью IDE NetBeans+]
* link:gui-automatic-i18n.html[+Интерналионализация формы графического интерфейса с помощью IDE NetBeans+]
* link:http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html[+Учебный курс по Java: использование средств выбора файлов+]