Skip to content

Instantly share code, notes, and snippets.

@christophe-dooapp
Created June 21, 2013 09:49
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save christophe-dooapp/5830151 to your computer and use it in GitHub Desktop.
package com.dooapp.FXBinding.model;
import javafx.beans.binding.DoubleBinding;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.scene.chart.XYChart;
/**
* A simple demo class
* Created at 20/06/13 14:44.<br>
*
* @author Christophe DUFOUR
*/
public class Foo {
/**
* A list of Data values
*/
private ObservableList<XYChart.Data<Number, Number>> values = FXCollections.observableArrayList(new XYChart.Data<Number, Number>(0.3d, 0.3d), new XYChart.Data<Number, Number>(0.1d, 0.1d), new XYChart.Data<Number, Number>(0.2d, 0.2d));
/**
* A list of Data values
*/
public ObservableList<XYChart.Data<Number, Number>> values() {
return values;
}
/**
* the average value of all XValue of Data in values
*
* @see #values()
*/
private DoubleBinding averageBinding = new DoubleBinding() {
{
//call #computeValue every time #values() changes
super.bind(values());
for (XYChart.Data<Number, Number> d : values()) {
super.bind(d.XValueProperty());
}
//bind (or unbind) new XValueProperty
values().addListener(new ListChangeListener<XYChart.Data<Number, Number>>() {
@Override
public void onChanged(Change<? extends XYChart.Data<Number, Number>> change) {
while (change.next()) {
for (XYChart.Data<Number, Number> d : change.getAddedSubList()) {
bind(d.XValueProperty());
}
for (XYChart.Data<Number, Number> d : change.getRemoved()) {
unbind(d.XValueProperty());
}
}
}
});
}
@Override
protected double computeValue() {
double result = 0;
if (values().isEmpty()) {
return result;
}
for (XYChart.Data<Number, Number> d : values()) {
result += d.getXValue().doubleValue();
}
return result / values().size();
}
};
/**
* the average value of all double in values
*
* @see #values()
*/
public DoubleBinding averageBinding() {
return averageBinding;
}
/**
* Just a main to show a demo
*
* @param args args
*/
public static void main(String[] args) {
Foo foo = new Foo();
System.out.println(foo.averageBinding().get()); //Should print 0.2
foo.values().add(new XYChart.Data<Number, Number>(-3d, -3d));
System.out.println(foo.averageBinding().get()); //Should print -0.6
foo.values().get(0).setXValue(30d);
System.out.println(foo.averageBinding().get()); //Should print 6.825
foo.values.get(3).setXValue(10d);
System.out.println(foo.averageBinding().get()); //Should print 10.075
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment