Spec-Zone.ru › OpenJavaFX 24

Интерфейс 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
ObservableValue - сущность, которая оборачивает значение и позволяет наблюдать за изменениями значения. В общем случае этот интерфейс не следует реализовывать напрямую, а следует использовать один из его подинтерфейсов (ObservableBooleanValue и т.д.).

Значение ObservableValue можно запросить с помощью getValue().

Реализация ObservableValue может поддерживать ленивые вычисления, что означает, что значение не пересчитывается сразу после изменений, а лениво — в следующий раз, когда значение запрашивается (см. примечание 1 в «Требованиях к реализации»).

ObservableValue генерирует два типа событий: события изменения и события инвалидации. Событие изменения указывает на то, что значение изменилось (см. примечание 2 в «Требованиях к реализации»). Событие инвалидации генерируется, если текущее значение больше недействительно. Это различие становится важным, если ObservableValue поддерживает ленивые вычисления, поскольку для лениво вычисляемого значения неизвестно, действительно ли изменилось недействительное значение, пока оно не будет пересчитано. По этой причине для генерации событий изменения требуется жадное вычисление, а события инвалидации можно генерировать для жадных и ленивых реализаций.

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

К ObservableValue можно присоединить два типа слушателей: InvalidationListener для прослушивания событий инвалидации и ChangeListener для прослушивания событий изменения.

Важное примечание: присоединение ChangeListener принудительно выполняет жадное вычисление, даже если реализация ObservableValue поддерживает ленивые вычисления.

Требования к реализации:
  1. Все привязки и свойства в библиотеке JavaFX поддерживают ленивые вычисления.
  2. Все реализующие классы в библиотеке JavaFX проверяют изменение, используя равенство ссылок (а не равенство объектов, Object#equals(Object)) значения.
С:
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.

Например:


 Property<Boolean> condition = new SimpleBooleanProperty(true);
 Property<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, содержащий это значение, когда заданное условие равно true, в противном случае содержит последнее увиденное значение; никогда не возвращает 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 и/или его аффилированные лица. Все права защищены.

© 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