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