defaultButtonTransition = new BindableTransition(duration);
defaultButtonTransition.setCycleCount(Timeline.INDEFINITE);
defaultButtonTransition.setAutoReverse(true);
// The gradient
final Color startColor1 = Color.rgb(183, 206, 238);
final Color startColor2 = Color.rgb(142, 188, 237);
final Color startColor3 = Color.rgb(114, 174, 236);
final Color startColor4 = Color.rgb(178, 218, 242);
final Color endColor1 = Color.rgb(203, 243, 254);
final Color endColor2 = Color.rgb(166, 211, 248);
final Color endColor3 = Color.rgb(137, 198, 248);
final Color endColor4 = Color.rgb(203, 243, 254);
defaultButtonTransition.fractionProperty().addListener(new ChangeListener<Number>() {
@Override public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
List<BackgroundFill> list = new ArrayList<>();
// the animated fill
Stop[] stops = new Stop[] { new Stop(0f, Color.color(
(endColor1.getRed() - startColor1.getRed()) * newValue.doubleValue() + startColor1.getRed(),
(endColor1.getGreen() - startColor1.getGreen()) * newValue.doubleValue() + startColor1.getGreen(),
(endColor1.getBlue() - startColor1.getBlue()) * newValue.doubleValue() + startColor1.getBlue())),
new Stop(0.5f, Color.color(
(endColor2.getRed() - startColor2.getRed()) * newValue.doubleValue() + startColor2.getRed(),
(endColor2.getGreen() - startColor2.getGreen()) * newValue.doubleValue() + startColor2.getGreen(),
(endColor2.getBlue() - startColor2.getBlue()) * newValue.doubleValue() + startColor2.getBlue())),
new Stop(0.51f, Color.color(
(endColor3.getRed() - startColor3.getRed()) * newValue.doubleValue() + startColor3.getRed(),
(endColor3.getGreen() - startColor3.getGreen()) * newValue.doubleValue() + startColor3.getGreen(),
(endColor3.getBlue() - startColor3.getBlue()) * newValue.doubleValue() + startColor3.getBlue())),
new Stop(1f, Color.color(
(endColor4.getRed() - startColor4.getRed()) * newValue.doubleValue() + startColor4.getRed(),
(endColor4.getGreen() - startColor4.getGreen()) * newValue.doubleValue() + startColor4.getGreen(),
(endColor4.getBlue() - startColor4.getBlue()) * newValue.doubleValue() + startColor4.getBlue()))};
LinearGradient gradient = new LinearGradient(0.0, 0.0, 0.0, 1.0, true, CycleMethod.NO_CYCLE, stops);
BackgroundFill backkgroudFill = new BackgroundFill(gradient, new CornerRadii(4.0), new Insets(0));
list.add(backkgroudFill);