| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
| <html xmlns="http://www.w3.org/1999/xhtml"> |
| <head> |
| <!-- -*- xhtml -*- --> |
| <title>Курс по использованию модуля Wizard в NetBeans на платформе NetBeans 6.5</title> |
| <link rel="stylesheet" type="text/css" href="https://netbeans.org/netbeans.css"> |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
| <meta name="AUDIENCE" content="NBUSER"> |
| <meta name="TYPE" content="ARTICLE"> |
| <meta name="EXPIRES" content="N"> |
| <meta name="developer" content="geertjan.wielenga@sun.com"> |
| <meta name="indexed" content="y"> |
| <meta name="description" |
| content="A walk-through of the |
| basic features of the Wizard API classes."> |
| <!-- Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. --> |
| <!-- Use is subject to license terms.--> |
| </head> |
| |
| <body> |
| |
| <h1>Курс по использованию модуля Wizard</h1> |
| |
| <p>В этом учебном курсе вы узнаете, как использовать основные функциональные возможности, предлагаемые классами Wizard <a href="http://bits.netbeans.org/dev/javadoc/org-openide-dialogs/org/openide/package-summary.html">интерфейса API NetBeans </a>.</p> |
| |
| <p><b>Содержимое</b></p> |
| |
| <p><img src="../images/articles/69/netbeans-stamp7-8-9.png" class="stamp" width="114" height="114" alt="Содержимое на этой странице относится к среде NetBeans IDE 6.5, 6.7, 6.8" title="Содержимое на этой странице относится к среде NetBeans IDE 6.5, 6.7, 6.8" /></p> |
| |
| <ul class="toc"> |
| <li><a href="#set">Создание модуля проекта</a> |
| <li><a href="#wiz">Создание инфраструктуры мастера</a> |
| <li><a href="#action">Регистрация класса действия мастера</a> |
| <li><a href="#design">Проектирование содержимого мастера</a> |
| <li><a href="#process">Обработка данных пользователя</a> |
| <li><a href="#validate">Проверка данных пользователя</a> |
| <li><a href="#persist">Сохранение данных при перезапуске</a> |
| <li><a href="#brand">Брэндинг мастера</a> |
| <li><a href="#further">Дополнительные сведения</a> |
| </ul> |
| |
| |
| <p class="tips"> В приложениях платформы NetBeans существует возможность создания различных мастеров. Если необходимо создать мастер, который отображается в диалоговом окне создания проекта, обратитесь к <a href="https://platform.netbeans.org/tutorials/nbm-projectsamples.html">Учебному курсу по модулю добавления примера проекта</a>. Если необходимо создать мастер, который отображается в диалоговом окне создания файла, обратитесь к <a href="http://platform.netbeans.org/tutorials/nbm-filetemplates.html">Учебному курсу по созданию модулей шаблонов файлов</a>. В этом учебном курсе будет рассмотрено создание общего мастера, который появляется при щелчке кнопки на панели инструментов. |
| |
| |
| <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="https://netbeans.org/downloads/index.html">Среда IDE NetBeans</a></td> |
| <td class="tbltd1">версия 6.7 или выше </td> |
| </tr> |
| <tr> |
| <td class="tbltd1"><a href="http://java.sun.com/javase/downloads/index.jsp">Комплект для разработчика на языке Java (JDK)</a></td> |
| <td class="tbltd1">версия 6 или<br/>версия 5</td> |
| </tr> |
| </tbody> |
| </table> |
| |
| <!-- ===================================================================================== --> |
| |
| <h2 class="tutorial"><a name="set"></a>Создание модуля проекта</h2> |
| |
| <p>Сначала используется мастер "Новый модуль проекта". В конце его работы создается структура основных источников с некоторыми файлами по умолчанию, которые необходимы для любого модуля среды NetBeans. |
| |
| <ol> |
| <li>Выберите в меню "Файл" команду "Новый проект" (CTRL+SHIFT+N). В разделе "Категории" выберите параметр "Модули NetBeans". В области "Проекты" выберите "Модуль". Нажмите кнопку "Далее".</li> |
| <li>На панели "Имя и расположение" в поле "Имя проекта" введите текст <tt>DemoWizard</tt>. В поле "Расположение проекта" укажите любой каталог на компьютере. Оставьте параметр "Отдельный модуль" выбранным и не снимайте флажок "Установить как главный проект". Нажмите кнопку "Далее".</li> |
| <li>На панели "Основные настройки модуля" в поле "Основа кодового имени" введите текст <tt>org.demo.wizard</tt>.</li> |
| <li>Выберите "Создать слой XML". Не меняйте места расположения пакета локализации и файла слоя XML. Таким образом они будут сохранены с именем <tt>org/demo/wizard</tt>. Нажмите кнопку "Готово". </li> |
| </ol> |
| |
| <p> В среде IDE будет создан проект <tt>DemoWizard</tt>. Проект содержит все источники и метаданные проекта, например, сценарий построения проекта Ant. Проект откроется в среде IDE. Логическую структуру проекта можно просмотреть в окне "Проекты" (CTRL+1), а его файловую структуру – в окне "Файлы" (CTRL+2).</p> |
| |
| |
| <br /> |
| |
| <!-- ===================================================================================== --> |
| |
| <p><h2><a name="wiz"></a>Создание инфраструктуры мастера</h2> |
| |
| <p>В этом разделе рассмотрено использование мастера "Мастер" для добавления к модулю заглушек мастера. |
| |
| <ol> |
| <li><p>В окне "Проекты" щелкните правой кнопкой мыши узел проекта DemoWizard и выберите "Создать | Прочее", а затем "Разработка модуля | Мастер":</p> |
| <p><img border="1" src="../images/tutorials/wizard/wizard-wizard.png"/> |
| <p>Нажмите кнопку "Далее".</p> |
| </li> |
| <li><p>На панели "Тип мастера" в поле "Количество панелей мастера" введите 2, а другие значения оставьте без изменений:</p> |
| <p><img border="1" src="../images/tutorials/wizard/wizard-wizard-3.png"/> |
| <p>На вышеописанной панели используются следующие поля: |
| <ul> |
| <li><b>Тип регистрации.</b> Определяет место, из которого осуществляется доступ к мастеру. При выборе варианта "Особый" с помощью мастера Wizard будет создан новый класс действия, который используется для открытия и инициализации данного мастера. При выборе параметра "Создать файл" мастер Wizard зарегистрирует созданный мастер в файле <tt>layer.xml</tt> модуля. |
| <li><b>Последовательность этапов мастера.</b> Определяет, будет ли мастер иметь линейный характер и будет ли у пользователя возможность пропустить какие-либо этапы мастера, в зависимости от выбранных на предыдущих этапах параметров. По умолчанию для линейного мастера выбран вариант "Статический", в то время как для мастера с пропускаемыми шагами требуется наличие специального класса итерации, который создается при выборе варианта "Динамический". |
| <li><b>Количество панелей мастера.</b> Определяет количество панелей в создаваемом мастере. Для каждого этапа мастера будет создано два файла Java: представление и контроллер. |
| </ul> |
| <p>Нажмите кнопку "Далее".</p> |
| </li> |
| <li><p>На панели "Имя и расположение" введите в поле "Префикс имени класса" текст <tt>Demo</tt>, а в раскрывающемся меню "Пакет" выберите основной пакет.</p> |
| <p><img border="1" src="../images/tutorials/wizard/wizard-wizard-4.png"/> |
| <p>Нажмите кнопку "Готово". </p> |
| </li> |
| </ol> |
| |
| <p>В окне "Проекты" должно отображаться следующее: |
| <p><img border="1" src="../images/tutorials/wizard/projects-window.png"/> |
| |
| <p><h2><a name="action"></a>Регистрация класса действия мастера</h2> |
| |
| <p>В этом разделе описывается изменение класса действия и его регистрация в файле <tt>layer.xml</tt>. |
| |
| <ol> |
| <li>Откройте файл <tt>DemoWizardAction.java</tt> и замените весь код следующим: |
| |
| <pre class=examplecode> |
| package org.demo.wizard; |
| |
| import java.awt.Component; |
| import java.awt.Dialog; |
| import java.awt.event.ActionEvent; |
| import java.awt.event.ActionListener; |
| import java.text.MessageFormat; |
| import javax.swing.JComponent; |
| import org.openide.DialogDisplayer; |
| import org.openide.WizardDescriptor; |
| |
| public final class DemoWizardAction implements ActionListener { |
| |
| private WizardDescriptor.Panel[] panels; |
| |
| public void actionPerformed(ActionEvent e) { |
| WizardDescriptor wizardDescriptor = new WizardDescriptor(getPanels()); |
| // {0} заменяется на WizardDesriptor.Panel.getComponent().getName() |
| wizardDescriptor.setTitleFormat(new MessageFormat("{0}")); |
| wizardDescriptor.setTitle("Заголовок диалогового окна мастера"); |
| Dialog dialog = DialogDisplayer.getDefault().createDialog(wizardDescriptor); |
| dialog.setVisible(true); |
| dialog.toFront(); |
| boolean cancelled = wizardDescriptor.getValue() != WizardDescriptor.FINISH_OPTION; |
| if (!cancelled) { |
| // любые действия |
| } |
| } |
| |
| /** |
| * Инициализация панелей, соответствующих отдельным этапам мастера |
| * и установка различных свойств, регулирующих внешний вид мастера. |
| */ |
| private WizardDescriptor.Panel[] getPanels() { |
| if (panels == null) { |
| panels = new WizardDescriptor.Panel[]{ |
| new DemoWizardPanel1(), |
| new DemoWizardPanel2() |
| }; |
| String[] steps = new String[panels.length]; |
| for (int i = 0; i < panels.length; i++) { |
| Component c = panels[i].getComponent(); |
| // Название этапа по умолчанию для имени компонента панели. Обычно используется |
| // для получения имени выбора цели, которое появляется |
| // в перечне этапов. |
| steps[i] = c.getName(); |
| if (c instanceof JComponent) { // assume Swing components |
| JComponent jc = (JComponent) c; |
| // Задает номер этапа для компонента |
| // TODO использует org.openide.dialogs >= 7.8, может использовать WizardDescriptor.PROP_*: |
| jc.putClientProperty("WizardPanel_contentSelectedIndex", new Integer(i)); |
| // Задание имени этапа для панели |
| jc.putClientProperty("WizardPanel_contentData", steps); |
| // Включение создания субтитров на каждом этапе |
| jc.putClientProperty("WizardPanel_autoWizardStyle", Boolean.TRUE); |
| // Отображает этапы на левой стороне с изображением на заднем фоне |
| jc.putClientProperty("WizardPanel_contentDisplayed", Boolean.TRUE); |
| // Включение нумерации для всех этапов |
| jc.putClientProperty("WizardPanel_contentNumbered", Boolean.TRUE); |
| } |
| } |
| } |
| return panels; |
| } |
| |
| public String getName() { |
| return "Start Sample Wizard"; |
| } |
| |
| } |
| </pre> |
| |
| </li> |
| |
| <p class="tips"> Используется тот же код, что и сгенерированный, за исключением реализации <tt>ActionListener</tt>вместо <tt>CallableSystemAction</tt>. Это сделано потому, что <tt>ActionListener</tt> является стандартным классом JDK, а <tt>CallableSystemAction</tt> - нет. Поскольку используется платформа NetBeans 6.5, можно использовать стандартный класс JDK, что более удобно и требует меньше кода. |
| |
| <li>Регистрация класса действий в файле <tt>layer.xml</tt> осуществляется следующим образом: |
| |
| <pre class=examplecode> |
| <filesystem> |
| <folder name="Actions"> |
| <folder name="File"> |
| <file name="org-demo-wizard-DemoWizardAction.instance"> |
| <attr name="delegate" newvalue="org.demo.wizard.DemoWizardAction"/> |
| <attr name="iconBase" stringvalue="org/demo/wizard/icon.png"/> |
| <attr name="instanceCreate" methodvalue="org.openide.awt.Actions.alwaysEnabled"/> |
| <attr name="noIconInMenu" stringvalue="false"/> |
| </file> |
| </folder> |
| </folder> |
| <folder name="Toolbars"> |
| <folder name="File"> |
| <file name="org-demo-wizard-DemoWizardAction.shadow"> |
| <attr name="originalFile" stringvalue="Actions/File/org-demo-wizard-DemoWizardAction.instance"/> |
| <attr name="position" intvalue="0"/> |
| </file> |
| </folder> |
| </folder> |
| </filesystem> |
| </pre> |
| |
| <p class="tips"> Элемент "iconBase" указывает на изображение с именем "icon.png" в основном пакете. Если используется собственное изображение, оно должно быть размером 16x16 пикселей, или же необходимо сделать следующее: <img border="1" src="../images/tutorials/wizard/icon.png"/> |
| |
| <li>Запустите модуль. Запустится приложение, и на панели инструментов, в месте, которое задано в файле <tt>layer.xml</tt>, будут отображены кнопки: |
| |
| <p><img border="1" src="../images/tutorials/wizard/result-1.png"/> |
| |
| <p>Нажмите кнопку для открытия мастера: |
| <p><img border="1" src="../images/tutorials/wizard/result-2.png"/> |
| <p>Нажмите кнопку "Далее" и обратите внимание на то, что на последней панели кнопка "Готово" станет активной. |
| <p><img border="1" src="../images/tutorials/wizard/result-3.png"/> |
| |
| </li> |
| |
| </ol> |
| |
| <p>Теперь, когда структура мастера работает, добавим дополнительное содержимое. |
| |
| <p><h2><a name="design"></a>Проектирование содержимого мастера</h2> |
| |
| <p>В этом разделе описывается добавление содержимого к мастеру и настройка основных функций. |
| |
| <ol> |
| <li><p>Откройте файл <tt>DemoWizardAction.java</tt>. Обратите внимание, существует возможность настройки различных свойств мастера:</p> |
| <p><img border="1" src="../images/tutorials/wizard/wizard-tweaking.png"/></p> |
| <p>Описание этих свойств приведено <a href="http://ui.netbeans.org/docs/ui_apis/wide/index.html">здесь</a>. |
| </li> |
| <li><p>В <tt>DemoWizardAction.java</tt> измените текст <tt>wizardDescriptor.setTitle</tt> на следующий: |
| <pre class=examplecode> |
| wizardDescriptor.setTitle("Выбор музыки"); |
| </pre> |
| <li><p>Откройте файл<tt>DemoVisualPanel1.java</tt> и файл<tt>DemoVisualPanel2.java</tt> и используйте конструктор графического интерфейса пользователя "Matisse" для добавления компонентов Swing например, следующих:</p> |
| <p><img border="1" src="../images/tutorials/wizard/panel-1-design.png"/></p> |
| <p><img border="1" src="../images/tutorials/wizard/panel-2-design.png"/></p> |
| <p>Выше показаны файлы <tt>DemoVisualPanel1.java</tt> и <tt>DemoVisualPanel2.java</tt>, с компонентами Swing. |
| </li> |
| <li>Откройте две панели в представлении Источник и измените их методы <tt>getName()</tt> на "Имя и адрес" и "Сведения о музыканте", соответственно. |
| <li><p>Запустите модуль еще раз. При открытии мастера, в зависимости от добавленных компонентов Swing и использованных настроек, внешний вид мастера будет аналогичен следующему:</p> |
| <p><img border="1" src="../images/tutorials/wizard/result-4.png"/></p> |
| |
| <p class="tips"> Вышеприведенное изображение на левой панели мастера устанавливается в файле<tt>DemoWizardAction.java</tt> следующим образом: |
| |
| <pre class=examplecode> |
| wizardDescriptor.putProperty("WizardPanel_image", ImageUtilities.loadImage("org/demo/wizard/banner.png", true)); |
| </pre> |
| |
| </ol> |
| |
| <p>После того, как создано содержимое мастера, необходимо добавить программный код для обработки данных, которые вводятся пользователем. |
| |
| <!-- ===================================================================================== --> |
| |
| <h2 class="tutorial"><a name="process"></a>Обработка данных пользователя</h2> |
| |
| <p>В этом разделе описана процедура передачи данных пользователя от одной панели к другой, а также как отображение результатов для пользователя после нажатия кнопки "Готово". |
| |
| <ol> |
| <li><p>В классе <tt>WizardPanel</tt> для получения набора данных из визуальных средств поддержки используется метод <tt>storeSettings</tt>. Например, создадим модуль получения данных в файле <tt>DemoVisualPanel1.java</tt>, а затем получим к нему доступ из файла <tt>DemoWizardPanel1.java</tt>:</p> |
| |
| <pre class=examplecode> |
| public void storeSettings(Object settings) { |
| ((WizardDescriptor) settings).putProperty("name", ((DemoVisualPanel1)getComponent()).getNameField()); |
| ((WizardDescriptor) settings).putProperty("address", ((DemoVisualPanel1)getComponent()).getAddressField()); |
| } |
| </pre> |
| |
| </li> |
| <li><p>Затем, с помощью файла <tt>DemoWizardAction.java</tt> получим введенные параметры и обработаем их:</p> |
| |
| <pre class=examplecode> |
| public void actionPerformed(ActionEvent e) { |
| WizardDescriptor wizardDescriptor = new WizardDescriptor(getPanels()); |
| // {0} будет заменен на WizardDesriptor.Panel.getComponent().getName() |
| wizardDescriptor.setTitleFormat(new MessageFormat("{0}")); |
| wizardDescriptor.setTitle("Music Selection"); |
| Dialog dialog = DialogDisplayer.getDefault().createDialog(wizardDescriptor); |
| dialog.setVisible(true); |
| dialog.toFront(); |
| boolean cancelled = wizardDescriptor.getValue() != WizardDescriptor.FINISH_OPTION; |
| if (!cancelled) { |
| <b>String name = (String) wizardDescriptor.getProperty("name"); |
| String address = (String) wizardDescriptor.getProperty("address"); |
| DialogDisplayer.getDefault().notify(new NotifyDescriptor.Message(name + " " + address));</b> |
| } |
| } |
| </pre> |
| |
| <p class="tips"> <tt>NotifyDescriptor</tt> также можно использовать другими способами, например в окне завершения кода: |
| |
| <p><img border="1" src="../images/tutorials/wizard/notifydescriptor.png"/></p> |
| |
| |
| </ol> |
| |
| <p>Итак, была рассмотрена обработка данных, вводимых пользователем. |
| |
| <br /> |
| |
| <!-- ===================================================================================== --> |
| |
| <h2 class="tutorial"><a name="validate"></a>Проверка данных пользователя</h2> |
| |
| <p>В этом разделе описана процедура проверки данных, введенных пользователем, при нажатии клавиши "Далее". |
| |
| <ol> |
| <li><p>В <tt>DemoWizardPanel1</tt> измените сигнатуру класса, реализовав <tt>WizardDescriptor.ValidatingPanel</tt> вместо <tt>WizardDescriptor.Panel</tt>:</p> |
| |
| <pre class=examplecode> |
| public class DemoWizardPanel1 implements WizardDescriptor.ValidatingPanel |
| </pre> |
| |
| <li>В начале класса следует изменить объявление <tt>JComponent</tt> на объявление |
| |
| <pre class=examplecode> |
| private DemoVisualPanel1 component; |
| </pre> |
| |
| <li>При реализации необходимо использовать абстрактный метод, например: |
| |
| <pre class=examplecode> |
| @Override |
| public void validate() throws WizardValidationException { |
| |
| String name = component.getNameTextField().getText(); |
| if (name.equals("")){ |
| throw new WizardValidationException(null, "Invalid Name", null); |
| } |
| |
| } |
| </pre> |
| |
| <li><p>Запустите модуль. Нажмите кнопку "Далее", не вводя ничего в поле "Имя". После этого должен появиться нижеприведенный результат. Обратите внимание, что если данные не прошли проверку, то переход к следующей панели невозможен:</p> |
| |
| <p><img border="1" src="../images/tutorials/wizard/validation1.png"/></p> |
| |
| <li>Также, если поле было оставлено пустым, можно сделать кнопку "Далее" неактивной. Сначала необходимо объявить вверху класса логические переменные: |
| |
| <pre class=examplecode> |
| private boolean isValid = true; |
| </pre> |
| |
| <p>Затем переопределить <tt>isValid()</tt> следующим образом: |
| |
| <pre class=examplecode> |
| @Override |
| public boolean isValid() { |
| return isValid; |
| } |
| </pre> |
| |
| <p>Тогда, при вызове <tt>validate()</tt>, который происходит при нажатии кнопки "Далее", возвращается значение "false": |
| |
| <pre class=examplecode> |
| @Override |
| public void validate() throws WizardValidationException { |
| |
| String name = component.getNameTextField().getText(); |
| if (name.equals("")) { |
| <b>isValid = false;</b> |
| throw new WizardValidationException(null, "Недопустимое имя", null); |
| } |
| |
| } |
| </pre> |
| |
| <p>Другой вариант заключается в первоначальном задании значения логической переменной "false". Затем реализуется <tt>DocumentListener</tt>, который добавляет слушатель для поля и, при вводе пользователем в этом поле текста, изменяет значения логической переменной на "true" и вызывает метод <tt>isValid()</tt>. |
| </ol> |
| |
| <p>Итак, была рассмотрена проверка данных, вводимых пользователем. |
| |
| <p class="tips"> Для получения дополнительных сведений о проверке данных, введенных пользователем, обратитесь к примеру Тома Вилера в конце данного учебного курса. |
| |
| <br /> |
| |
| <!-- ===================================================================================== --> |
| |
| <h2 class="tutorial"><a name="persist"></a>Сохранение данных при перезапуске</h2> |
| |
| <p>В этом разделе описана процедура сохранения данных при закрытии приложения, и их дальнейшее получение мастером при повторном запуске. |
| |
| <ol> |
| |
| <li><p>В <tt>DemoWizardPanel1.java</tt> переопределите методы <tt>readSettings</tt> и <tt>storeSettings</tt> следующим образом:</p> |
| |
| <pre class=examplecode> |
| <b>JTextField nameField = ((DemoVisualPanel1) getComponent()).getNameTextField(); |
| JTextField addressField = ((DemoVisualPanel1) getComponent()).getAddressTextField();</b> |
| |
| @Override |
| public void readSettings(Object settings) { |
| <b>nameField.setText(NbPreferences.forModule(DemoWizardPanel1.class).get("namePreference", "")); |
| addressField.setText(NbPreferences.forModule(DemoWizardPanel1.class).get("addressPreference", ""));</b> |
| } |
| |
| @Override |
| public void storeSettings(Object settings) { |
| ((WizardDescriptor) settings).putProperty("name", nameField.getText()); |
| ((WizardDescriptor) settings).putProperty("address", addressField.getText()); |
| <b>NbPreferences.forModule(DemoWizardPanel1.class).put("namePreference", nameField.getText()); |
| NbPreferences.forModule(DemoWizardPanel1.class).put("addressPreference", addressField.getText());</b> |
| } |
| </pre> |
| |
| </li> |
| |
| <li><p>Запустите модуль еще раз и введите имя и адрес в первой панели мастера:</p> |
| <p><img border="1" src="../images/tutorials/wizard/nbpref1.png"/></p> |
| </li> |
| |
| <li><p>Закройте приложение, откройте меню "Файлы" и просмотрите свойства файла в папке <tt>build</tt>приложения. На экране должны появиться следующие настройки:</p> |
| <p><img border="1" src="../images/tutorials/wizard/nbpref2.png"/></p> |
| </li> |
| |
| <li><p>Еще раз запустите приложение. При следующем открытии мастера для задания значений в полях мастера будут автоматически использованы ранее заданные настройки.</p> |
| </li> |
| |
| </ol> |
| |
| <p>Итак, было рассмотрено сохранение данных при перезапуске. |
| |
| <br /> |
| |
| <!-- ===================================================================================== --> |
| |
| <h2 class="tutorial"><a name="brand"></a>Брэндинг мастера</h2> |
| |
| <p>В этом разделе описана процедура изменения наименования кнопки "Далее" в инфраструктуре мастера на надпись "Дополнительно". |
| |
| <p class="tips"> Под термином "брэндинг" подразумевается настройка, которая обычно заключается в незначительных изменениях с сохранением языка интерфейса, в то время как под понятием "интернационализация" или "локализация" подразумевается перевод на другие языки. Сведения относительно локализации модулей NetBeans приведены <a href="http://translatedfiles.netbeans.org/index-l10n.html">здесь</a>. |
| |
| <ol> |
| <li><p>В окне "Файлы" разверните папку <tt>branding</tt> и создайте нижеприведенную структуру файлов и папок:</p> |
| |
| <p><img border="1" src="../images/tutorials/wizard/branding-1.png"/></p> |
| |
| </li> |
| <li>Содержимое файла задайте следующим образом: |
| |
| <pre class=examplecode> |
| CTL_NEXT=&Дополнительно > |
| </pre> |
| |
| <p>Для остальных строк можно выполнить следующий брэндинг: |
| |
| <pre class=examplecode> |
| CTL_CANCEL |
| CTL_PREVIOUS |
| CTL_FINISH |
| CTL_ContentName |
| </pre> |
| |
| <p class="tips"> Кнопка "CTL_ContentName" по умолчанию настроена на "Шаги" и используется в левой панели мастера, если свойство "WizardPanel_autoWizardStyle" не было установлено как "FALSE". |
| |
| |
| </li> |
| <li><p>Запустите приложение. Кнопка "Далее" будет подписана "Дополнительно":</p> |
| |
| <p><img border="1" src="../images/tutorials/wizard/branding-2.png"/></p> |
| |
| |
| |
| <p class="tips"> Для удаления левой панели мастера можно использовать файл <tt>DemoWizardAction.java</tt>, как было описано ранее: |
| |
| </p><pre class="examplecode"> wizardDescriptor.putProperty("WizardPanel_autoWizardStyle", Boolean.FALSE); |
| </pre> |
| |
| <p>В результате вышеописанных настроек вид мастера будет следующим:</p> |
| |
| <p><img border="1" src="../images/tutorials/wizard/branding-3.png"/></p> |
| |
| </ol> |
| |
| <p>Был рассмотрен брэндинг строк, определенных в инфраструктуре мастера и создание собственной брендированной версии. |
| |
| <br /> |
| |
| <!-- ===================================================================================== --> |
| |
| <h2 class="tutorial"><a name="further"></a>Дополнительные сведения</h2> |
| |
| <p>Некоторые дополнительные сведения доступны в сети: |
| |
| <ul> |
| <li><p>Сайт о NetBeans Тома Вилера (щелкните изображение внизу):</p> |
| <p><a href="http://www.tomwheeler.com/netbeans/"><img border="1" src="../images/tutorials/wizard/tom.png"/></a></p> |
| |
| <p class="tips"> Вышеприведенные примеры, хотя и были написаны для среды NetBeans 5.5, были успешно опробованы в среде IDE NetBeans 6.5.1 в операционной системе Ubuntu Linux с JDK 1.6. |
| |
| <p>Особенно полезны данные примеры для демонстрации проверки пользовательских данных. |
| |
| <li>Блог Джирджена (Geertjan) |
| <ul> |
| <li><a href="http://blogs.oracle.com/geertjan/entry/how_wizards_work">Как работает мастер. Часть 1: введение</a> |
| <li><a href="http://blogs.oracle.com/geertjan/entry/how_wizards_work_part_2">Как работает мастер. Часть 2: различные типы</a> |
| <li><a href="http://blogs.oracle.com/geertjan/entry/how_wizards_work_part_3">Как работает мастер. Часть 3: ваш первый мастер</a> |
| <li><a href="http://blogs.oracle.com/geertjan/entry/how_wizards_work_part_4">Как работает мастер. Часть 4: ваш собственный итератор</a> |
| <li><a href="http://blogs.oracle.com/geertjan/entry/how_wizards_work_part_5">Как работает мастер. Часть 5: использование и внедрение существующих панелей</a> |
| <li><a href="http://blogs.oracle.com/geertjan/entry/creating_a_better_java_class">Создание мастера Better Java Class</a> |
| </ul> |
| |
| </ul> |
| |
| <br /> |
| |
| |
| |
| <h2><a name="version"></a>Управление версиями </h2> |
| |
| <p> |
| |
| <table width="76%" border="1"> |
| <tbody> |
| <tr> |
| <td> |
| <div align="left"><b>Версия</b></div> |
| </td> |
| <td> |
| <div align="left"><b>Дата</b></div> |
| </td> |
| <td> |
| <div align="left"><b>Изменения</b></div> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| 1 |
| </td> |
| <td> |
| 31 марта 2009 г. |
| </td> |
| <td> |
| Первоначальная версия. Выполнить: |
| |
| <p><ul> |
| <li><strike>Добавить раздел о проверке данных, введенных пользователем.</strike> |
| <li><strike>Добавить раздел о сохранении данных мастером и загрузке данных из мастера.</strike> |
| <li>Добавить таблицу с перечислением всех свойств WizardDescriptor. |
| <li>Добавить таблицу с перечислением и объяснением всех классов Wizard API. |
| <li>Добавить ссылки на Javadoc. |
| </ul> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| 2 |
| </td> |
| <td> |
| 1 апреля 2009 г. |
| </td> |
| <td> |
| Добавлен раздел о проверке данных с примером программного кода, который делает кнопку "Далее" неактивной. Также добавлен раздел о сохранении состояния. |
| </td> |
| </tr> |
| <tr> |
| <td> |
| 3 |
| </td> |
| <td> |
| 10 апреля 2009 г. |
| </td> |
| <td> |
| Приведены комментарии Тома Вилера, переписан раздел о брэндинге, так чтобы было больше информации о самом брэндинге, добавлены ссылки на сведения о локализации. |
| </td> |
| </tr> |
| |
| </tbody> |
| </table> |
| |
| </body> |
| |
| </html> |