| // |
| // 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: использование средств выбора файлов+] |