/* * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * * * * * * */ package javafx.beans.binding; import javafx.beans.InvalidationListener; import javafx.beans.Observable; import javafx.beans.value.ChangeListener; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import com.sun.javafx.collections.annotations.ReturnsUnmodifiableCollection; import com.sun.javafx.binding.BindingHelperObserver; import com.sun.javafx.binding.ExpressionHelper; /** * Base class that provides most of the functionality needed to implement a * {@link Binding} of a {@code double} value. *
* {@code DoubleBinding} provides a simple invalidation-scheme. An extending * class can register dependencies by calling {@link #bind(Observable...)}. * If One of the registered dependencies becomes invalid, this * {@code DoubleBinding} is marked as invalid. With * {@link #unbind(Observable...)} listening to dependencies can be stopped. *
* To provide a concrete implementation of this class, the method * {@link #computeValue()} has to be implemented to calculate the value of this * binding based on the current state of the dependencies. It is called when * {@link #get()} is called for an invalid binding. *
* Below is a simple example of a {@code DoubleBinding} calculating the square- * root of a {@link javafx.beans.value.ObservableNumberValue} {@code 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
* {@link Binding#getDependencies()} and {@link 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);
* }
* };
*
*
*
* @see Binding
* @see NumberBinding
* @see javafx.beans.binding.DoubleExpression
*
*
* @since JavaFX 2.0
*/
public abstract class DoubleBinding extends DoubleExpression implements
NumberBinding {
private double value;
private boolean valid;
private BindingHelperObserver observer;
private ExpressionHelper* Classes extending {@code DoubleBinding} have to provide an implementation * of {@code computeValue}. * * @return the current value */ protected abstract double computeValue(); /** * Returns a string representation of this {@code DoubleBinding} object. * @return a string representation of this {@code DoubleBinding} object. */ @Override public String toString() { return valid ? "DoubleBinding [value: " + get() + "]" : "DoubleBinding [invalid]"; } }