| <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| <html xmlns="http://www.w3.org/1999/xhtml"> |
| <head> |
| <title>Добавление выбора файлов к приложению Java</title> |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> |
| <link rel="stylesheet" type="text/css" href="../../../netbeans.css" media="screen" /> |
| <meta name="author" content="Petr Dvorak, Alyona Stashkova" /> |
| <meta name="description" content="How to add a file chooser to a Java application using the javax.swing.JFileChooser component and the NetBeans GUI Builder." /> |
| <meta name="keywords" content="javax.swing.JFileChooser, java, application, file, chooser, GUI builder" /> |
| </head> |
| <body> |
| |
| <h1>Добавление выбора файлов к приложению Java</h1> |
| <p><em>Составитель: Петр Дворжак <a href="http://blogs.oracle.com/joshis/entry/a_quick_jfilechooser_demo">(декабрь 2009 г.)</a>, редактор: Алёна Сташкова</em></p> |
| |
| <p> |
| В этом учебном курсе вы узнаете, как добавлять выбор файлов к приложению Java с помощью компонента <tt>javax.swing.JFileChooser</tt>. Код можно написать вручную, но использование редактора GUI Builder среды NetBeans существенно снижает объём работы. В рамках этого упражнения вы создадите небольшое приложение Java, загружающее файл <tt>.txt</tt> в текстовую область. </p> |
| |
| <p>Полученный проект <a href="https://netbeans.org/projects/samples/downloads/download/Samples%252FJava%252FJFileChooserDemo.zip" title="ZIP с демо-версией проекта (JFileChooserDemo)"> можно загрузить с использованием средства выбора файлов</a>. <br /> |
| </p> |
| |
| <p><b>Содержание</b></p> |
| <img alt="Содержимое этой страницы применимо к IDE NetBeans 7.0 и более поздним версиям" class="stamp" src="../../../images_www/articles/73/netbeans-stamp-80-74-73.png" title="Содержимое этой страницы применимо к IDE NetBeans 7.0 и более поздним версиям" /> |
| <ul> |
| <li><a href="#app" title="Создание приложения"> Создание приложения</a></li> |
| <li><a href="#menu" title=" Создание формы приложения ">Создание формы приложения </a></li> |
| <li><a href="#filechooser" title="Добавление выбора файлов">Добавление выбора файлов</a></li> |
| <li><a href="#config" title="Настройка выбора файлов">Настройка выбора файлов</a></li> |
| <li><a href="#run" title="Запуск приложения">Выполнение приложения</a></li> |
| </ul> |
| <p><b>Для работы с этим учебным курсом требуются программное обеспечение и ресурсы, перечисленные ниже.</b></p> |
| |
| <table> |
| <tbody> |
| <tr> |
| <th class="tblheader" scope="col">Программное обеспечение или материал</th> |
| <th class="tblheader" scope="col">Требуемая версия</th> |
| </tr> |
| <tr> |
| <td class="tbltd1"><a href="http://netbeans.org/downloads/">IDE NetBeans</a></td> |
| <td class="tbltd1">Версия 7.0 или более поздняя </td> |
| </tr> |
| <tr> |
| <td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Комплект для разработки приложений на языке Java</a> (JDK)</td> |
| <td class="tbltd1">Версия 6, 7 или 8 </td> |
| </tr> |
| |
| </tbody> |
| </table> |
| |
| |
| <h2><a name="app"></a>Создание приложения</h2> |
| |
| <p>Прежде всего необходимо создать приложение Java:</p> |
| <ol> |
| <li>Выберите в главном меню "Файл > Новый проект". Выберите категорию "Java" и тип проекта "Приложение Java". Нажмите кнопку "Далее".</li> |
| <li>В качестве имени проекта введите <code>JFileChooserDemo</code>, затем укажите местоположение проекта.</li> |
| <li>Снимите флажок "Создать главный класс". |
| <p class="align-center"><a href="../../../images_www/articles/72/java/gui-filechooser/newproj.png" rel="lytebox" title="Мастер создания проектов"> <img alt="Мастер создания проектов" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/newproj-small.png"></a></p></li> |
| <li>Нажмите кнопку "Завершить".</li> |
| |
| </ol> |
| |
| |
| <h2><a name="menu"></a>Создание формы приложения</h2> |
| <p>В этом разделе вы создадите контейнер <tt>JFrame</tt> и добавите к нему несколько компонентов.</p> |
| |
| <p><b>Создание формы JFrame:</b></p> |
| <ol> |
| <li>Щелкните правой кнопкой мыши узел "Исходные файлы" и выберите пункт "Создать > Другое". Выберите категорию "Формы Swing GUI" и тип файла "JFrameForm". Нажмите кнопку "Далее".</li> |
| <li>В поле "Имя класса" введите <code>JFileChooserDemo</code>.</li> |
| <li>В поле "Пакет" введите <code>jfilechooserdemo.resources</code>. |
| <p class="align-center"><a href="../../../images_www/articles/72/java/gui-filechooser/newjframeform.png" rel="lytebox" title="Создается новый контейнер JFrame"> <img alt="Создается новый контейнер JFrame" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/newjframeform-small.png"></a></p></li> |
| |
| <li>Нажмите кнопку "Завершить".</li> |
| <li>В окне "Свойства" введите <code>Demo application</code> в качестве свойства "Заголовок" и нажмите ENTER для подтверждения.</li> |
| </ol> |
| <p><b>Чтобы добавить компоненты к форме JFrame, выполните следующие действия.</b></p> |
| <ol> |
| <li>В окне "Палитра" откройте категорию "Меню Swing", выберите компонент "Строка меню" и перетащите его в левый верхний угол JFrame. |
| |
| <p class="notes"><b>Примечание.</b> Если палитра не отображается, выберите 'Окно > Палитра' в главном меню. </p> |
| <p class="align-center"><a href="../../../images_www/articles/72/java/gui-filechooser/menubaradded.png" rel="lytebox" title="Строка меню добавлена в форму JFrame"> <img alt="Строка меню добавлена в форму JFrame" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/menubaradded-small.png"></a></p></li> |
| |
| <li>Правой кнопкой мыши щелкните элемент "Правка" компонента "Строка меню" и выберите в контекстном меню пункт "Удалить". |
| </li> |
| <li>Чтобы добавить пункт меню, позволяющий открывать компонент FileChooser из выполняемого приложения, в категории "Меню Swing" в окне "Палитра" выберите новый пункт меню (JMenuItem1), перетащите его в элемент "Строка меню" и поместите его в поле "Файл" элемента "Строка меню". |
| <p class="align-center"><a href="../../../images_www/articles/72/java/gui-filechooser/menuitemadded.png" rel="lytebox" title="Пункт меню добавлен в строку меню"> <img alt="Пункт меню добавлен в строку меню" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/menuitemadded-small.png"></a></p> |
| <p class="notes"><b>Примечание. </b> Убедитесь, что панель меню выбрана до перетаскивания другого элемента меню в него, чтобы добавить этот другой элемент на панель меню. </p></li> |
| |
| <li>Правой кнопкой мыши щелкните элемент jMenuItem1 в режиме конструирования и выберите 'Изменить имя переменной' в контекстном меню. Измените имя элемента на <code>Open</code> и нажмите кнопку "ОК".</li> |
| <li>Убедитесь, что элемент jMenuItem1 все еще выбран в режиме проектирования. Нажмите клавишу ПРОБЕЛ, чтобы изменить текст компонента. Измените текст на <code>Open</code> и нажмите ENTER для подтверждения.</li> |
| <li>Укажите обработчик действий для пункта меню "Open". Правой кнопкой мыши щелкните пункт меню и выберите в контекстном меню "События >Действие > Выполненное действие". GUI Builder автоматически переключается в режим просмотра исходного кода, и создается новый метод обработчика событий с именем <tt>OpenActionPerformed()</tt>. Окно навигатора должно выглядеть следующим образом: |
| <p class="align-center"><img alt="Пункт меню добавлен в строку меню" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/openactionperformednavigator.png"></p></li> |
| <li>Чтобы добавить пункт меню для выхода элемента FileChooser из создаваемого приложения, вернитесь в режим проектирования, в категории "Меню Swing" в окне "Палитра" выберите пункт меню JMenuItem1 и перетащите его в элемент "Строка меню" под пункт меню "Open". Место вставки элемента <tt>JMenuItem1</tt> выделено оранжевым цветом. |
| <p class="align-center"><a href="../../../images_www/articles/72/java/gui-filechooser/highlighting.png" rel="lytebox" title="Выделение"> <img alt="Выделение" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/highlighting-small.png"></a></p></li> |
| <li>Щелкните правой кнопкой мыши элемент <tt>jMenuItem1</tt> в режиме конструирования и выберите 'Изменить имя переменной' в контекстном меню. Измените имя элемента на <code>Exit</code> и нажмите кнопку "ОК".</li> |
| <li>Убедитесь, что элемент <tt>jMenuItem1</tt> все еще выбран в режиме конструирования. Нажмите клавишу ПРОБЕЛ, чтобы изменить текст компонента. Измените текст на <tt>Exit</tt> и нажмите ENTER для подтверждения.</li> |
| <li>Укажите обработчик действий для пункта меню "Exit". Правой кнопкой мыши щелкните пункт меню и выберите в контекстном меню "События >Действие > Выполненное действие". GUI Builder автоматически переключается в режим просмотра исходного кода, и создается новый метод обработчика событий с именем <code>ExitActionPerformed()</code>. В окне навигатора, под узлом <code>OpenActionPerformed()</code> отображается узел <code>ExitActionPerformed</code>. </li> |
| <li>Чтобы сделать пункт меню "Exit" рабочим, в тело метода <code>ExitActionPerformed()</code> необходимо включить следующий исходный код: |
| <pre class="samplecode"> |
| System.exit(0); </pre></li> |
| <li>Переключитесь обратно в режим проектирования. Перетащите текстовую область (<tt>JTextArea</tt>) из категории 'Элементы управления Swing' палитры на форму, как показано на иллюстрации. |
| <p class="align-center"><a href="../../../images_www/articles/72/java/gui-filechooser/textareadded.png" rel="lytebox" title="Текстовая область добавлена в форму JForm"> <img alt="Текстовая область добавлена в форму JForm" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/textareadded-small.png"></a></p></li> |
| <li>Измените размер компонента, чтобы оставить место для текста, который отобразится в выборе файлов позже. Измените имя переменной на <code>textarea</code>. Форма должна иметь следующий вид: |
| <p class="align-center"><a href="../../../images_www/articles/72/java/gui-filechooser/jfilechooserdemoview_final.png" rel="lytebox" title="Приложение Java - конструктор графического интерфейса пользователя"> <img alt="Приложение Java - конструктор графического интерфейса пользователя" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/jfilechooserdemoview_final-small.png"></a></p></li> |
| </ol> |
| |
| <p>Основным упражнением данного учебного курса была настройка простого приложения Java. Сейчас следует добавить фактический выбор файлов.</p> |
| |
| <h2><a name="filechooser"></a>Добавление выбора файлов</h2> |
| |
| <ol> |
| <li>Выберите Окно > Навигация > Навигатор, чтобы открыть окно 'Навигатор'(если оно еще не открыто).</li> |
| <li>В навигаторе щелкните правой кнопкой мыши узел <tt>Другие компоненты</tt>. Выберите в контекстном меню пункт "Добавить из палитры > Диалоговые окна Swing > Выбор файлов |
| |
| <p class=tips> |
| Помимо использования контекстного меню <tt>Добавить из палитры</tt> можно также перетащить компонент <tt>JFileChooser</tt> из категории 'Окно Swing' палитры на белое поле конструктора графического интерфейса. Вы получите тот же результат, но данный метод требует немного больше усилий, так как эскиз <tt>JFileChooser</tt> занимает достаточно большую область экрана и можно случайно вставить окно в одну из панелей, что не соответствует поставленной задаче.</p> |
| </li> |
| |
| <li>Навигатор показывает, что элемент <tt>JFileChooser</tt> добавлен в форму. |
| </li> |
| <li>Щелкните узел <tt>JFileChooser</tt> правой кнопкой мыши и измените имя переменной на <code>fileChooser</code>. |
| |
| <p class="align-center"><img alt="Добавлено средство выбора файлов - представление навигатора" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/navigator_jframe.png"></p></li> |
| </ol> |
| |
| |
| |
| <p>Вы добавили выбор файлов. Далее следует настроить выбор файлов для отображения необходимого заголовка, добавить пользовательский фильтр файлов и интегрировать выбор файлов в приложение.</p> |
| |
| |
| |
| |
| |
| <h2><a name="config"></a>Настройка выбора файлов</h2> |
| |
| <h3>Реализация действия "Открыть"</h3> |
| |
| <ol> |
| <li>Выберите элемент <tt>JFileChooser</tt> в окне 'Навигатор', затем измените его свойства в диалоговом окне 'Свойства' Измените свойство <tt>dialogTitle</tt> на <code>Мой открытый диалог</code>, затем нажмите Enter и закройте диалоговое окно 'Свойства'</li> |
| <li> |
| Нажмите кнопку "Перейти к исходному тексту" в GUI Builder, чтобы вернуться к режиму просмотра исходного кода. Чтобы интегрировать выбор файлов в приложение, необходимо вставить в существующий метод <code>OpenActionPerformed()</code> следующий фрагмент кода. |
| |
| <pre class="samplecode"> |
| 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."); |
| } |
| } </pre> |
| <p class="notes"><b>Примечание. </b> Удалите первую и последнюю строку фрагмента кода, которые дублируют существующие строки в исходном файле. </p></li> |
| |
| <li>Если редактор создает отчет об ошибках в коде, щелкните правой кнопкой мыши в любом месте кода и выберите 'Исправить выражения импорта' или нажмите Ctrl+Shift+I. В диалоговом окне 'Исправить все выражения импорта' примите значения по умолчанию для обновления операторов импорта и нажмите OK.</li> |
| </ol> |
| <p> |
| Итак, метод FileChooser <tt>getSelectedFile()</tt> вызывается для определения файла, выбранного пользователем, в целях дальнейшей работы с ним. В этом примере считывается содержимое файлов, которое затем отображается в TextArea. |
| </p> |
| |
| |
| <h3>Реализация фильтра файлов</h3> |
| |
| <p>Теперь можно добавить пользовательский фильтр файлов, благодаря которому в выборе файлов будут отображаться только файлы<tt>*.txt</tt>.</p> |
| <ol> |
| |
| <li>Переключитесь в режим конструирования и выберите элемент <tt>fileChooser</tt> в окне 'Навигатор'. </li> |
| <li>В окне 'Свойства' нажмите кнопку обзора ('...') рядом со свойством <tt>fileFilter</tt>.</li> |
| <li>В диалоговом окне "Фильтр файлов" выберите пользовательский код из поля со списком. |
| <p class="align-center"><a href="../../../images_www/articles/72/java/gui-filechooser/combobox.png" rel="lytebox" title="Открытый список"> <img alt="Открытый список" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/combobox-small.png"></a></p></li> |
| <li> |
| Введите <tt>new MyCustomFilter()</tt> в текстовое поле. Нажмите кнопку "ОК". |
| </li> |
| <li> |
| Для использования пользовательского кода необходимо создать внутренний (или внешний) класс <tt>MyCustomFilter</tt>, расширяющий класс <tt>FileFilter</tt>. Чтобы создать внутренний класс, реализующий фильтр, скопируйте и вставьте следующий фрагмент кода в исходный код класса под операторами импорта. |
| |
| <pre class="samplecode"> |
| 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)"; |
| } |
| } </pre></li> |
| </ol> |
| <p class=notes><b>Примечание.</b> Описание реализации более интеллектуальных, поддерживающих переключение фильтров файлов просмотрите метод <a href="http://java.sun.com/javase/7/docs/api/javax/swing/JFileChooser.html#addChoosableFileFilter%28javax.swing.filechooser.FileFilter%29" target="_blank" title="Документация по API JDK">addChoosableFileFilter</a>. |
| </p> |
| |
| <h2><a name="run"></a>Выполнение приложения</h2> |
| <ol> |
| <li>Для запуска примера проекта щелкните проект JFileChooserDemo правой кнопкой мыши и нажмите кнопку "Выполнить". </li> |
| <li>В диалоговом окне "Запуск проекта" выберите главный класс <code>jfilechooserdemo.resources.JFileChooserDemo</code> и нажмите кнопку "ОК". |
| <p class="align-center"><img alt="Выполнить" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/run.png"></p> |
| </li> |
| <li>В меню 'Файл' запущенного демо-приложения выберите 'Открыть', чтобы инициировать действие. Результат должен иметь следующий вид: |
| <p class="align-center"><a href="../../../images_www/articles/72/java/gui-filechooser/result_jfilechooserdemo.png" rel="lytebox" title="Демо-версия JFileChooser - результат"> <img alt="Демо-версия JFileChooser - результат" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/result_jfilechooserdemo-small.png"></a></p> |
| </li> |
| |
| <li>Чтобы закрыть приложение, выберите "Выход" в меню "Файл". </li> |
| </ol> |
| <p>Следует обратить внимание на другие полезные окна и диалоговые окна Swing, например ColorChooser или OptionPane в палитре графического интерфейса.</p> |
| |
| <div class="feedback-box" ><a href="/about/contact_form.html?to=3&subject=Feedback:%20Adding%20a%20FileChooser">Отправить отзыв по этому учебному курсу</a></div> |
| <br style="clear:both;" /> |
| |
| <h2><a name="next"></a>Что дальше?</h2> |
| |
| <ul> |
| <li><a href="http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG920">Реализация графических интерфейсов Java</a> в документе <i>Разработка приложений в IDE NetBeans</i> |
| <li><a href="gui-binding.html">Привязка компонентов Bean и данных в приложениях Java с помощью IDE NetBeans</a></li> |
| <li><a href="gui-automatic-i18n.html">Интерналионализация формы графического интерфейса с помощью IDE NetBeans</a></li> |
| <li><a href="http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html" target="_blank" title="Использование выбора файлов">Учебный курс по Java: использование средств выбора файлов</a> </li> |
| </ul> |
| |
| </body> |
| </html> |