Module javafx.base
Package javafx.beans.binding

# Class DoubleBinding

java.lang.Object
javafx.beans.binding.NumberExpressionBase
javafx.beans.binding.DoubleExpression
javafx.beans.binding.DoubleBinding

All Implemented Interfaces:
  `Binding<Number>`, `NumberBinding`, `NumberExpression`, `Observable`, `ObservableDoubleValue`, `ObservableNumberValue`, `ObservableValue<Number>`

    public abstract class DoubleBinding
    extends DoubleExpression
    implements NumberBinding

Base class that provides most of the functionality needed to implement a `Binding` of a `double` value.

`DoubleBinding` provides a simple invalidation-scheme. An extending class can register dependencies by calling `bind(Observable...)`. If One of the registered dependencies becomes invalid, this `DoubleBinding` is marked as invalid. With `unbind(Observable...)` listening to dependencies can be stopped.

To provide a concrete implementation of this class, the method `computeValue()` has to be implemented to calculate the value of this binding based on the current state of the dependencies. It is called when `get()` is called for an invalid binding.

Below is a simple example of a `DoubleBinding` calculating the square- root of a `ObservableNumberValue` `moo`.

     final ObservableDoubleValue moo = ...;

     DoubleBinding foo = new DoubleBinding() {

         {
             super.bind(moo);
         }

         @Override
         protected double computeValue() {
             return Math.sqrt(moo.getValue());
         }
     };

Following is the same example with implementations for the optional methods `Binding.getDependencies()` and `Binding.dispose()`.

     final ObservableDoubleValue moo = ...;

     DoubleBinding foo = new DoubleBinding() {

         {
             super.bind(moo);
         }

         @Override
         protected double computeValue() {
             return Math.sqrt(moo.getValue());
         }

         @Override
         public ObservableList<?> getDependencies() {
             return FXCollections.singletonObservableList(moo);
         }

         @Override
         public void dispose() {
             super.unbind(moo);
         }
     };

Since:
  JavaFX 2.0
See Also:
  `Binding`, `NumberBinding`, `DoubleExpression`

- ## Constructor Summary

  Constructors
  Constructor | Description
  --- | ---
  `DoubleBinding()` | Creates a default `DoubleBinding`.

- ## Method Summary

  Modifier and Type | Method | Description
  --- | --- | ---
  `protected void` | `bind​(Observable... dependencies)` | Start observing the dependencies for changes.
  `protected abstract double` | `computeValue()` | Calculates the current value of this binding.
  `void` | `dispose()` | A default implementation of `dispose()` that is empty.
  `double` | `get()` | Returns the result of `computeValue()`.
  `ObservableList<?>` | `getDependencies()` | A default implementation of `getDependencies()` that returns an empty `ObservableList`.
  `protected void` | `onInvalidating()` | The method onInvalidating() can be overridden by extending classes to react, if this binding becomes invalid.
  `String` | `toString()` | Returns a string representation of this `DoubleBinding` object.
  `protected void` | `unbind​(Observable... dependencies)` | Stop observing the dependencies for changes.

  ### Methods declared in class javafx.beans.binding.DoubleExpression

  `add, add, add, add, add, asObject, divide, divide, divide, divide, divide, doubleExpression, doubleExpression, multiply, multiply, multiply, multiply, multiply, negate, subtract, subtract, subtract, subtract, subtract`

  ### Methods declared in class javafx.beans.binding.NumberExpressionBase

  `numberExpression`

  ### Methods declared in class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

  ### Methods declared in interface javafx.beans.binding.Binding

  `invalidate, isValid`

  ### Methods declared in interface javafx.beans.binding.NumberExpression

  `add, add, add, add, add, asString, asString, asString, divide, divide, divide, divide, divide, greaterThan, greaterThan, greaterThan, greaterThan, greaterThan, greaterThanOrEqualTo, greaterThanOrEqualTo, greaterThanOrEqualTo, greaterThanOrEqualTo, greaterThanOrEqualTo, isEqualTo, isEqualTo, isEqualTo, isEqualTo, isEqualTo, isEqualTo, isEqualTo, isEqualTo, isNotEqualTo, isNotEqualTo, isNotEqualTo, isNotEqualTo, isNotEqualTo, isNotEqualTo, isNotEqualTo, isNotEqualTo, lessThan, lessThan, lessThan, lessThan, lessThan, lessThanOrEqualTo, lessThanOrEqualTo, lessThanOrEqualTo, lessThanOrEqualTo, lessThanOrEqualTo, multiply, multiply, multiply, multiply, multiply, negate, subtract, subtract, subtract, subtract, subtract`

  ### Methods declared in interface javafx.beans.Observable

  `addListener, removeListener`

  ### Methods declared in interface javafx.beans.value.ObservableNumberValue

  `doubleValue, floatValue, intValue, longValue`

  ### Methods declared in interface javafx.beans.value.ObservableValue

  `addListener, getValue, removeListener`

- ## Constructor Details

  - ### DoubleBinding

    public DoubleBinding()
    Creates a default `DoubleBinding`.

- ## Method Details

  - ### bind

    protected final void bind​(Observable... dependencies)
    Start observing the dependencies for changes. If the value of one of the dependencies changes, the binding is marked as invalid.
    Parameters:
      `dependencies` - the dependencies to observe

  - ### unbind

    protected final void unbind​(Observable... dependencies)
    Stop observing the dependencies for changes.
    Parameters:
      `dependencies` - the dependencies to stop observing

  - ### dispose

    public void dispose()
    A default implementation of `dispose()` that is empty.
    Specified by:
      `dispose` in interface `Binding<Number>`

  - ### getDependencies

    public ObservableList<?> getDependencies()
    A default implementation of `getDependencies()` that returns an empty `ObservableList`.
    Specified by:
      `getDependencies` in interface `Binding<Number>`
    Returns:
      an empty `ObservableList`

  - ### get

    public final double get()
    Returns the result of `computeValue()`. The method `computeValue()` is only called if the binding is invalid. The result is cached and returned if the binding did not become invalid since the last call of `get()`.
    Specified by:
      `get` in interface `ObservableDoubleValue`
    Returns:
      the current value

  - ### onInvalidating

    protected void onInvalidating()
    The method onInvalidating() can be overridden by extending classes to react, if this binding becomes invalid. The default implementation is empty.

  - ### computeValue

    protected abstract double computeValue()
    Calculates the current value of this binding.

    Classes extending `DoubleBinding` have to provide an implementation of `computeValue`.

    Returns:
      the current value

  - ### toString

    public String toString()
    Returns a string representation of this `DoubleBinding` object.
    Overrides:
      `toString` in class `Object`
    Returns:
      a string representation of this `DoubleBinding` object.