Bindings is a helper class with a lot of utility functions to create simple bindings.
Usually there are two possibilities to define the same operation: the Fluent
API and the the factory methods in this class. This allows a developer to
define complex expression in a way that is most easy to understand. For
instance the expression result = a*b + c*d can be defined using only
the Fluent API:
DoubleBinding result = a.multiply(b).add(c.multiply(d));
Or using only factory methods in Bindings:
NumberBinding result = add (multiply(a, b), multiply(c,d));
Or mixing both possibilities:
NumberBinding result = add (a.multiply(b), c.multiply(d));
The main difference between using the Fluent API and using the factory
methods in this class is that the Fluent API requires that at least one of
the operands is an Expression (see javafx.beans.binding). (Every
Expression contains a static method that generates an Expression from an
javafx.beans.value.ObservableValue.)
Also if you watched closely, you might have noticed that the return type of
the Fluent API is different in the examples above. In a lot of cases the
Fluent API allows to be more specific about the returned type (see
javafx.beans.binding.NumberExpression for more details about implicit
casting.
Deploying an Application as a Module
If any class used in a select-binding (see the various select*
methods) is in a named module, then it must be reflectively accessible to the
javafx.base module.
A class is reflectively accessible if the module
opens the containing package to at
least the javafx.base module.
For example, if com.foo.MyClass is in the foo.app module,
the module-info.java might
look like this:
module foo.app {
opens com.foo to javafx.base;
}
Alternatively, a class is reflectively accessible if the module
exports the containing package
unconditionally.
Binding, NumberBinding