The package {@code javafx.beans.value} contains the two fundamental interfaces {@link javafx.beans.value.ObservableValue} and {@link javafx.beans.value.WritableValue} and all of its sub-interfaces.

# ObservableValue

An ObservableValue wraps a value that can be read and observed for invalidations and changes. Listeners have to implement either {@link javafx.beans.InvalidationListener} or {@link javafx.beans.value.ChangeListener}. To allow working with primitive types directly a number of sub-interfaces are defined.

Type | Sub-interface of ObservableValue
--- | ---
{@code boolean} | {@link javafx.beans.value.ObservableBooleanValue}
{@code double} | {@link javafx.beans.value.ObservableDoubleValue}
{@code float} | {@link javafx.beans.value.ObservableFloatValue}
{@code int} | {@link javafx.beans.value.ObservableIntegerValue}
{@code long} | {@link javafx.beans.value.ObservableLongValue}
{@code double}, {@code float}, {@code int}, {@code long} | {@link javafx.beans.value.ObservableNumberValue}
{@code Object} | {@link javafx.beans.value.ObservableObjectValue}
{@code String} | {@link javafx.beans.value.ObservableStringValue}

# WritableValue

A WritableValue wraps a value that can be read and set. As with {@code ObservableValues}, a number of sub-interfaces are defined to work with primitive types directly.

Type | Sub-interface of WritableValue
--- | ---
{@code boolean} | {@link javafx.beans.value.WritableBooleanValue}
{@code double} | {@link javafx.beans.value.WritableDoubleValue}
{@code float} | {@link javafx.beans.value.WritableFloatValue}
{@code int} | {@link javafx.beans.value.WritableIntegerValue}
{@code long} | {@link javafx.beans.value.WritableLongValue}
{@code double}, {@code float}, {@code int}, {@code long} | {@link javafx.beans.value.WritableNumberValue}
{@code Object} | {@link javafx.beans.value.WritableObjectValue}
{@code String} | {@link javafx.beans.value.WritableStringValue}