Spec-Zone.ru › OpenJavaFX 21

Интерфейс 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 поддерживает ленивые вычисления.

Требования к реализации:
  1. Все связи и свойства в библиотеке JavaFX поддерживают ленивые вычисления.
  2. Все реализующие классы в библиотеке JavaFX проверяют изменение с помощью равенства ссылок (а не равенства объектов, Object#equals(Object)) значения.
C:
JavaFX 2.0
См. также:
  • ObservableBooleanValue
  • ObservableDoubleValue
  • ObservableFloatValue
  • ObservableIntegerValue
  • ObservableLongValue
  • ObservableNumberValue
  • ObservableObjectValue
  • ObservableStringValue

Краткое описание методов

Модификатор и тип Метод Описание
void addListener(ChangeListener<? super T> listener)
Добавляет ChangeListener, который будет уведомляться всякий раз, когда значение ObservableValue изменяется.
default <U> ObservableValue<U> flatMap(Function<? super T,? extends ObservableValue<? extends U>> mapper)
Возвращает ObservableValue, который содержит значение ObservableValue, полученное путем применения заданной функции отображения к этому значению.
T getValue()
Возвращает текущее значение этого ObservableValue
default <U> ObservableValue<U> map(Function<? super T,? extends U> mapper)
Возвращает ObservableValue, который содержит результат применения заданной функции отображения к этому значению.
default ObservableValue<T> orElse(T constant)
Возвращает ObservableValue, который содержит это значение или заданную константу, если оно null.
void removeListener(ChangeListener<? super T> listener)
Удаляет заданного слушателя из списка слушателей, которые уведомляются всякий раз, когда значение ObservableValue изменяется.
default Subscription subscribe(BiConsumer<? super T,? super T> changeSubscriber)
Создает Subscription для этого ObservableValue, который вызывает заданный changeSubscriber со старым и новым значением всякий раз, когда его значение изменяется.
default Subscription subscribe(Consumer<? super T> valueSubscriber)
Создает Subscription для этого ObservableValue, который немедленно предоставляет текущее значение заданному valueSubscriber, а затем — любые последующие значения при изменении его значения.
default ObservableValue<T> when(ObservableValue<Boolean> condition)
Возвращает 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(ChangeListener)

removeListener

void removeListener(ChangeListener<? super T> listener)
Удаляет заданного слушателя из списка слушателей, которые уведомляются всякий раз, когда значение ObservableValue изменяется.

Если заданный слушатель ранее не был зарегистрирован (т. е. он никогда не добавлялся), то вызов этого метода является пустой операцией. Если он был ранее добавлен, он будет удален. Если он был добавлен более одного раза, то будет удалена только первая запись.

Параметры:
listener - слушатель для удаления
Исключения:
NullPointerException - если слушатель равен null
См. также:
  • addListener(ChangeListener)

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
См. также:
  • addListener(ChangeListener)

подписаться

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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API