blob: 9c1a9c2cf01b55fc3cfa389b65e761be01b4e390 [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 с помощью настройщика GridBag
:jbake-type: tutorial
:jbake-tags: tutorials
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Создание расширенной формы Java с помощью настройщика GridBag - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Создание расширенной формы Java с помощью настройщика GridBag
Авторы: Ян Стола (Jan Stola), Томас Павек (Tomas Pavek), Алена Сташкова (Alyona Stashkova)
Этот учебный курс является второй частью в комплекте из двух частей, в которой описывается разработка расширенной формы Java с помощью расширенных функций настройщика GridBag IDE NetBeans.
Этот курс разработан как руководство по созданию компоновки компонентов интерфейса пользователя, не требующему написания кода компоновки вручную, а также по процессу внесения дополнительных изменений в существующую форму для реализации конкретной компоновки, необходимой для проекта.
Каждая из статей в этом курсе охватывает свой набор функций.
* Часть 1. link:../java/gbcustomizer-basic.html[+Создание простой формы Java с помощью настройщика GridBag+]
* Часть 2. Создание расширенной формы Java с помощью настройщика GridBag
В link:../java/gbcustomizer-basic.html[+первом учебном курсе в этой серии+] описывается изменение простой формы Java с помощью базовых функций настройщика GridBag IDE NetBeans. Этот учебный курс позволяет изучить использование дополнительных функции настройщика GridBag для изменения компоновки существующей формы.
image::images/netbeans-stamp-80-74.png[title="Содержимое этой страницы применимо к IDE NetBeans 7.1 или более поздней версии"]
*Для работы с этим учебным курсом требуется следующее программное обеспечение и ресурсы.*
|===
|Программное обеспечение или материал |Требуемая версия
|link:http://netbeans.org/downloads/index.html[+IDE NetBeans+] |Версия 7.1 или более поздние
|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Комплект для разработчика на языке Java (JDK)+] |Версия 6, 7 или 8
|link:https://netbeans.org/projects/samples/downloads/download/Samples%252FJava%252Fgbcustomizer-advanced-tutorial.zip[+gbcustomizer-advanced-tutorial.zip+] |Архив с демонстрационным проектом, содержащим начальную и целевую компоновки учебного курса.
|===
*Примечания*
* Проект, используемый в качестве отправной точки для данной серии, можно загрузить в форме архива ``.zip`` .
* В данном руководстве основное внимание уделено созданию структуры контейнера. Добавление функциональных возможностей к графическому интерфейсу выходит за его рамки.
== Открытие примера проекта
До начала компоновки компонентов с помощью настройщика GridBag, загрузите link:https://netbeans.org/projects/samples/downloads/download/Samples%252FJava%252Fgbcustomizer-advanced-tutorial.zip[+gbcustomizer-advanced-tutorial.zip+], разархивируйте проект ``GridBagCustomizerAdvancedTutorial`` на жесткий диск и откройте его в IDE NetBeans.
1. Загрузите проект link:https://netbeans.org/projects/samples/downloads/download/Samples%252FJava%252Fgbcustomizer-advanced-tutorial.zip[+gbcustomizer-advanced-tutorial.zip+] в любое место на своем компьютере.
2. На вкладке 'Проекты' в IDE NetBeans выберите 'Открыть проект' в меню 'Файл', перейдите в проект ``GridBagCustomizerAdvancedTutorial`` , распакованный на предыдущем этапе, и нажмите 'Открыть проект'. Папка проекта может находиться в содержащей его папке, также именуемой ``GridBagCustomizerAdvancedTutorial`` .
*Примечание.* В проекте ``GridBagCustomizerAdvancedTutorial`` используются библиотеки классов ``JUnit`` и ``JUnit 4`` , которые можно найти в центре обновлений. Необходимо щелкнуть 'Решить проблемы' в диалоговом окне 'Открыть проект', затем щелкните 'Решить' в диалоговом окне 'решить проблемы ссылок' и установить подключаемый модуль в соответствии с инструкциями в установщике IDE NetBeans. После завершения установки нажмите 'Готово', чтобы закрыть диалоговое окно установщика IDE NetBeans, затем нажмите 'Закрыть', чтобы закрыть диалоговое окно 'Разрешение проблем ссылок'.
[start=3]
. Разверните ``Пакеты исходного кода`` > учебное руководство и дважды щелкните ``ContactsAdvancedInitial.java`` .
В конструкторе графического интерфейса откроется образец формы в режиме конструктора.
[.feature]
--
image::images/sampleform-small.png[role="left", link="images/sampleform.png"]
--
== Вызов настройщика GridBag
Для отображения настройщика GridBag выполните следующие действия:
1. В режиме конструктора выберите форму JFrame.
2. Щелкните форму правой кнопкой мыши и выберите ``Customize Layout`` ("Настроить компоновку").
Откроется диалоговое окно настройки компоновки, как показано ниже.
[.feature]
--
image::images/customizerdialog-small.png[role="left", link="images/customizerdialog.png"]
--
*Примечание.* В этом учебном курсе GridBagLayout уже задан. При работе с другой формой, в шаге 2 выше, щелкните правой кнопкой мыши форму и выберите ``Настроить компоновку`` > ``Компоновка GridBag`` (при этом будет включен элемент меню ``Настройка компоновки`` ) и завершите процедуру.
== Расширенные функции
В данном разделе мы используем расширенные функции настройщика GridBag для реорганизации компонентов формы ``ContactsAdvancedInitial`` в соответствии с целевой компоновкой, показанной ниже.
image::images/targetlayout.png[]
*Примечание.* Для просмотра целевой компоновки в используемой IDE NetBeans на вкладке 'Проекты' разверните ``учебный курс 'Исходные пакеты' >`` и дважды щелкните ``ContactsAdvancedFinal.java`` .
Форма ``ContactsAdvancedFinal`` , включающая целевую компоновку, откроется в представлении проектирования конструктора графического интерфейса.
=== Вставка новой строки
Раздел ``Phone`` ("Телефон") существующей компоновки включает три записи телефонов. Чтобы дополнить его добавлением новой метки и тестового поля (например, имени пользователя Skype между ``Cell Phone:`` ("Мобильный телефон:") и ``Home Phone:`` ("Домашний телефон")), создайте там новую строку:
1. В диалоговом окне 'Настройка компоновки' щелкните правой кнопкой мыши заголовок строки, содержащей данные ``Домашний телефон`` .
2. Выберите ``Insert Row Before`` ("Вставить строку перед").
image::images/insertrow.png[]
Добавляется новая строка, как показано на следующем рисунке.
image::images/rowinserted.png[]
=== Добавление новых компонентов
Чтобы добавить новую метку и текстовое поле к новой добавленной строке, выполните следующие шаги:
1. Щелкните правой кнопкой мыши первую ячейку добавленной строки.
2. Выберите в контекстном меню ``Add Components ("Добавление компонентов") > Swing Controls ("Элементы управления Swing") > Label ("Метка")`` , как показано ниже.
[.feature]
--
image::images/addcomponent-small.png[role="left", link="images/addcomponent.png"]
--
Выделенное ``JLabel1`` отображается в первой ячейке.
[start=3]
. Щелкните правой кнопкой мыши первую ячейку добавленной строки.
[start=4]
. В контекстном меню выберите ``Add Components ("Добавление компонентов") > Swing Controls ("Элементы управления Swing") > Text Field ("Текстовое поле")`` .
Выделенное поле ``JTextField1`` отображается во второй ячейке.
image::images/highlightedtextfield.png[]
После добавления компонентов необходимо указать их ограничения gridbag, чтобы выровнять их с другими компонентами.
Выберите поле ``JTextField1`` в области сетки и выполните следующие действия в Property Sheet ("Таблица свойств"):
1. В поле со списком Grid Width ("Ширина сетки") введите ``3`` и нажмите ENTER.
2. В поле со списком Fill ("Заполнение") выберите ``horizontal`` .
3. В поле со списком Anchor ("Привязка") прокрутите вниз и выберите ``Baseline`` .
4. В текстовом поле Weight X ("Вес по Х") введите ``1.0`` и нажмите ENTER.
image::images/textfieldconstraints.png[]
В области сетки выберите компонент ``JLabel1`` и укажите его ограничение ``Anchor`` ("Привязка"), прокрутив вниз и выбрав ``Baseline Leading`` в Property Sheet ("Таблица свойств").
Выберите компоненты ``JLabel1`` и ``JTextField1`` в области сетки, щелкните кнопку обзора (image::images/browsebutton.png[]) справа от текстового поля ``Вставки`` . Отобразится диалоговое окно ``Insets`` ("Вставки"). Введите ``5`` в текстовое поле ``Top:`` ("Верх:") и нажмите кнопку "OК".
Форма должна выглядеть, как показано ниже.
image::images/constraintsset.png[]
*Примечание.* Настройщик GridBag позволяет добавлять, удалять и изменять положение компонентов в макете. Для изменения свойств компонентов компоновки, таких как фон или текст, используйте окно проектирования конструктора графического интерфейса.
Чтобы установить отображаемый текст для ``JLabel1`` , выполните следующие действия:
1. Нажмите кнопку Close ("Закрыть"), чтобы закрыть диалоговое окно Customize Layout ("Настройка компоновки").
2. В представлении Design ("Проект") выберите ``JLabel1`` и нажмите клавишу F2 (либо выберите Edit Text ("Изменить текст") из контекстного меню).
3. Удалите выбранный текст и введите ``Skype:`` .
4. Нажмите ENTER.
Чтобы удалить текст компонента ``JTextField1`` , выполните следующие действия:
1. В представлении Design ("Проект") выберите ``JTextField1`` и нажмите клавишу F2 (либо выберите Edit Text ("Изменить текст") из контекстного меню).
2. Удалите выбранный текст и нажмите ENTER.
=== Реорганизация компоновки
Настройщик GridBag позволяет сэкономить время и усилия, быстро меняя положение компонентов формы на нужное.
Чтобы сменить компоновку раздела ``Phone`` ("Телефон") и положение четырех существующих текстовых полей с одного столбца на два столбца с двумя текстовыми полями каждый, выполните следующие действия:
1. Щелкните форму правой кнопкой мыши и выберите ``Customize Layout`` ("Настроить структуру") из контекстного меню.
2. В диалоговом окне настройки структуры щелкните четыре компонента ``JTextField`` , удерживая клавишу CTRL, чтобы выбрать их все.
3. Перетащите правый край текстовых полей влево в положение, при котором текстовые поля занимают только второй столбец сетки не занимают третий и четвертый столбцы сетки).
image::images/textfieldsonecolumn.png[]
Настройщик GridBag может изменить размер нескольких компонентов одновременно, тем самым давая место для второго столбца текстовых полей.
[start=4]
. Щелкните вне формы, чтобы отменить выбор текстовых полей, размер которых был изменен.
[start=5]
. Удерживая клавишу CTRL, щелкните компоненты ``Skype:`` , ``Home Phone:`` , ``JLabel`` и ``JTextField`` в разделе ``Phone`` , чтобы выбрать их.
[start=6]
. Наведите курсор на выбранные компоненты и перетащите их направо от двух верхних текстовых полей.
image::images/movesecondcolumn.png[]
*Примечание.* Перед перетаскиванием убедитесь, что курсор не преобразовался в двустороннюю стрелку, в противном случае будет изменен размер выборки.
После перемещения компонентов форма должна выглядеть как показано ниже.
image::images/extrarows.png[]
Чтобы удалить ненужные строки 10 и 11 (индексы строк 9 и 10 соответственно), щелкните правой кнопкой мыши заголовки строк и выберите ``Удалить строку`` в контекстном меню.
Раздел ``Phone`` станет более компактным.
image::images/textfieldsmoved.png[]
Чтобы исправить расстояние между строками во втором столбце, выполните следующие действия.
1. Удерживая клавишу CTRL, щелкните метки ``Skype:`` и ``Home Phone:`` , чтобы выбрать их в области сетки.
2. Нажмите кнопку обзора (image::images/browsebutton.png[]) справа от текстового поля ``Вставки`` .
Отобразится диалоговое окно ``Insets`` ("Вставки").
[start=3]
. Введите ``5`` в текстовое поле ``Left:`` ("Лево:") и нажмите кнопку "OК".
=== Введение подконтейнеров
Компоновка на основе сетки порой создает ненужные зависимости, которые необходимо решать посредством подконтейнеров.
Если нажать кнопку 'Проверить макет' на панели инструментов (image::images/testlayoutbutton.png[] ) и проверить изменение размера по горизонтали для текущего макета, будет заметно, что вокруг кнопок 'Обзор', 'ОК' и 'Отмена' создаются нежелательные пустые места.
[.feature]
--
image::images/unwantedspace-small.png[role="left", link="images/unwantedspace.png"]
--
Это происходит потому, что четвертый столбец состоит как из текстовых полей, так и из кнопок (первые должны вырасти, вторые же нет). Необходимо изменить компоновку, чтобы дополнительное пространство вокруг кнопок ``Browse`` ("Просмотр") было занято текстовыми полями ``Street`` и ``City:`` . Текущий макет гарантирует, что правый край текстовых полей ``Улица:`` и ``Город:`` находятся на той же высоте, что и левый край текстового поля ``Домашний телефон:`` . Чтобы сделать эти позиции независимыми, выполните следующие действия:
1. Удерживая клавишу CTRL, щелкните текстовое поле ``Street:`` и кнопку ``Browse`` справа от него, чтобы выбрать их.
2. Щелкните выбранное правой кнопкой мыши и выберите ``Enclose in Container`` ("Заключить в контейнер") из контекстного меню.
[.feature]
--
image::images/enclose-small.png[role="left", link="images/enclose.png"]
--
После заключения компонентов в подконтейнер граница между меткой ``Home Phone:`` и текстовым полем становится независимой от границы между текстовым полем ``Street`` и кнопкой.
*Примечание.* Действие ``Заключить в контейнер`` создает новый вложенный контейнер в ячейках, занятых выбранными компонентами. Выбранные компоненты перемещаются в новый контейнер, но их относительное расположение и другие ограничения компоновки сохраняются.
Повторите два действия, приведенных выше, для текстового поля ``City:`` и кнопки ``Browse`` справа от него, чтобы заключить их в подконтейнер, как показано ниже.
image::images/enclosecity.png[]
Теперь нужно устранить нежелательное пустое пространство вокруг кнопок ``OК`` и ``Cancel`` . Это делается следующим образом:
1. Щелкните 'Закрыть', чтобы отменить выделение заключенных во вложенный контейнер компонентов, щелкните правой кнопкой мыши форму и выберите ``Настроить компоновку`` в контекстном меню.
2. Удерживая клавишу CTRL, щелкните кнопки ``OК`` и ``Cancel`` внизу формы, чтобы выбрать их.
3. Щелкните выбранное правой кнопкой мыши и выберите ``Enclose in Container`` ("Заключить в контейнер") из контекстного меню.
Для кнопок будет создан новый подконтейнер.
image::images/subcontainerbuttons.png[]
*Примечание.* Ни для одного из компонентов во вложенном контейнере нельзя изменить размер. Поэтому они размещаются рядом друг с другом в точке привязки по умолчанию, центре контейнера.
Чтобы изменить привязку для всего подконтейнера, выполните следующие действия:
1. Убедитесь, что выбран вложенный контейнер с кнопками ``OK`` и ``Отмена`` и щелкните кнопку со стрелкой (image::images/arrowbutton.png[]) справа от поля со списком ``Привязка`` .
2. Прокрутите вниз и выберите ``Line End`` ("Конец строки") из списка.
image::images/subcontainerlineend.png[]
Теперь компоновка выглядит нормально, но подконтейнер с кнопками ``OК`` и ``Cancel`` занимает только последние две ячейки последней строки.
Если кнопки ``OК`` и ``Cancel`` станут шире (например при переводе на другой язык), они отодвинут правые края текстовых полей ``Work Phone:`` и ``Cell Phone:`` .
Чтобы избежать этой потенциальной проблемы и позволить подконтейнеру занять все ячейки в нижней строке, выберите подконтейнер и перетащите его левую границу в начало строки.
image::images/subcontainerresized.png[]
Теперь подконтейнер занимает все ячейки в нижней строке.
=== Переходы между контейнерами
Для добавления к подконтейнеру новых компонентов (например, кнопки ``Help`` к имеющимся кнопкам ``OК`` и ``Cancel`` ) необходимо переключиться с основного контейнера на подконтейнер перед редактированием компоновки последнего.
Выполните описанные ниже действия для добавления кнопки к существующему подконтейнеру.
1. Щелкните подконтейнер с кнопками ``OК`` и ``Cancel`` , чтобы выбрать его.
2. Щелкните контейнер правой кнопкой мыши, чтобы вывести контекстное меню, и выберите из меню ``Design This Container`` ("Редактировать данный контейнер").
[.feature]
--
image::images/designsubcontainer-small.png[role="left", link="images/designsubcontainer.png"]
--
[start=3]
. Щелкните правой кнопкой мыши второй заголовок столбца и выберите ``Insert Column After`` ("Вставить столбец после") из контекстного меню.
Отобразится пустая ячейка для новой кнопки.
[.feature]
--
image::images/emptycell-small.png[role="left", link="images/emptycell.png"]
--
[start=4]
. Щелкните созданную ячейку правой кнопкой мыши и выберите ``Add Component`` ("Добавить компонент") > ``Swing Controls`` ("Элементы управления Swing") > ``Button`` ("Кнопка") из контекстного меню.
Будет добавлена новая кнопка ``jButton1`` .
[.feature]
--
image::images/newbutton-small.png[role="left", link="images/newbutton.png"]
--
[start=5]
. Нажмите кнопку привязки, связанной с базовой линией, (image::images/baselineanchor.png[]) в 'Средстве настройки свойств' для выравнивания новой кнопки с двумя существующими в строке.
[start=6]
. Нажмите кнопку обзора (image::images/browsebutton.png[]) справа от текстового поля 'Вставки'. Отобразится диалоговое окно "Вставки". Введите 5 в текстовое поле 'Вверх' и нажмите OK.
[start=7]
. Чтобы проверить, как основной макет контейнера выглядит сейчас, щелкните правой кнопкой мыши разработанный вложенный контейнер и выберите в контекстном меню ``Конструировать родительский контейнер`` .
image::images/designparentcontainer.png[]
*Примечание.* Контекстное меню не отображается, если щелкнуть правой кнопкой мыши кнопки.
Создание компоновки завершено.
Осталось последнее изменение, не относящееся к компоновке контейнера.
Для переименования кнопки выполните следующие действия:
1. Нажмите кнопку Close ("Закрыть"), чтобы закрыть диалоговое окно Customize Layout ("Настройка компоновки").
2. В представлении Design ("Проект") выберите компонент ``jButton1`` и нажмите клавишу F2 (либо выберите Edit Text ("Изменить текст") из контекстного меню).
3. Удалите выбранный текст и введите ``Help`` .
4. Нажмите ENTER.
image::images/finallayout.png[]
== Заключение
В этом учебном курсе в существующую форму были добавлены новые компоненты, вставлены строки и т.д. В ходе изменения компоновки мы научились использовать расширенные функции настройщика GridBag, позволяющих изменять компоновку формы.
Перейти к разделу link:../java/gbcustomizer-basic.html[+Создание простой формы Java с помощью настройщика GridBag+]
<<top начало>>
link:/about/contact_form.html?to=3&subject=Feedback:%20Designing%20an%20Advanced%20Java%20Form%20Using%20the%20GridBag%20Customizer[+Отправить отзыв по этому учебному курсу+]
== Дополнительные сведения
Вы закончили учебный курс по созданию расширенной формы Java с помощью настройщика GridBag. Сведения о добавлении функциональных возможностей к создаваемому графическому интерфейсу приведены в разделах:
* link:gui-functionality.html[+Введение в разработку графического интерфейса +]
* link:gui-image-display.html[+Обработка изображений в приложении с графическим интерфейсом+]
* link:http://wiki.netbeans.org/NetBeansUserFAQ#GUI_Editor_.28Matisse.29[+Часто задаваемые вопросы по GUI Builder+]
* link:../../trails/matisse.html[+Учебная карта по приложениям с графическим интерфейсом Java +]
* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG920[+Реализация Java GUI+] в документе _Разработка приложений в IDE NetBeans_
<<top начало>>