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