1 Using JavaFX Properties and Binding
In this tutorial you learn how to use properties and binding in JavaFX applications.
The tutorial describes relevant APIs and provides working examples that you can compile and run.
Overview
For many years, the Java programming language has used the JavaBeans component architecture to represent the property of an object. This model consists of both an API and a design pattern; it is widely understood by Java application developers and development tools alike. This release introduces property support into JavaFX, support that is based on the proven JavaBeans model, but expanded and improved.
JavaFX properties are often used in conjunction with binding, a powerful mechanism for expressing direct relationships between variables. When objects participate in bindings, changes made to one object will automatically be reflected in another object. This can be useful in a variety of applications. For example, binding could be used in a bill invoice tracking program, where the total of all bills would automatically be updated whenever an individual bill is changed. Or, binding could be used in a graphical user interface (GUI) that automatically keeps its display synchronized with the application’s underlying data.
The binding APIs are divided into two broad categories:
The High-Level API: Provides a simple way to create bindings for the most common use cases. Its syntax is easy to learn and use, especially in environments that provide code completion, such as the NetBeans IDE.
The Low-Level API: Provides additional flexibility, and can be used by advanced developers in situations where the High-Level API is insufficient. The Low-Level API was designed for fast execution and small memory footprint.
The remainder of this tutorial describes these APIs, and provides working code examples that you can compile and run.
Understanding Properties
As mentioned in the overview, JavaFX property support is based on the well-known property model established by the JavaBeans component architecture. This section provides a brief overview of what that means, then explains how properties apply to JavaFX.
The JavaBeans model also provides support for complex property types, plus an event delivery system. It also contains a number of support classes, all available as an API under the java.beans package. Therefore, mastering JavaBeans programming involves learning the required naming conventions and its corresponding API. (For more background reading on JavaBeans in general, see the JavaBeans lesson of the Java Tutorial).
Example 1-1 Defining a Property
The amountDue object — an instance of the javafx.beans.property.DoubleProperty class — is marked as private to encapsulate it from the outside world. This is standard practice in both Java and JavaBeans application development. Note however that the object’s type is not one of the standard Java primitives, but rather, a new wrapper class that encapsulates a Java primitive and adds some extra functionality (the classes under javafx.beans.property all contain built-in support for observability and binding as part of their design).
The property method naming conventions are as follows:
You can also add a change listener to be notified when the property’s value has changed, as shown in Example 1-2.
Example 1-2 Using a ChangeListener
Running this example will print the message «Electric bill has changed» to standard output, proving that the change listener notification is working.
Using the High-Level Binding API
The High-Level API is the quickest and easiest way to begin using bindings in your own applications. It consists of two parts: the Fluent API, and the Bindings class. The Fluent API exposes methods on the various dependency objects, whereas the Bindings class provides static factory methods instead.
Example 1-3 Using the Fluent API
This code binds the two dependencies, prints their sum, then changes the value of num1 and prints the sum again. The results are «3» and «4», which proves that the binding is working.
You could also use the Bindings class to do the same thing, as shown in Example 1-4.
Example 1-4 Using the Bindings Class
Example 1-5 combines the two approaches:
Example 1-5 Combining Both Approaches
Example 1-5 modifies the code to invoke the multiply method from the Fluent API, and add from the Bindings class. You should also know that the High-Level API lets you mix types when defining arithmetic operations. The type of the result is defined by the same rules as the Java programming language:
The result is an integer otherwise.
The next section explores observability, and demonstrates how invalidation listeners differ from change listeners.
Exploring Observable, ObservableValue, InvalidationListener, and ChangeListener
The JavaFX binding and property implementations all support lazy evaluation, which means that when a change occurs, the value is not immediately recomputed. Recomputation happens later, if and when the value is subsequently requested.
In Example 1-6, the bill total (a binding) will be marked as invalid the first time it detects a change in one of its dependencies. However, the binding object will recalculate itself only if the total is actually requested again.
Example 1-6 Using an InvalidationListener
By changing the value of a single bill, the binding becomes invalid, and the invalidation listener will fire. But if the binding is already invalid, the invalidation listener will not fire again, even if another bill changes. (In Example 1-6, invoking total.getValue() moves the binding from invalid to valid.) We know this because a subsequent change to any bill in the dependency list will cause the invalidation listener to fire again. This would not happen if the binding was still invalid.
Note that registering a ChangeListener will enforce eager computation, even if the implementation of the ObservableValue supports lazy evaluation. For a lazily evaluated value, it is not possible to know if an invalid value really has changed until it is recomputed. For this reason, generating change events requires eager evaluation, while invalidation events can be generated for both eager and lazy implementations.
Using the Low-Level Binding API
If the High-Level API is not enough to satisfy your requirements, you can always use the Low-Level API instead. The Low-Level API is for developers who require more flexibility (or better performance) than that offered by the High-Level API.
Example 1-7 shows a basic example of using the Low-Level API.
Example 1-7 Using the Low-Level API
You now know enough information to begin using the Low-Level API.
Release: JavaFX 2.1
Last Updated: June 2013
[+] Show/Hide Table of Contents
Profiles
Scott Hommel
Technical Writer, Oracle

We Welcome Your Comments
If you have questions about JavaFX, please go to the forum.
Using JavaFX Properties and Binding
In this tutorial you learn how to use properties and binding in JavaFX 2 applications.
The tutorial describes relevant APIs and provides working examples that you can compile and run.
Overview
For many years, the Java programming language has used the JavaBeans component architecture to represent the property of an object. This model consists of both an API and a design pattern; it is widely understood by Java application developers and development tools alike. This release introduces property support into JavaFX, support that is based on the proven JavaBeans model, but expanded and improved.
JavaFX properties are often used in conjunction with binding, a powerful mechanism for expressing direct relationships between variables. When objects participate in bindings, changes made to one object will automatically be reflected in another object. This can be useful in a variety of applications. For example, binding could be used in a bill invoice tracking program, where the total of all bills would automatically be updated whenever an individual bill is changed. Or, binding could be used in a graphical user interface (GUI) that automatically keeps its display synchronized with the application’s underlying data.
The binding APIs are divided into two broad categories:
The High-Level API: Provides a simple way to create bindings for the most common use cases. Its syntax is easy to learn and use, especially in environments that provide code completion, such as the NetBeans IDE.
The Low-Level API: Provides additional flexibility, and can be used by advanced developers in situations where the High-Level API is insufficient. The Low-Level API was designed for fast execution and small memory footprint.
The remainder of this tutorial describes these APIs, and provides working code examples that you can compile and run.
Understanding Properties
As mentioned in the overview, JavaFX property support is based on the well-known property model established by the JavaBeans component architecture. This section provides a brief overview of what that means, then explains how properties apply to JavaFX.
The JavaBeans model also provides support for complex property types, plus an event delivery system. It also contains a number of support classes, all available as an API under the java.beans package. Therefore, mastering JavaBeans programming involves learning the required naming conventions and its corresponding API. (For more background reading on JavaBeans in general, see the JavaBeans lesson of the Java Tutorial at http://download.oracle.com/javase/tutorial/javabeans ).
Example 1 Defining a Property
The amountDue object — an instance of the javafx.beans.property.DoubleProperty class — is marked as private to encapsulate it from the outside world. This is standard practice in both Java and JavaBeans application development. Note however that the object’s type is not one of the standard Java primitives, but rather, a new wrapper class that encapsulates a Java primitive and adds some extra functionality (the classes under javafx.beans.property all contain built-in support for observability and binding as part of their design).
The property method naming conventions are as follows:
You can also add a change listener to be notified when the property’s value has changed, as shown in Example 2.
Example 2 Using a ChangeListener
Running this example will print the message «Electric bill has changed» to standard output, proving that the change listener notification is working.
Using the High-Level Binding API
The High-Level API is the quickest and easiest way to begin using bindings in your own applications. It consists of two parts: the Fluent API, and the Bindings class. The Fluent API exposes methods on the various dependency objects, whereas the Bindings class provides static factory methods instead.
Example 3 Using the Fluent API
This code binds the two dependencies, prints their sum, then changes the value of num1 and prints the sum again. The results are «3» and «4», which proves that the binding is working.
You could also use the Bindings class to do the same thing, as shown in Example 4.
Example 4 Using the Bindings Class
Example 5 combines the two approaches:
Example 5 Combining Both Approaches
Example 5 modifies the code to invoke the multiply method from the Fluent API, and add from the Bindings class. You should also know that the High-Level API lets you mix types when defining arithmetic operations. The type of the result is defined by the same rules as the Java programming language:
The result is an integer otherwise.
The next section explores observability, and demonstrates how invalidation listeners differ from change listeners.
Exploring Observable, ObservableValue, InvalidationListener, and ChangeListener
The JavaFX binding and property implementations all support lazy evaluation, which means that when a change occurs, the value is not immediately recomputed. Recomputation happens later, if and when the value is subsequently requested.
In Example 6, the bill total (a binding) will be marked as invalid the first time it detects a change in one of its dependencies. However, the binding object will recalculate itself only if the total is actually requested again.
Example 6 Using an InvalidationListener
By changing the value of a single bill, the binding becomes invalid, and the invalidation listener will fire. But if the binding is already invalid, the invalidation listener will not fire again, even if another bill changes. (In Example 6, invoking total.getValue() moves the binding from invalid to valid.) We know this because a subsequent change to any bill in the dependency list will cause the invalidation listener to fire again. This would not happen if the binding was still invalid.
Note that registering a ChangeListener will enforce eager computation, even if the implementation of the ObservableValue supports lazy evaluation. For a lazily evaluated value, it is not possible to know if an invalid value really has changed until it is recomputed. For this reason, generating change events requires eager evaluation, while invalidation events can be generated for both eager and lazy implementations.
Using the Low-Level Binding API
If the High-Level API is not enough to satisfy your requirements, you can always use the Low-Level API instead. The Low-Level API is for developers who require more flexibility (or better performance) than that offered by the High-Level API.
Example 7 shows a basic example of using the Low-Level API.
Example 7 Using the Low-Level API
You now know enough information to begin using the Low-Level API.
Apache NetBeans 12.5
Настоящее руководство является введением в поддержку в IDE NetBeans для привязок компонентов Bean и привязок данных в приложениях Java.
Для работы с этим учебным курсом требуются программное обеспечение и ресурсы, перечисленные ниже.
версия 7.1, 7.2, 7.3, 7.4 или 8.0
версия 6 или более поздняя
Введение. Привязка компонентов Bean в IDE NetBeans
До выпуска библиотеки привязки компонентов подключение компонентов интерфейса пользователя к базам данных или обеспечение синхронизации значений свойств компонентов были не вполне удобными. Например, отображение данных из стандартной базы данных в JTable требовало создания вручную служебных классов для обработки подключения между базой данных и JTable. Синхронизация же значений различных свойств компонентов (скажем, значения JTextField с визуализацией визуального компонента) требовало написания кода для прослушивателей и обработчиков событий вручную.
Библиотека привязки компонентов упрощает и стандартизирует все это. Достаточно написать несколько строк кода, чтобы указать, какие свойства каких компонентов должны быть синхронизированы, с остальным же справится библиотека привязки компонентов. В IDE NetBeans функции привязки компонентов Bean интегрированы в конструкторе GUI, благодаря чему пользователи получают возможность быстрого создания кода режима работы приложения практически сразу после разработки визуальной структуры.
Данное руководство является обзором основных аспектов привязки компонентов в среде IDE.
Привязка свойств к другим свойствам
По своей сути привязка компонентов является способом подключения свойств компонентов без использования кода для прослушивания и обработки событий.
Чтобы проиллюстрировать концепцию привязки компонентов и то, как ее поддерживает среда IDE, мы создадим простой пример, где пользователь может изменить числовое значение в текстовом поле, перемещая ползунок:
Для настройки примера:
В среде IDE выберите File («Файл») > New Project («Создать проект»).
Выберите категорию Java и шаблон приложения Java. Нажмите кнопку «Далее».
На странице Name and Location («Имя и местоположение») мастера выполните следующие операции:
Введите NumberSlider в текстовое поле имени проекта;
Не устанавливайте флажок «Использовать отдельную папку для хранения библиотек».

Снимите флажок «Создать главный класс».
Нажмите кнопку Finish («Готово»), чтобы выйти из мастера и приступить к настройке проекта.
В окне ‘Проекты’ щелкните правой кнопкой мыши узел проекта NumberSlider и выберите ‘Создать’ > ‘Форма JFrame’.
(Если пункт JFrame Form отсутствует в меню New, выберите пункт Other («Другое»). Затем в мастере создания файлов выберите категорию Swing GUI Forms («Формы графического интерфейса Swing») и затем выберите шаблон JFrame Form.)
На странице Name and Location («Имя и местоположение») мастера выполните следующие операции:
Введите NumberSliderFrame в поле имени класса.
Введите numberslider в поле имени пакета.
Нажмите кнопку Finish («Готово») для выхода из мастера и создания формы.
В области редактирования должен открыться файл NumberSliderForm.java в режиме проектирования.
Перетащите компонент ползунка в область проектирования из раздела Swing («Элементы управления Swing») в Palette («Палитра»). (Если окно палитры не открыто, выберите Window («Окно») > Palette («Палитра»)).
Перетащите компонент текстового поля в область проектирования из окна палитры.
Полученная форма может выглядеть подобно приведенному ниже снимку экрана. Но для данного примера позиция не важна.
Источник и целевой объект
Теперь, когда пример настроен, можно создать привязку. Но сперва нужно определить, какой компонент будет источником привязки, а какой — целевым объектом. От компонента источника привязки исходит значение для свойства.
При привязке в редакторе графического интерфейса мы инициализируем привязку на целевом объекте и затем объявляем источник в диалоговом окне Bind («Привязка»).
В данном случае, поскольку у JSlider имеется диапазон значений по умолчанию, мы используем его как источник.
Примечание. Привязки могут быть двусторонними (чтение/запись), при этом обеспечивается автоматическое отражение изменение в элементе назначения в исходном коде. Но исходная привязка всегда производится от источника к целевому объекту. См. сведения о режиме обновления в разделе Расширенные свойства привязок.
Для привязки ползунка к текстовому полю выполните следующие действия.
Щелкните правой кнопкой мыши компонент текстового поля и выберите Bind («Привязка» > text («текст»), чтобы открыть диалоговое окно привязки.
Мы только что привязали свойство компонента ползунка value («значение») к значению текстового поля text («текст»).
Теперь можно запустить приложение и увидеть привязку в действии.
Выберите Run («Выполнить») > Run File («Выполнить файл») для выполнения файла.
Приложение должно запуститься в отдельном окне. Измените положение ползунка в работающем приложении. Значение в текстовом поле изменится.
Привязка особых компонентов
В предыдущем разделе мы выполнили привязку двух стандартных компонентов Swing, которые были добавлены к форме из Palette («Палитра»). Можно выполнить привязку свойств и для других компонентов. Но для этого необходимо выполнить несколько действий, чтобы сделать доступными функции среды IDE по созданию кода привязки для данного компонента. Чтобы сделать функции привязки среды IDE доступными для компонента, можно использовать один из следующих способов:
Добавить компонент к палитре, чтобы его можно было добавить к форме, так же, как мы используем добавление стандартного компонента Swing.
Добавить к проекту класс компонента и скомпилировать компонент.
Чтобы добавить компонент к окну Palette («Палитра»), выполните следующие действия.
Убедитесь, что компонент скомпилирован.
Выберите Tools («Сервис») > Palette («Палитра») > Swing/AWT Components («Компоненты Swing/AWT»).
Если для компонента нужно создать новую категорию палитры, выберите New Category («Создать категорию») и выберите нужное имя перед добавлением компонента.
Щелкните Add from JAR («Добавить из файла JAR»), Add from Library («Добавить из библиотеки») или Add from Project («Добавить из проекта»), после чего завершите работу мастера, чтобы добавить компонент.
Чтобы добавить компонент из проекта, выполните следующие действия.
В окне ‘Проект’ щелкните правой кнопкой мыши узел для компонента и выберите ‘Компилировать файл’.
Перетащите компонент в форму.
Компонент должен появиться в окне инспектора. После этого можно вызвать диалог привязки для любого из свойств компонента.
Расширенная настройка привязки
В примере в первом разделе данного руководства показана простая привязка с некоторыми поведениями по умолчанию. Но порой привязки бывает необходимо или желательно настроить иначе. В этом случае следует использовать вкладку Advanced («Дополнительно») диалогового окна Binding («Привязка»).
Вкладка Advanced («Дополнительно») диалогового окна состоит из следующих полей:
*Имя. *Позволяет создать имя для привязки, которая обеспечивает более высокий уровень гибкости при управлении привязками. Данное имя добавляется к конструктору привязки, и на него можно сослаться с помощью метода getName() привязки.
*Режим обновления. * Указывается способ синхронизации свойств. Возможны следующие значения:
Всегда синхр. (чтение/запись). При каждом внесении изменения в исходный или целевой элемент, другой элемент обновляется.
Только чтение из источника (только чтение). Целевой элемент обновляется только при первом задании исходного значения. Изменения, внесенные в источник, отражаются в целевом объекте. Изменения, внесенные в целевой объект, не отражаются в источнике.
Чтение из источника один раз (чтение один раз). Целевой элемент обновляется только при исходной привязке целевого и исходного элементов.
*Update Source When («Обновить источник когда») *(доступно только для свойства text компонентов JTextField и JTextArea). Позволяет выбрать частоту синхронизации свойств.
Выпадающий список 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
*Средство проверки. * Позволяет указать код для проверки изменения целевого значения свойства перед распространением этого изменения обратно к свойству источника. Например, средство проверки можно использовать, чтобы убедиться, что значение целочисленного свойства находится в определенном диапазоне.
Привязка данных к компонентам
Помимо синхронизации свойств визуальных компонентов Swing и прочих пользовательских компонентов, привязку компонентов можно использовать с целью упрощения использования визуальных компонентов для взаимодействия с базой данных. После того как новая форма Java создана и к ней добавлены компоненты, можно создать код, привязывающий эти компоненты к данным. В данном разделе показано, как выполнить привязку данных к компонентам Swing JTable, JList и JComboBox.
Перед привязкой компонента к данным из базы данных необходимо выполнить следующие действия:
Подключить базу данных к среде IDE.
Создать классы, представляющие таблицы данных, к которым надо выполнить привязку. Действия по созданию сущностных классов для привязки данных к компонентам приведены ниже.
Создание сущностных классов
Чтобы создать сущностные классы для представления таблицы, которая будет привязана к JTable, выполните следующие действия.
В окне ‘Проекты’ щелкните правой кнопкой мыши проект и выберите ‘Создать’ > ‘Другие’, выберите категорию ‘Сохраняемость’ и выберите ‘Классы сущностей’ в шаблоне ‘База данных’.
На странице Database Tables («Таблицы базы данных») мастера выберите подключение к базе данных.
После того как столбец Available Tables («Доступные таблицы») заполнен, выберите таблицы, которые следует использовать в приложении, и нажмите кнопку Add («Добавить»), чтобы переместить их в столбец Selected Tables («Выбранные таблицы»). Нажмите кнопку «Далее».
На странице мастера Entity Classes («Сущностные классы») убедитесь, что установлены флажки Generate Named Query Annotations for Persistent Fields («Создать аннотации именованных запросов для полей «) и Create Persistence Unit («Создать блок сохранения состояния»).
Внесите любые необходимые изменения в имена и местоположение созданных классов.
Нажмите кнопку «Завершить».
Узлы для сущностных классов можно будет увидеть в окне Projects («Проекты»).
Привязка компонентов к компонентам, представляющим данные
В данном разделе показано, как можно выполнить привязку данных к компонентам Swing JTable, JList и JComboBox.
Чтобы добавить таблицу базы данных к форме и автоматически создать JTable для отображения содержимого таблицы базы данных, выполните следующие действия.
Откройте окно «Services».
Подключитесь к базе данных, содержащей таблицу, которую следует добавить к форме. (Для подключения к базе данных щелкните правой кнопкой мыши узел для подключения к базе данных и выберите ‘Подключение’).
Разверните узел для подключения и разверните его узел Tables («Таблицы»).
Перетащите узел для таблицы на форму и нажмите клавишу Ctrl при завершении перетаскивания таблицы.
Будет создана таблица JTable, и ее столбцы будут привязаны к столбцам в таблице базы данных.
Чтобы привязать таблицу базы данных к существующему компоненту JTable, выполните следующие действия.
Щелкните правой кнопкой мыши компонент в конструкторе графических интерфейсов и выберите Bind («Привязка») > elements («элементы»).
Нажмите кнопку Import Data to Form («Импортировать данные в форму»). В диалоговом окне Import Data to Form («Импортировать данные в форму») выберите таблицу данных, к которой следует привязать свои компоненты. Нажмите кнопку «ОК».
При наличии столбцов баз данных, которые не следует включать в JTable, выберите эти столбцы в списке Selected («Выбранные») и переместите их в список Available («Доступные»).
Выберите вкладку Advanced («Дополнительные») для расширенной настройки привязки. Там, например, можно указать средство проверки или преобразователь, либо поведение в случае, если источник привязки не читается или имеет значение null.
Для привязки данных к компоненту JList выполните следующие действия.
Щелкните правой кнопкой мыши компонент в конструкторе графических интерфейсов и выберите Bind («Привязка») > elements («элементы»).
Нажмите кнопку Import Data to Form («Импортировать данные в форму»). В диалоговом окне Import Data to Form («Импортировать данные в форму») выберите таблицу данных, к которой следует привязать свои компоненты. Нажмите кнопку «ОК».
В раскрывающемся списке Display Expression («Отображаемое выражение») выберите свойство, представляющее столбец базы данных, содержащий значения, которые необходимо отобразить в списке.
Выберите вкладку Advanced («Дополнительные») для расширенной настройки привязки.
Для привязки данных к компоненту JComboBox выполните следующие действия.
Щелкните правой кнопкой мыши поле со списком и выберите «Bind > elements».
Нажмите кнопку Import Data to Form («Импортировать данные в форму»). В диалоговом окне Import Data to Form («Импортировать данные в форму») выберите таблицу данных, к которой следует привязать свои компоненты. Нажмите кнопку «ОК».
Оставьте значением Binding Expression («Выражение привязки») null и нажмите кнопку «OК».
Вновь щелкните правой кнопкой мыши поле со списком и выберите «Bind > selectedItem».
Выполните привязку к свойству, на котором должен сказываться выбор пользователя
Нажмите кнопку «ОК», чтобы сохранить изменения.
У библиотеки привязки компонентов (версии 1.2.1 и более ранних) нет класса DetailBinding, позволяющего указать, как следует извлекать отображаемые значения для JComboBox. Так что необходимо будет написать немного собственного кода. Одним из подходов является написание собственного визуализатора ячеек, как показано ниже.
Чтобы правильно визуализировать поле со списком, выполните следующие действия.
Выберите поле со списком.
На вкладке Properties («Свойства») окна Properties выберите свойство визуализатора.
Нажмите кнопку со многоточием (…).
В поле со списком наверху редактора свойств выберите Custom Code («Особый код»).
В области текста введите код, подобный следующему (где jComboBox1 является именем экземпляра JComboBox, MyEntityClass является сущностным классом, а getPropertyFromMyEntityClass() является методом получения для свойства в сущностном классе, привязка которого выполняется).
Примечание. Также можно создать нестандартный визуализатор в его собственном исходном файле, скомпилировать файл, перетащить визуализатор в форму, а затем настроить свойство визуализатора поля со списком для использования этого компонента Bean.
Специальные свойства привязок
При необходимости библиотека привязки компонентов предоставляет специальные синтетические свойства для некоторых компонентов Swing, которые отсутствуют в самих компонентах. Эти свойства представляют такие элементы, как выбранная строка таблицы, которые полезны для привязки к другим свойствам.
Ниже приведен список синтетических свойств, добавленных библиотеками привязки компонентов:
Выбранное состояние кнопки.
Выбранный элемент JComboBox.
Значение JSlider; уведомляет обо всех изменениях.
То же, что и «value», но не уведомляет об изменениях, пока ползунок меняет свое значение.
Список, содержащий выбранные элементы JList; уведомляет обо всех изменениях. При наличии привязки JListBinding, где JList является целевым объектом, о выбранных элементах сообщается как об элементах из списка источников привязки. В ином случае о выбранных элементах сообщается как об объектах из модели списка. Если не выбрано ничего, результатом свойства является пустой список.
То же, что и «selectedElement», но не уведомляет об изменении, пока обновляется выбор из списка.
То же, что и «selectedElements», но не уведомляет об изменении, пока обновляется выбор из списка.
Список, содержащий выбранные элементы JTable; уведомляет обо всех изменениях. При наличии привязки JTableBinding, где JTable является целевым объектом, о выбранных элементах сообщается как об элементах из списка источников привязки. В ином случае о каждом выбранном элементе сообщается как о сопоставлении, ключи которого состоят из строки «column» и индекса столбцов, а значения являются значениями модели для данного столбца. Пример:
То же, что и «selectedElement», но не уведомляет об изменении, пока обновляется выбор из таблицы.
То же, что и «selectedElements», но не уведомляет об изменении, пока обновляется выбор из таблицы.
JTextComponent (включая его подклассы JTextField, JTextArea и JEditorPane)
Свойство текста JTextComponent; уведомляет обо всех изменениях (включая ввод).
Свойство текста JTextComponent; уведомляет об изменении только после потери фокуса.
Свойство текста JTextComponent; уведомляет об изменении, только когда компонент уведомляет о выполнении действия (actionPerformed) или после потери фокуса.
















