Интерфейс ObservableValue<T>
- Параметры типа:
-
T- Тип оборачиваемого значения.
- Все суперинтерфейсы:
Observable
- Все известные подинтерфейсы:
-
Binding<T>,JavaBeanProperty<T>,NumberBinding,NumberExpression,ObservableBooleanValue,ObservableDoubleValue,ObservableFloatValue,ObservableIntegerValue,ObservableListValue<E>,ObservableLongValue,ObservableMapValue<K,,V> ObservableNumberValue,ObservableObjectValue<T>,ObservableSetValue<E>,ObservableStringValue,Property<T>,ReadOnlyJavaBeanProperty<T>,ReadOnlyProperty<T>,TextInputControl.Content
- Все известные реализующие классы:
-
BooleanBinding,BooleanExpression,BooleanProperty,BooleanPropertyBase,DoubleBinding,DoubleExpression,DoubleProperty,DoublePropertyBase,FloatBinding,FloatExpression,FloatProperty,FloatPropertyBase,IntegerBinding,IntegerExpression,IntegerProperty,IntegerPropertyBase,JavaBeanBooleanProperty,JavaBeanDoubleProperty,JavaBeanFloatProperty,JavaBeanIntegerProperty,JavaBeanLongProperty,JavaBeanObjectProperty,JavaBeanStringProperty,ListBinding,ListExpression,ListProperty,ListPropertyBase,LongBinding,LongExpression,LongProperty,LongPropertyBase,MapBinding,MapExpression,MapProperty,MapPropertyBase,NumberExpressionBase,ObjectBinding,ObjectExpression,ObjectProperty,ObjectPropertyBase,ObservableValueBase,ReadOnlyBooleanProperty,ReadOnlyBooleanPropertyBase,ReadOnlyBooleanWrapper,ReadOnlyDoubleProperty,ReadOnlyDoublePropertyBase,ReadOnlyDoubleWrapper,ReadOnlyFloatProperty,ReadOnlyFloatPropertyBase,ReadOnlyFloatWrapper,ReadOnlyIntegerProperty,ReadOnlyIntegerPropertyBase,ReadOnlyIntegerWrapper,ReadOnlyJavaBeanBooleanProperty,ReadOnlyJavaBeanDoubleProperty,ReadOnlyJavaBeanFloatProperty,ReadOnlyJavaBeanIntegerProperty,ReadOnlyJavaBeanLongProperty,ReadOnlyJavaBeanObjectProperty,ReadOnlyJavaBeanStringProperty,ReadOnlyListProperty,ReadOnlyListPropertyBase,ReadOnlyListWrapper,ReadOnlyLongProperty,ReadOnlyLongPropertyBase,ReadOnlyLongWrapper,ReadOnlyMapProperty,ReadOnlyMapPropertyBase,ReadOnlyMapWrapper,ReadOnlyObjectProperty,ReadOnlyObjectPropertyBase,ReadOnlyObjectWrapper,ReadOnlySetProperty,ReadOnlySetPropertyBase,ReadOnlySetWrapper,ReadOnlyStringProperty,ReadOnlyStringPropertyBase,ReadOnlyStringWrapper,SetBinding,SetExpression,SetProperty,SetPropertyBase,SimpleBooleanProperty,SimpleDoubleProperty,SimpleFloatProperty,SimpleIntegerProperty,SimpleListProperty,SimpleLongProperty,SimpleMapProperty,SimpleObjectProperty,SimpleSetProperty,SimpleStringProperty,SimpleStyleableBooleanProperty,SimpleStyleableDoubleProperty,SimpleStyleableFloatProperty,SimpleStyleableIntegerProperty,SimpleStyleableLongProperty,SimpleStyleableObjectProperty,SimpleStyleableStringProperty,StringBinding,StringExpression,StringProperty,StringPropertyBase,StyleableBooleanProperty,StyleableDoubleProperty,StyleableFloatProperty,StyleableIntegerProperty,StyleableLongProperty,StyleableObjectProperty,StyleableStringProperty
public interface ObservableValue<T> extends Observable
ObservableBooleanValue и т. д.). Значение ObservableValue можно запросить с помощью getValue().
Реализация ObservableValue может поддерживать ленивые вычисления, что означает, что значение не пересчитывается немедленно после изменений, а лениво — в следующий раз, когда оно запрашивается (см. примечание 1 в «Требованиях к реализации»).
Объект ObservableValue генерирует два типа событий: события изменения и события аннулирования. Событие изменения указывает на то, что значение изменилось (см. примечание 2 в «Требованиях к реализации»). Событие аннулирования генерируется, если текущее значение больше не является допустимым. Это различие становится важным, если ObservableValue поддерживает ленивые вычисления, потому что для лениво вычисляемого значения неизвестно, действительно ли изменилось недействительное значение, пока оно не будет пересчитано. По этой причине для генерирования событий изменения требуется жадное вычисление, а события аннулирования могут генерироваться для жадных и ленивых реализаций.
Реализации этого класса должны стремиться генерировать как можно меньше событий, чтобы не тратить слишком много времени на обработчики событий. Реализации в этой библиотеке помечают себя как недействительные при появлении первого события аннулирования. Они больше не генерируют событий аннулирования до тех пор, пока их значение не будет пересчитано и не станет действительным.
К объекту ObservableValue можно прикрепить два типа слушателей: InvalidationListener для прослушивания событий аннулирования и ChangeListener для прослушивания событий изменения.
Важное примечание: прикрепление ChangeListener принудительно выполняет жадное вычисление, даже если реализация ObservableValue поддерживает ленивые вычисления.
- Требования к реализации:
- Все связи и свойства в библиотеке JavaFX поддерживают ленивые вычисления.
- Все реализующие классы в библиотеке JavaFX проверяют изменение с помощью равенства ссылок (а не равенства объектов,
Object#equals(Object)) значения.
- C:
- JavaFX 2.0
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
addListener |
Добавляет ChangeListener, который будет уведомляться всякий раз, когда значение ObservableValue изменяется. |
default <U> ObservableValue<U> |
flatMap |
Возвращает ObservableValue, который содержит значение ObservableValue, полученное путем применения заданной функции отображения к этому значению. |
T |
getValue() |
Возвращает текущее значение этого ObservableValue
|
default <U> ObservableValue<U> |
map |
Возвращает ObservableValue, который содержит результат применения заданной функции отображения к этому значению. |
default ObservableValue<T> |
orElse |
Возвращает ObservableValue, который содержит это значение или заданную константу, если оно null. |
void |
removeListener |
Удаляет заданного слушателя из списка слушателей, которые уведомляются всякий раз, когда значение ObservableValue изменяется. |
default Subscription |
subscribe |
Создает Subscription для этого ObservableValue, который вызывает заданный changeSubscriber со старым и новым значением всякий раз, когда его значение изменяется. |
default Subscription |
subscribe |
Создает Subscription для этого ObservableValue, который немедленно предоставляет текущее значение заданному valueSubscriber, а затем — любые последующие значения при изменении его значения. |
default ObservableValue<T> |
when |
Возвращает ObservableValue, который содержит это значение и обновляется только тогда, когда condition содержит true. |
Методы, объявленные в интерфейсе javafx.beans.Observable
addListener, removeListener, subscribe
Подробное описание методов
addListener
void addListener(ChangeListener<? super T> listener)
ChangeListener, который будет уведомляться всякий раз, когда значение ObservableValue изменится. Если один и тот же слушатель добавляется более одного раза, он будет уведомляться более одного раза. То есть, проверка уникальности не выполняется. Обратите внимание, что один и тот же фактический экземпляр ChangeListener может быть безопасно зарегистрирован для разных ObservableValues.
ObservableValue хранит сильную ссылку на слушателя, что предотвратит сборку мусора слушателя и может привести к утечке памяти. Рекомендуется либо отменить регистрацию слушателя, вызвав removeListener после использования, либо использовать экземпляр WeakChangeListener, чтобы избежать этой ситуации.
- Параметры:
-
listener- слушатель для регистрации - Исключения:
-
NullPointerException- если слушатель равен null - См. также:
removeListener
void removeListener(ChangeListener<? super T> listener)
ObservableValue изменяется. Если заданный слушатель ранее не был зарегистрирован (т. е. он никогда не добавлялся), то вызов этого метода является пустой операцией. Если он был ранее добавлен, он будет удален. Если он был добавлен более одного раза, то будет удалена только первая запись.
- Параметры:
-
listener- слушатель для удаления - Исключения:
-
NullPointerException- если слушатель равен null - См. также:
getValue
T getValue()
ObservableValue
- Возвращает:
- Текущее значение
map
default <U> ObservableValue<U> map(Function<? super T,? extends U> mapper)
ObservableValue, содержащий результат применения заданной функции отображения к этому значению. Результат обновляется при изменении этого ObservableValue. Если это значение null, отображение не применяется, и возвращаемое значение также null. Например, отображение строки в строку в верхнем регистре:
var text = new SimpleStringProperty("abcd");
ObservableValue<String> upperCase = text.map(String::toUpperCase);
upperCase.getValue(); // Returns "ABCD"
text.set("xyz");
upperCase.getValue(); // Returns "XYZ"
text.set(null);
upperCase.getValue(); // Returns null
- Параметры типа:
-
U- тип значений, содержащихся в возвращаемомObservableValue - Параметры:
-
mapper- функция отображения, подлежащая применению к значению, не может бытьnull - Возвращает:
ObservableValue, содержащий результат применения заданной функции отображения к этому значению, илиnull, когда оноnull; никогда не возвращаетnull- Исключения:
-
NullPointerException- если функция отображенияnull - С момента:
- 19
orElse
default ObservableValue<T> orElse(T constant)
ObservableValue, содержащий это значение, или заданную константу, если оно null. Результат обновляется при изменении этого ObservableValue. Этот метод, в сочетании с map(Function), позволяет обрабатывать все значения, включая null значения. Например, отображение строки в строку в верхнем регистре, но оставляя пустым, если вход null:
var text = new SimpleStringProperty("abcd");
ObservableValue<String> upperCase = text.map(String::toUpperCase).orElse("");
upperCase.getValue(); // Returns "ABCD"
text.set(null);
upperCase.getValue(); // Returns ""
- Параметры:
-
constant- значение, используемое, когда этотObservableValueсодержитnull; может бытьnull - Возвращает:
ObservableValue, содержащий это значение, или заданную константу, если оноnull; никогда не возвращаетnull- С момента:
- 19
flatMap
default <U> ObservableValue<U> flatMap(Function<? super T,? extends ObservableValue<? extends U>> mapper)
ObservableValue, содержащий значение ObservableValue, полученное путём применения заданной функции отображения к этому значению. Результат обновляется при изменении либо этого ObservableValue, либо ObservableValue, полученного отображением. Если это значение null, отображение не применяется, и возвращаемое значение равно null. Если отображение привело к null, то возвращаемое значение также null. Этот метод похож на map(Function), но функция отображения возвращает уже существующее ObservableValue, и, если вызывается, flatMap не оборачивает его в дополнительное ObservableValue.
Например, свойство, которое является true только тогда, когда элемент пользовательского интерфейса является частью Scene, которая является частью Window, которая в настоящее время отображается на экране:
ObservableValue<Boolean> isShowing = listView.sceneProperty()
.flatMap(Scene::windowProperty)
.flatMap(Window::showingProperty)
.orElse(false);
// Assuming the listView is currently shown to the user, then:
isShowing.getValue(); // Returns true
listView.getScene().getWindow().hide();
isShowing.getValue(); // Returns false
listView.getScene().getWindow().show();
isShowing.getValue(); // Returns true
listView.getParent().getChildren().remove(listView);
isShowing.getValue(); // Returns false
Изменения в любом из значений: сцены listView, окна этой сцены или отображения этого окна, обновят булево значение isShowing. Этот метод предпочтительнее методов Bindings, так как он является безопасным с точки зрения типов.
- Параметры типа:
-
U- тип значений, содержащихся в возвращаемомObservableValue - Параметры:
-
mapper- функция отображения, подлежащая применению к значению, не может бытьnull - Возвращает:
ObservableValue, содержащий значениеObservableValue, полученное путём применения заданной функции отображения к этому значению, илиnull, когда значение равноnull; никогда не возвращаетnull- Исключения:
-
NullPointerException- если функция отображенияnull - С момента:
- 19
when
default ObservableValue<T> when(ObservableValue<Boolean> condition)
ObservableValue, содержащий это значение и обновляемый только тогда, когда condition содержит true. Возвращаемое ObservableValue наблюдает за этим значением только тогда, когда condition содержит true. Это позволяет этому ObservableValue и условному ObservableValue быть собраны сборщиком мусора, если ни один из них не ссылается иначе, когда condition содержит false. Это в отличие от общего поведения связей, где связь может быть собрана сборщиком мусора только тогда, когда она сама не наблюдается.
condition, содержащий null, обрабатывается как содержащий false.
Например:
ObservableValue<Boolean> condition = new SimpleBooleanProperty(true);
ObservableValue<String> longLivedProperty = new SimpleStringProperty("A");
ObservableValue<String> whenProperty = longLivedProperty.when(condition);
// observe whenProperty, which will in turn observe longLivedProperty
whenProperty.addListener((ov, old, current) -> System.out.println(current));
longLivedProperty.setValue("B"); // "B" is printed
condition.setValue(false);
// After condition becomes false, whenProperty stops observing longLivedProperty; condition
// and whenProperty may now be eligible for GC despite being observed by the ChangeListener
longLivedProperty.setValue("C"); // nothing is printed
longLivedProperty.setValue("D"); // nothing is printed
condition.setValue(true); // longLivedProperty is observed again, and "D" is printed
- Параметры:
-
condition- булевоObservableValue, не может бытьnull - Возвращает:
ObservableValue, содержащий это значение, когда данное условие истинно, в противном случае содержит последнее увиденное значение; никогда не возвращаетnull- С момента:
- 20
subscribe
default Subscription subscribe(BiConsumer<? super T,? super T> changeSubscriber)
Subscription на этом ObservableValue, который вызывает заданный changeSubscriber со старым и новым значениями всякий раз, когда его значение меняется. Предоставленный подписчик аналогичен ChangeListener без параметра ObservableValue. Параметры, предоставленные BiConsumer, — это старое и новое значения соответственно.
Обратите внимание, что один и тот же экземпляр подписчика может безопасно подписываться на разные Observables.
Также обратите внимание, что при подписке на Observable с более длительным жизненным циклом, чем у подписчика, подписчик должен быть отписан, когда больше не нужен, так как подписка в противном случае не позволит подписчику быть собранным сборщиком мусора. Рассмотрите возможность создания производного ObservableValue с помощью when(ObservableValue) и подписку на это производное наблюдаемое значение, чтобы автоматически отсоединить жизненный цикл подписчика от этого ObservableValue, когда какое-либо условие выполняется.
- Параметры:
-
changeSubscriber-BiConsumer, которому будут переданы старое и новое значения этогоObservableValue, не может бытьnull - Возвращает:
Subscription, которое может быть использовано для отмены этой подписки, никогда неnull- Исключения:
-
NullPointerException- если подписчикnull - С момента:
- 21
- См. также:
подписаться
default Subscription subscribe(Consumer<? super T> valueSubscriber)
ObservableValue, которая сразу же предоставляет текущее значение заданному valueSubscriber, а затем любые последующие значения всякий раз, когда его значение изменяется. valueSubscriber вызывается сразу же для удобства, так как обычно пользователь захочет инициализировать значение, а затем обновлять его при изменениях. Обратите внимание, что один и тот же экземпляр подписчика может безопасно подписываться на различные Observables.
Также обратите внимание, что при подписке на Observable с более длительным жизненным циклом, чем у подписчика, подписчик должен быть отписан, когда он больше не нужен, так как в противном случае подписка помешает подписчику быть удалённым сборщиком мусора. Рассмотрите возможность создания производного ObservableValue с помощью when(ObservableValue) и подписки на это производное наблюдаемое значение, чтобы автоматически отвязать жизненный цикл подписчика от этого ObservableValue, когда выполняется некоторое условие.
- Параметры:
-
valueSubscriber-Consumer, которому нужно предоставить значения этогоObservableValue, не может бытьnull - Возвращает:
Subscription, который можно использовать для отмены этой подписки, никогдаnull- Исключения:
-
NullPointerException- если подписчикnull - С момента:
- 21
© 2008, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from JavaFX API Documentation.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Java, JavaFX and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.