Составители
и Томас Пэвек (Tomas Pavek), редакторы Рут Кастерер (Ruth Kusterer) и Патрик Кигэн (Patrick Keegan).
В данном руководстве рассматривается создание простого графического интерфейса пользователя и добавление к нему несложной функциональности. В частности, будет рассмотрен код, определяющий поведение кнопок и полей в форме Swing.
В руководстве демонстрируется разработка проекта графического интерфейса с добавлением ряда кнопок и текстовых полей. Текстовые поля предназначены для получения вводимой пользователем информации и вывода результата работы программы. Кнопка будет инициировать некоторые внутренние операции программы. Создаваемое приложение представляет собой простой, но функциональный калькулятор.
Первым действием является создание проекта IDE для разрабатываемого приложения. Дадим проекту имя "NumberAddition".
Выберите "File > New Project". Также можно щелкнуть значок "New Project" на панели инструментов среды IDE.
В области "Categories" выберите узел "Java". В области "Projects" выберите "Java Application". Нажмите кнопку "Next".
Введите NumberAddition в поле "Project Name" и укажите путь к местоположению проекта, например, в домашнем каталоге.
Не устанавливайте флажок "Use Dedicated Folder for Storing Libraries". (При использовании среды IDE NetBeans 6.0 эта возможность недоступна.)
Проверьте, что установлен флажок "Set as Main Project". Удалите флажок "Create Main Class", если он установлен.
Нажмите кнопку "Finish".
Упражнение 2: Создание внешнего интерфейса
Для продолжения процесса создания интерфейса необходимо создать контейнер Java, в который будут помещены другие требуемые элементы графического интерфейса. В этом действии контейнер будет создан с помощью элемента JFrame. Контейнер будет помещен в новый пакет, который будет отображаться в узле "Source Packages".
Создание контейнера "JFrame"
В окне "Projects" щелкните правой кнопкой мыши узел "NumberAddition" и выберите "New > JFrame Form".
Введите имя класса "NumberAdditionUI".
Выберите пакет my.numberaddition.
Нажмите кнопку "Finish".
Среда IDE создает форму NumberAdditionUI и класс NumberAdditionUI в приложении NumberAddition и открывает форму NumberAdditionUI в GUI Builder. Пакет my.NumberAddition заменяет собой пакет по умолчанию.
Добавление элементов: создание внешнего интерфейса
Далее с помощью окна "Palette" внешний интерфейс приложения заполняется панелью JPanel. После этого добавляются три элемента "JLabel" (текстовые подписи), три элемента "JTextField" (текстовые поля) и три элемента "JButton" (кнопки). При отсутствии опыта работы с GUI Builder ознакомьтесь с информацией о принципах размещения элементов на экране, представленной в руководстве Разработка графического интерфейса в среде IDE NetBeans.
После перетаскивания и размещения указанных выше элементов элемент "JFrame" должен выглядеть так, как показано на рисунке ниже.
Если окно "Palette" в верхнем правом углу среды IDE отсутствует, выберите "Windows > Palette".
Сначала выберите панель JPanel в окне "Palette" и перетащите ее на элемент JFrame.
Панель JPanel будет выделена. Перейдите к окну "Properties" и нажмите кнопку с многоточием (...) рядом с полем "Border" для выбора стиля границы.
В диалоговом окне "Border" выберите "TitledBorder" из списка и введите Number Addition в поле "Title". Для сохранения изменений и закрытия диалогового окна нажмите кнопку "OK".
Теперь на экране должен отображаться пустой элемент "JFrame" с заголовком "Number Addition", как показано на рисунке. Согласно рисунку, добавьте к нему три подписи "JLabel", три текстовых поля "JTextField" и три кнопки "JButtons".
Переименование элементов
На этом этапе будет выполнено переименование элементов, которые были добавлены к элементу "JFrame".
Дважды щелкните jLabel1 и измените свойство текста на First Number.
Дважды щелкните jLabel2 и измените текст на Second Number.
Дважды щелкните jLabel3 и измените текст на Result.
Удалите стандартный текст из jTextField1. Для изменения текста сначала щелкните флажок один раз и через некоторое время щелкните его второй раз. При этом может потребоваться восстановить первоначальный размер поля jTextField1. Повторите это действие для полей jTextField2 и jTextField3.
Измените отображаемый текст jButton1 на Clear. (Для изменения текста кнопки щелкните кнопку правой клавишей мыши и выберите "Edit Text". В качестве альтернативы можно щелкнуть кнопку, выдержать паузу и щелкнуть еще раз.)
Измените отображаемый текст jButton2 на Add.
Измените отображаемый текст jButton3 на Exit.
Теперь готовый графический интерфейс должен выглядеть так, как показано на рисунке ниже:
Упражнение 3: Добавление функциональности
В этом упражнении мы добавим необходимую функциональность к кнопкам "Add", "Clear" и "Exit". Поля jTextField1 и jTextField2 будут использоваться для ввода значений пользователем, а jTextField3 – для вывода результата работы программы. Создаваемая программа представляет собой простейший калькулятор. Итак, приступим!
Добавление функциональности к кнопке "Exit"
Для того чтобы кнопки стали функциональными, каждой из них необходимо присвоить обработчик событий, который будет отвечать за реагирование на события. В нашем случае требуется идентифицировать событие нажатия кнопки – путем щелчка мышью или с помощью клавиатуры. Поэтому будет использоваться интерфейс "ActionListener", предназначенный для обработки событий "ActionEvent".
Щелкните правой кнопкой мыши кнопку "Exit". В появившемся меню выберите "Events > Action > ActionPerformed". Учтите, что меню содержит множество других событий, на которые может реагировать программа! При выборе события "actionPerformed" среда IDE автоматически добавляет интерфейс "ActionListener" к кнопке "Exit" и создает метод-обработчик, который будет отвечать за обработку метода "actionPerformed".
В среде IDE автоматически открывается окно "Source Code", где отображается место вставки действия, которое должно выполняться кнопкой при ее нажатии (с помощью мыши или клавиатуры). Окно "Source Code" должно содержать следующие строки:
Теперь добавим код действия, которое должна выполнять кнопка "Exit". В вышеприведенном коде следует заменить строку "Добавить:" текстом "System.exit(0);". Готовый код кнопки "Exit" должен выглядеть следующим образом:
Щелкните вкладку "Design" в верхней части рабочей области для возврата к экрану "Form Design".
Щелкните правой кнопкой мыши кнопку "Clear" (jButton1). В появившемся меню выберите "Events > Action > actionPerformed".
Нажатие кнопки "Clear" должно приводить к удалению всего текста из всех текстовых полей "jTextField". Для этого следует добавить код, аналогичный приведенному выше. Готовый исходный код должен выглядеть следующим образом:
Этот код удаляет текст из всех трех полей "JTextField", оставляя их пустыми.
Добавление функциональности к кнопке "Add"
Кнопка "Add" должна выполнять три действия.
Сначала она принимает данные, введенные пользователем в полях jTextField1 и jTextField2, и преобразовывает их из типа "String" в тип "Float".
Затем должно производиться сложение двух чисел.
Полученная сумма должна преобразовываться в тип "String" и помещаться в поле jTextField3.
Начнем!
Щелкните вкладку "Design" в верхней части рабочей области для возврата к экрану "Form Design".
Щелкните правой кнопкой мыши кнопку "Add" (jButton3). В появившемся меню выберите "Events > Action > actionPerformed".
Добавьте код действий, которые должна выполнять кнопка "Add". Готовый исходный код должен выглядеть следующим образом:
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt){
// Сначала определяются переменные типа "Float".
float num1, num2, result;
// Затем необходимо преобразовать текст в тип "Float".
num1 = Float.parseFloat(jTextField1.getText());
num2 = Float.parseFloat(jTextField2.getText());
// Теперь можно произвести сложение.
result = num1+num2;
// Значение результата передается в поле "jTextField3".
// Одновременно с этим оно преобразовывается из типа "Float" в тип "String".
jTextField3.setText(String.valueOf(result));
}
Теперь программа полностью готова, и можно приступить к ее сборке и выполнению.
Упражнение 4: Выполнение программы
Последним действием является сборка и запуск программы.
Выберите "Build > Build Main Project".
После завершения процесса сборки выберите "Run > Run Main Project".
При появлении окна с сообщением о том, что для проекта "NumberAddition" не установлен главный класс, необходимо выберите в качестве главного класса "my.NumberAddition.NumberAdditionUI" и нажмите кнопку "OK".
Теперь созданная программа готова к использованию.
В данном руководстве был рассмотрен процесс добавления функциональности к элементам графического интерфейса с помощью GUI Builder в среде NetBeans.
Механизм обработки событий
В этом руководстве было рассмотрено реагирование на простое событие нажатия кнопки. Существует множество событий, на которые может реагировать приложение. Просмотреть в среде IDE список доступных событий, которые могут обрабатываться элементами графического интерфейса, можно следующим образом:
Вернитесь к файлу NumberAdditionUI.java в редакторе. Щелкните вкладку "Design" для просмотра структуры графического интерфейса в GUI Builder.
Щелкните правой кнопкой мыши любой элемент графического интерфейса и выберите "Events" в появившемся меню. Теперь можно просто изучить содержимое меню, не выбирая никаких пунктов.
В качестве альтернативы можно выбрать "Properties" в меню "Window". В окне "Properties" щелкните вкладку "Events". Вкладка "Events" позволяет просмотреть и изменить обработчики событий, связанные с текущим активным элементом графического интерфейса.
Приложение также может реагировать на нажатие клавиш, одинарный, двойной или тройной щелчок мышью, перемещение указателя мыши, изменение размера окна и фокусировки. Меню "Events" позволяет автоматически создать обработчики событий для всех этих событий. Наиболее распространенным из них является событие "Action". (Для получения дополнительных сведений см. практические рекомендации по обработке событий из руководства Sun Java Events Tutorial.)
Как выполняется обработка событий? Каждый раз при выборе события в меню "Event" среда IDE автоматически создает интерфейс прослушивания событий (event listener) и привязывает его к элементу. Для более подробного ознакомления с процессом обработки событий выполните следующие действия.
Вернитесь к файлу NumberAdditionUI.java в редакторе. Щелкните вкладку "Source" для просмотра исходного кода графического интерфейса.
Выполните прокрутку вниз и просмотрите реализованные методы jButton1ActionPerformed(), jButton2ActionPerformed() и jButton3ActionPerformed(). Эти методы называются обработчиками событий.
Теперь перейдите к методу initComponents(). Если этот метод отсутствует, найдите строку Generated Code и щелкните знак + рядом с этой строкой для отображения скрытого метода initComponents().
Обратите внимание на синий блок, окружающий метод initComponents(). Этот код был автоматически создан средой IDE и не может быть изменен пользователем.
Теперь посмотрите на сам метод initComponents(). Помимо прочего, он содержит код, инициализирующий элементы графического интерфейса и помещающий их в форму. Этот код создается и обновляется автоматически при размещении и изменении элементов в режиме проектирования.
В методе initComponents() найдите следующий фрагмент:
В этом месте к элементу графического интерфейса, в данном случае к jButton3, добавляется объект прослушивания событий "ActionListener". Интерфейс "ActionListener" имеет метод "actionPerformed" объекта "ActionEvent", который реализуется путем простого вызова обработчика событий jButton3ActionPerformed. Теперь эта кнопка реагирует на события действий. Каждый раз при нажатии кнопки создается событие "ActionEvent", которое передается в метод "actionPerformed" интерфейса прослушивания событий, исполняющий код, предусмотренный разработчиком для этого события в обработчике событий.
Как правило, для получения возможности реагирования каждый интерактивный элемент графического интерфейса должен быть зарегистрирован в каком-либо интерфейсе прослушивания событий и иметь связанный обработчик событий. Однако среда IDE NetBeans обеспечивает автоматическую привязку интерфейса прослушивания, что позволяет разработчику сконцентрироваться на реализации бизнес-логики, которая должна инициироваться событием.
По всем вопросам, а также для получения поддержки и информации по последним разработкам функций среды IDE NetBeans см. рассылки
. Для присоединения к рассылке отправьте пустое сообщение на адрес
.