属性绑定有关接口
Observable
public interface Observable一个 Observable 是一个包裹内容的实体,可以观察内容是否失效。
作为一种机制的提供接口,本身仅仅作为机制的声明,机制的实现交由具体的实现类。
支持一类监听器:
@FunctionalInterface public interface InvalidationListener { public void invalidated(Observable observable); }
ObservableValue
public interface ObservableValue<T> extends ObservableObservableValue是一个封装值的实体,可以观察值的变化。
一个 ObservableValue 会产生两类事件:更改事件(change events) 和 失效事件(invalidation events)。
- 更改事件表示值已发生变化。
- 如果当前值不再有效,则会产生无效事件。
如果 ObservableValue 支持懒惰求值(lazy evaluation),这种区分就变得非常重要,因为对于一个懒惰求值的值(a lazily evaluated value),在重新计算之前,我们无法知道无效值(an invalid value)是否真的发生了变化。因此,生成变化事件需要急于求值(eager evaluation),而无效事件则可以在急于求值和懒于求值(lazy implementations)的情况下生成。
支持两类监听器:
@FunctionalInterface public interface ChangeListener<T> { void changed(ObservableValue<? extends T> observable, T oldValue, T newValue); }
All bindings and properties in the JavaFX library support lazy evaluation.
JavaFX 库中的所有绑定和属性都支持懒惰求值。
All implementing classes in the JavaFX library check for a change using reference equality (and not object equality, Object#equals(Object)) of the value.
JavaFX 库中的所有实现类都使用引用相等(而不是对象相等,
Object#equals(Object))来检查值的变化。
Binding
public interface Binding<T> extends ObservableValue<T>Binding 计算的值取决于一个或多个来源。这些来源通常称为绑定的依赖关系。绑定会观察其依赖关系的变化,并自动更新其值。
Property
public interface Property<T> extends ReadOnlyProperty<T>, WritableValue<T>通用接口,定义了所有(可写)属性的通用方法,与属性类型无关。
支持的方法:getValue、setValue、getName、getBean、addListener、removeListener 等
Property 提供一种绑定机制,使得一个属性可以跟踪另一个 ObservableValue,实现响应式。
// 单向绑定
void bind(ObservableValue<? extends T> observable);
// 双向绑定
void bindBidirectional(Property<T> other);
// 检查是否被绑定
boolean isBound();
// 移除单项绑定
void unbind();
// 移除跟其他 property 的双向绑定
void unbindBidirectional(Property<T> other);