package bluej.utility.javafx;

import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.scene.shape.ArcType;
import javafx.util.Duration;

import java.util.function.Consumer;


| Created by neil on 21/03/2016. | public class CircleCountdown extends Canvas{ private final SimpleDoubleProperty time = new SimpleDoubleProperty(1); private final Timeline timeline; public CircleCountdown(double size, Color strokeColor, Duration duration) { super(size, size); timeline = new Timeline(20.0, new KeyFrame(duration, new KeyValue(time, 0))); FXConsumer<Number> update = t -> { GraphicsContext gc = getGraphicsContext2D(); gc.clearRect(0, 0, size, size); gc.setStroke(strokeColor); gc.setLineWidth(3); gc.strokeArc(size * 0.5, size * 0.5, size * 0.5 - 4, size * 0.5 - 4, 90, t.doubleValue() * 360, ArcType.OPEN); }; update.accept(1.0); JavaFXUtil.addChangeListener(time, update); timeline.play(); } public void addOnFinished(FXRunnable action) { JavaFXUtil.addChangeListener(time, t -> { if (t.doubleValue() == 0.0) action.run(); }); } public void stop() { timeline.stop(); } }
top, use, map, class CircleCountdown

.   CircleCountdown
.   addOnFinished
.   stop




54 neLoCode + 1 LoComm