// 
//     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

Настоящее руководство является введением в поддержку в IDE NetBeans для привязок компонентов Bean и привязок данных в приложениях Java.


image::images/netbeans-stamp-80-74-73.png[title="Содержимое на этой странице применимо к IDE NetBeans 7.1, 7.2, 7.3, 7.4 и 8.0"]


*Для работы с этим учебным курсом требуются программное обеспечение и ресурсы, перечисленные ниже.*

|===
|Программное обеспечение или материал |Требуемая версия 

|link:https://netbeans.org/downloads/index.html[+IDE NetBeans+] |версия 7.1, 7.2, 7.3, 7.4 или 8.0 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Комплект для разработчика на языке Java (JDK)+] |версия 6 или более поздняя 
|===


== Введение. Привязка компонентов Bean в IDE NetBeans

До выпуска библиотеки привязки компонентов подключение компонентов интерфейса пользователя к базам данных или обеспечение синхронизации значений свойств компонентов были не вполне удобными. Например, отображение данных из стандартной базы данных в JTable требовало создания вручную служебных классов для обработки подключения между базой данных и JTable. Синхронизация же значений различных свойств компонентов (скажем, значения JTextField с визуализацией визуального компонента) требовало написания кода для прослушивателей и обработчиков событий вручную.

Библиотека привязки компонентов упрощает и стандартизирует все это. Достаточно написать несколько строк кода, чтобы указать, какие свойства каких компонентов должны быть синхронизированы, с остальным же справится библиотека привязки компонентов. В IDE NetBeans функции привязки компонентов Bean интегрированы в конструкторе GUI, благодаря чему пользователи получают возможность быстрого создания кода режима работы приложения практически сразу после разработки визуальной структуры.

Данное руководство является обзором основных аспектов привязки компонентов в среде IDE.


== Привязка свойств к другим свойствам

По своей сути привязка компонентов является способом подключения свойств компонентов без использования кода для прослушивания и обработки событий.

Чтобы проиллюстрировать концепцию привязки компонентов и то, как ее поддерживает среда IDE, мы создадим простой пример, где пользователь может изменить числовое значение в текстовом поле, перемещая ползунок:

*Для настройки примера:*

1. В среде IDE выберите File ("Файл") > New Project ("Создать проект").
2. Выберите категорию Java и шаблон приложения Java. Нажмите кнопку "Далее".
3. На странице Name and Location ("Имя и местоположение") мастера выполните следующие операции:
* Введите  ``NumberSlider``  в текстовое поле имени проекта;
* Не устанавливайте флажок "Использовать отдельную папку для хранения библиотек".

[.feature]
--
image:images/numberslider-small.png[role="left", link="images/numberslider.png"]
--

* Снимите флажок "Создать главный класс".


. Нажмите кнопку Finish ("Готово"), чтобы выйти из мастера и приступить к настройке проекта.


. В окне 'Проекты' щелкните правой кнопкой мыши узел проекта NumberSlider и выберите 'Создать' > 'Форма JFrame'.

(Если пункт JFrame Form отсутствует в меню New, выберите пункт Other ("Другое"). Затем в мастере создания файлов выберите категорию Swing GUI Forms ("Формы графического интерфейса Swing") и затем выберите шаблон JFrame Form.)



. На странице Name and Location ("Имя и местоположение") мастера выполните следующие операции:
* Введите  ``NumberSliderFrame``  в поле имени класса.
* Введите  ``numberslider``  в поле имени пакета.

[.feature]
--
image::images/numberslider2-small.png[role="left", link="images/numberslider2.png"]
--



. Нажмите кнопку Finish ("Готово") для выхода из мастера и создания формы.

В области редактирования должен открыться файл  ``NumberSliderForm.java``  в режиме проектирования.



. Перетащите компонент ползунка в область проектирования из раздела Swing ("Элементы управления Swing") в Palette ("Палитра"). (Если окно палитры не открыто, выберите Window ("Окно") > Palette ("Палитра")).


. Перетащите компонент текстового поля в область проектирования из окна палитры.

Полученная форма может выглядеть подобно приведенному ниже снимку экрана. Но для данного примера позиция не важна.

[.feature]
--
image::images/slider-textfield-small.png[role="left", link="images/slider-textfield.png"]
--


=== Источник и целевой объект

Теперь, когда пример настроен, можно создать привязку. Но сперва нужно определить, какой компонент будет _источником_ привязки, а какой — _целевым объектом_. От компонента источника привязки исходит значение для свойства.

При привязке в редакторе графического интерфейса мы инициализируем привязку на целевом объекте и затем объявляем источник в диалоговом окне Bind ("Привязка").

В данном случае, поскольку у JSlider имеется диапазон значений по умолчанию, мы используем его как источник.

*Примечание.* Привязки могут быть двусторонними (чтение/запись), при этом обеспечивается автоматическое отражение изменение в элементе назначения в исходном коде. Но исходная привязка всегда производится от источника к целевому объекту. См. сведения о режиме обновления в разделе <<prop-advanced,Расширенные свойства привязок>>.

*Для привязки ползунка к текстовому полю выполните следующие действия.*

1. Щелкните правой кнопкой мыши компонент текстового поля и выберите Bind ("Привязка" > text ("текст"), чтобы открыть диалоговое окно привязки.
2. В поле со списком Binding Source ("Источник привязки") выберите  ``jSlider1`` .
3. В поле со списком Binding Expression ("Выражение привязки") выберите  ``value int`` , как показано на изображении ниже.

[.feature]
--
image::images/bind-dialog-small.png[role="left", link="images/bind-dialog.png"]
--



. Нажмите кнопку "ОК".

Мы только что привязали свойство компонента ползунка  ``value``  ("значение") к значению текстового поля  ``text``  ("текст").

Тестовое поле в области проектирования должно показывать значение  ``50`` . Это значение отражает то, что ползунок находится в среднем положении, а диапазон значений для ползунка по умолчанию составляет от 0 до 100.

Теперь можно запустить приложение и увидеть привязку в действии.

Выберите Run ("Выполнить") > Run File ("Выполнить файл") для выполнения файла.

Приложение должно запуститься в отдельном окне. Измените положение ползунка в работающем приложении. Значение в текстовом поле изменится.

image::images/run-numberslider.png[]


== Привязка особых компонентов

В предыдущем разделе мы выполнили привязку двух стандартных компонентов Swing, которые были добавлены к форме из Palette ("Палитра"). Можно выполнить привязку свойств и для других компонентов. Но для этого необходимо выполнить несколько действий, чтобы сделать доступными функции среды IDE по созданию кода привязки для данного компонента. Чтобы сделать функции привязки среды IDE доступными для компонента, можно использовать один из следующих способов:

* Добавить компонент к палитре, чтобы его можно было добавить к форме, так же, как мы используем добавление стандартного компонента Swing.
* Добавить к проекту класс компонента и скомпилировать компонент.

Чтобы добавить компонент к окну Palette ("Палитра"), выполните следующие действия.

1. Убедитесь, что компонент скомпилирован.
2. Выберите Tools ("Сервис") > Palette ("Палитра") > Swing/AWT Components ("Компоненты Swing/AWT").
3. Если для компонента нужно создать новую категорию палитры, выберите New Category ("Создать категорию") и выберите нужное имя перед добавлением компонента.
4. Щелкните Add from JAR ("Добавить из файла JAR"), Add from Library ("Добавить из библиотеки") или Add from Project ("Добавить из проекта"), после чего завершите работу мастера, чтобы добавить компонент.

Чтобы добавить компонент из проекта, выполните следующие действия.

1. В окне 'Проект' щелкните правой кнопкой мыши узел для компонента и выберите 'Компилировать файл'.
2. Перетащите компонент в форму.

Компонент должен появиться в окне инспектора. После этого можно вызвать диалог привязки для любого из свойств компонента.


== Расширенная настройка привязки

В примере в первом разделе данного руководства показана простая привязка с некоторыми поведениями по умолчанию. Но порой привязки бывает необходимо или желательно настроить иначе. В этом случае следует использовать вкладку Advanced ("Дополнительно") диалогового окна Binding ("Привязка").

Вкладка Advanced ("Дополнительно") диалогового окна состоит из следующих полей:

* *Имя. *Позволяет создать имя для привязки, которая обеспечивает более высокий уровень гибкости при управлении привязками. Данное имя добавляется к конструктору привязки, и на него можно сослаться с помощью метода  ``getName()``  привязки.
* *Режим обновления. * Указывается способ синхронизации свойств. Возможны следующие значения:
* *Всегда синхр. (чтение/запись).* При каждом внесении изменения в исходный или целевой элемент, другой элемент обновляется.
* *Только чтение из источника (только чтение).* Целевой элемент обновляется только при первом задании исходного значения. Изменения, внесенные в источник, отражаются в целевом объекте. Изменения, внесенные в целевой объект, не отражаются в источнике.
* *Чтение из источника один раз (чтение один раз).* Целевой элемент обновляется только при исходной привязке целевого и исходного элементов.
* *Update Source When ("Обновить источник когда") *(доступно только для свойства  ``text``  компонентов JTextField и JTextArea). Позволяет выбрать частоту синхронизации свойств.
* *Ignore Adjusting ("Игнорировать подстройку")* (доступно свойству  ``value``  JSlider; свойству  ``selectedElement``  JTable и JList; а также свойству  ``selectedElements``  JTable и JList). Если установлен этот флажок, то изменения, внесенные в одно из свойств, не отражаются другим свойством, пока пользователь не завершит вносить изменение. Например, когда пользователь приложения перетаскивает ползунок, значение свойства, к которому привязано свойство ползунка ``value`` , обновляется только тогда, когда пользователь отпускает кнопку мыши.
* *Средство преобразования.* Если привязка включает в себя свойства с различными типами данных, вы можете указать код для преобразования значений между типами. Библиотека привязок компонентов обрабатывает многие часто используемые преобразования, но для других комбинаций типов свойств может быть необходимо предоставить собственные преобразователи. Такие преобразователи должны расширять класс  ``org.jdesktop.beansbinding.Converter`` .

Выпадающий список Converter ("Преобразователь") перечисляет преобразователи, которые были добавлены как компоненты к создаваемой форме. Код преобразования также можно добавить напрямую, нажав кнопку многоточия (...) и выбрав Custom Code ("Пользовательский код") из выпадающего списка Select Converter Property Using ("Выбрать преобразователь, используемый свойством").

Ниже приведен список преобразований, для которых не нужно специального преобразователя:

* BigDecimal в String, String в BigDecimal
* BigInteger в String, String в BigInteger
* Boolean в String, String в Boolean
* Byte в String, String в Byte
* Char в String, String в Char
* Double в String, String в Double
* Float в String, String в Float
* Int в String, String в Int
* Long в String, String в BigDecimal
* Short в String, String в Short
* Int в Boolean, Boolean в Int
* *Средство проверки. * Позволяет указать код для проверки изменения целевого значения свойства перед распространением этого изменения обратно к свойству источника. Например, средство проверки можно использовать, чтобы убедиться, что значение целочисленного свойства находится в определенном диапазоне.

Средства проверки должны расширять класс  ``org.jdesktop.beansbinding.Validator`` . 
В раскрывающемся списке Validator ("Средство проверки") перечислены средства проверки, которые добавлены как компоненты к создаваемой форме. Код проверки также можно добавить напрямую, нажав кнопку многоточия (...) и выбрав Custom Code ("Особый код") из раскрывающегося списка Select Converter Property Using ("Выбрать средство проверки, используемое свойством").

* *Исходное значение Null. * Позволяет задавать другое значение для использования, если исходное свойство имеет значение  ``null``  при привязке. Данное поле соотносится с методом  ``setSourceNullValue()``  класса  ``org.jdesktop.beansbinding.Binding`` .
* *Недоступное для чтения исходное значение. * Позволяет задавать другое значение для использования, если выражение привязки нельзя разрешить при выполнении привязки. Данное поле соотносится с методом  ``setSourceUnreadableValue()``  класса  ``org.jdesktop.beansbinding.Binding`` .

*Примечание.* Чтобы лучше понять классы и методы, упомянутые выше, можно получить доступ к документации по Javadoc привязок компонентов Beans напрямую из IDE. Выберите Help ("Справка") > Javadoc ("Ссылки на документацию Java") > Beans Binding ("Привязка компонентов"). В открывшемся окне браузера щелкните  ``org.jdesktop.beansbinding`` , чтобы получить доступ к документации для этих классов.


== Привязка данных к компонентам

Помимо синхронизации свойств визуальных компонентов Swing и прочих пользовательских компонентов, привязку компонентов можно использовать с целью упрощения использования визуальных компонентов для взаимодействия с базой данных. После того как новая форма Java создана и к ней добавлены компоненты, можно создать код, привязывающий эти компоненты к данным. В данном разделе показано, как выполнить привязку данных к компонентам Swing JTable, JList и JComboBox.

Перед привязкой компонента к данным из базы данных необходимо выполнить следующие действия:

* Подключить базу данных к среде IDE.
* Создать классы, представляющие таблицы данных, к которым надо выполнить привязку. Действия по созданию сущностных классов для привязки данных к компонентам приведены ниже.


=== Создание сущностных классов

*Чтобы создать сущностные классы для представления таблицы, которая будет привязана к JTable, выполните следующие действия.*

1. В окне 'Проекты' щелкните правой кнопкой мыши проект и выберите 'Создать' > 'Другие', выберите категорию 'Сохраняемость' и выберите 'Классы сущностей' в шаблоне 'База данных'.
2. На странице Database Tables ("Таблицы базы данных") мастера выберите подключение к базе данных.
3. После того как столбец Available Tables ("Доступные таблицы") заполнен, выберите таблицы, которые следует использовать в приложении, и нажмите кнопку Add ("Добавить"), чтобы переместить их в столбец Selected Tables ("Выбранные таблицы"). Нажмите кнопку "Далее".

[.feature]
--
image::images/entity-wizard1-small.png[role="left", link="images/entity-wizard1.png"]
--



. На странице мастера Entity Classes ("Сущностные классы") убедитесь, что установлены флажки Generate Named Query Annotations for Persistent Fields ("Создать аннотации именованных запросов для полей ") и Create Persistence Unit ("Создать блок сохранения состояния").

[.feature]
--
image::images/entity-wizard2-small.png[role="left", link="images/entity-wizard2.png"]
--



. Внесите любые необходимые изменения в имена и местоположение созданных классов.


. Нажмите кнопку "Завершить".

Узлы для сущностных классов можно будет увидеть в окне Projects ("Проекты").


=== Привязка компонентов к компонентам, представляющим данные

В данном разделе показано, как можно выполнить привязку данных к компонентам Swing JTable, JList и JComboBox.

*Чтобы добавить таблицу базы данных к форме и автоматически создать JTable для отображения содержимого таблицы базы данных, выполните следующие действия.*

1. Откройте окно "Services".
2. Подключитесь к базе данных, содержащей таблицу, которую следует добавить к форме. (Для подключения к базе данных щелкните правой кнопкой мыши узел для подключения к базе данных и выберите 'Подключение').

*Примечание.* В этом учебном курсе используется тестовая база данных  ``sample [app on App]`` . Для подключения к этой базе данных откройте окно 'Службы', разверните узел 'Базы данных', щелкните правой кнопкой мыши узел подключения к базе данных ( ``jdbc:derby://localhost:1527/sample[app on APP]`` ) и выберите пункт 'Подключение' в контекстном меню.
При появлении соответствующего запроса укажите значение  ``app``  в качестве идентификатора пользователя и то же значение  ``app``  в качестве пароля.



. Разверните узел для подключения и разверните его узел Tables ("Таблицы").


. Перетащите узел для таблицы на форму и нажмите клавишу Ctrl при завершении перетаскивания таблицы.

Будет создана таблица JTable, и ее столбцы будут привязаны к столбцам в таблице базы данных.

*Чтобы привязать таблицу базы данных к существующему компоненту JTable, выполните следующие действия.*

1. Щелкните правой кнопкой мыши компонент в конструкторе графических интерфейсов и выберите Bind ("Привязка") > elements ("элементы").

[.feature]
--
image::images/bind-dialog-table-small.png[role="left", link="images/bind-dialog-table.png"]
--



. Нажмите кнопку Import Data to Form ("Импортировать данные в форму"). В диалоговом окне Import Data to Form ("Импортировать данные в форму") выберите таблицу данных, к которой следует привязать свои компоненты. Нажмите кнопку "ОК".


. Из поля со списком Binding Source ("Источник привязки") выберите элемент, представляющий результирующий список сущностного класса. Например, если сущностный класс называется  ``Customer.java`` , объект списка будет создан как  ``customerList`` .

[.feature]
--
image::images/source-selected-small.png[role="left", link="images/source-selected.png"]
--



. Значением выражения привязки оставьте  ``null`` .


. При наличии столбцов баз данных, которые не следует включать в JTable, выберите эти столбцы в списке Selected ("Выбранные") и переместите их в список Available ("Доступные").


. Выберите вкладку Advanced ("Дополнительные") для расширенной настройки привязки. Там, например, можно указать средство проверки или преобразователь, либо поведение в случае, если источник привязки не читается или имеет значение null.


. Нажмите кнопку "ОК".

*Для привязки данных к компоненту JList выполните следующие действия.*

1. Щелкните правой кнопкой мыши компонент в конструкторе графических интерфейсов и выберите Bind ("Привязка") > elements ("элементы").
2. Нажмите кнопку Import Data to Form ("Импортировать данные в форму"). В диалоговом окне Import Data to Form ("Импортировать данные в форму") выберите таблицу данных, к которой следует привязать свои компоненты. Нажмите кнопку "ОК".
3. Из поля со списком Binding Source ("Источник привязки") выберите элемент, представляющий результирующий список сущностного класса. Например, если сущностный класс называется  ``Customer.java`` , объект списка будет создан как  ``customerList`` .

[.feature]
--
image::images/jlist-binding-small.png[role="left", link="images/jlist-binding.png"]
--



. Значением выражения привязки оставьте  ``null`` .


. В раскрывающемся списке Display Expression ("Отображаемое выражение") выберите свойство, представляющее столбец базы данных, содержащий значения, которые необходимо отобразить в списке.


. Выберите вкладку Advanced ("Дополнительные") для расширенной настройки привязки.


. Нажмите кнопку "ОК".

*Для привязки данных к компоненту JComboBox выполните следующие действия.*

1. Щелкните правой кнопкой мыши поле со списком и выберите "Bind > elements".
2. Нажмите кнопку Import Data to Form ("Импортировать данные в форму"). В диалоговом окне Import Data to Form ("Импортировать данные в форму") выберите таблицу данных, к которой следует привязать свои компоненты. Нажмите кнопку "ОК".
3. Из поля со списком Binding Source ("Источник привязки") выберите элемент, представляющий результирующий список сущностного класса. Например, если сущностный класс называется  ``Customer.java`` , объект списка будет создан как  ``customerList`` .

[.feature]
--
image::images/combo-binding-small.png[role="left", link="images/combo-binding.png"]
--



. Оставьте значением Binding Expression ("Выражение привязки")  ``null``  и нажмите кнопку "OК".


. Вновь щелкните правой кнопкой мыши поле со списком и выберите "Bind > selectedItem".


. Выполните привязку к свойству, на котором должен сказываться выбор пользователя

image::images/combo-item.png[]



. Нажмите кнопку "ОК", чтобы сохранить изменения.

У библиотеки привязки компонентов (версии 1.2.1 и более ранних) нет класса DetailBinding, позволяющего указать, как следует извлекать _отображаемые_ значения для JComboBox. Так что необходимо будет написать немного собственного кода. Одним из подходов является написание собственного визуализатора ячеек, как показано ниже.

*Чтобы правильно визуализировать поле со списком, выполните следующие действия.*

1. Выберите поле со списком.
2. На вкладке Properties ("Свойства") окна Properties выберите свойство визуализатора.
3. Нажмите кнопку со многоточием (...).
4. В поле со списком наверху редактора свойств выберите Custom Code ("Особый код").
5. В области текста введите код, подобный следующему (где `jComboBox1` является именем экземпляра JComboBox, `MyEntityClass` является сущностным классом, а `getPropertyFromMyEntityClass()` является методом получения для свойства в сущностном классе, привязка которого выполняется).

[source,java]
----

jComboBox1.setRenderer(new DefaultListCellRenderer() {
           @Override
           public Component getListCellRendererComponent(
                   JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
               super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
               if (value instanceof MyEntityClass) {
                   MyEntityClass mec = (MyEntityClass)value;
                   setText(mec.getPropertyFromMyEntityClass());
               }
               return this;
           }
            })
----

[.feature]
--
image::images/custom-small.png[role="left", link="images/custom.png"]
--

*Примечание.* Также можно создать нестандартный визуализатор в его собственном исходном файле, скомпилировать файл, перетащить визуализатор в форму, а затем настроить свойство визуализатора поля со списком для использования этого компонента Bean.


== Специальные свойства привязок

При необходимости библиотека привязки компонентов предоставляет специальные синтетические свойства для некоторых компонентов Swing, которые отсутствуют в самих компонентах. Эти свойства представляют такие элементы, как выбранная строка таблицы, которые полезны для привязки к другим свойствам.

Ниже приведен список синтетических свойств, добавленных библиотеками привязки компонентов:

|===
|Элемент |Свойство |Описание 

|AbstractButton |выбрано |Выбранное состояние кнопки. 

|JComboBox |selectedItem |Выбранный элемент JComboBox. 

|JSlider |значение |Значение JSlider; уведомляет обо всех изменениях. 

|value_IGNORE_ADJUSTING |То же, что и "value", но не уведомляет об изменениях, пока ползунок меняет свое значение. 

|JList |selectedElement |Выбранный элемент JList; уведомляет обо всех изменениях. При наличии привязки JListBinding, где JList является целевым объектом, о выбранном элементе сообщается как об элементе из списка источников привязки. В ином случае о выбранном элементе сообщается как об объекте из модели списка. Если не выбрано ничего, результатом свойства является  ``null`` . 

|selectedElements |Список, содержащий выбранные элементы JList; уведомляет обо всех изменениях. При наличии привязки JListBinding, где JList является целевым объектом, о выбранных элементах сообщается как об элементах из списка источников привязки. В ином случае о выбранных элементах сообщается как об объектах из модели списка. Если не выбрано ничего, результатом свойства является пустой список. 

|selectedElement_IGNORE_ADJUSTING |То же, что и "selectedElement", но не уведомляет об изменении, пока обновляется выбор из списка. 

|selectedElements_IGNORE_ADJUSTING |То же, что и "selectedElements", но не уведомляет об изменении, пока обновляется выбор из списка. 

|JTable |selectedElement |Выбранный элемент JTable; уведомляет обо всех изменениях. При наличии привязки JTableBinding, где JTable является целевым объектом, о выбранном элементе сообщается как об элементе из списка источников привязки. В ином случае о выбранном элементе сообщается как о сопоставлении, ключи которого состоят из строки "column" и индекса столбцов, а значения являются значениями модели для данного столбца. Пример: {column0=column0value, column1=column1value, ...} Если не выбрано ничего, результатом свойства является  ``null`` . 

|selectedElements |Список, содержащий выбранные элементы JTable; уведомляет обо всех изменениях. При наличии привязки JTableBinding, где JTable является целевым объектом, о выбранных элементах сообщается как об элементах из списка источников привязки. В ином случае о каждом выбранном элементе сообщается как о сопоставлении, ключи которого состоят из строки "column" и индекса столбцов, а значения являются значениями модели для данного столбца. Пример: {column0=column0value, column1=column1value, ...} Если не выбрано ничего, результатом свойства является пустой список. 

|selectedElement_IGNORE_ADJUSTING |То же, что и "selectedElement", но не уведомляет об изменении, пока обновляется выбор из таблицы. 

|selectedElements_IGNORE_ADJUSTING |То же, что и "selectedElements", но не уведомляет об изменении, пока обновляется выбор из таблицы. 

|JTextComponent (включая его подклассы JTextField, JTextArea и JEditorPane) |text |Свойство текста JTextComponent; уведомляет обо всех изменениях (включая ввод). 

|text_ON_FOCUS_LOST |Свойство текста JTextComponent; уведомляет об изменении только после потери фокуса. 

|text_ON_ACTION_OR_FOCUS_LOST |Свойство текста JTextComponent; уведомляет об изменении, только когда компонент уведомляет о выполнении действия (actionPerformed) или после потери фокуса. 
|===
link:/about/contact_form.html?to=3&subject=Feedback:%20Binding%20Beans%20and%20Data%20in%20Java%20Applications[+Отправить отзыв по этому учебному курсу+]



== Дополнительные сведения

* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG2649[+Работа с приложениями баз данных и привязка компонентов+] в документе _Разработка приложений в IDE NetBeans_
* link:gui-functionality.html[+Введение в разработку графического интерфейса +]
* link:http://java.net/projects/beansbinding/[+Привязка компонентов - Java.net+]
* link:http://docs.oracle.com/javase/tutorial/javabeans/index.html[+Учебная карта по JavaBeans(tm) учебного курса по Java+]
* link:http://wiki.netbeans.org/NetBeansUserFAQ#GUI_Editor_.28Matisse.29[+Часто задаваемые вопросы по GUI Builder+]
