private void init(final ZonedDateTime TIME) { time = new ObjectPropertyBase<ZonedDateTime>(TIME) { @Override protected void invalidated() { if (!isRunning() && isAnimated()) { long animationDuration = getAnimationDuration(); timeline.stop(); final KeyValue KEY_VALUE = new KeyValue(currentTime, TIME.toEpochSecond()); final KeyFrame KEY_FRAME = new KeyFrame(javafx.util.Duration.millis(animationDuration), KEY_VALUE); timeline.getKeyFrames().setAll(KEY_FRAME); timeline.setOnFinished(e -> fireUpdateEvent(FINISHED_EVENT)); timeline.play(); } else { currentTime.set(TIME.toEpochSecond()); fireUpdateEvent(FINISHED_EVENT); } } @Override public Object getBean() { return Clock.this; } @Override public String getName() { return "time"; } }; currentTime = new LongPropertyBase(time.get().toEpochSecond()) { @Override protected void invalidated() {} @Override public Object getBean() { return Clock.this; } @Override public String getName() { return "currentTime"; } }; zoneId = time.get().getZone(); timeline = new Timeline(); timeline.setOnFinished(e -> fireUpdateEvent(FINISHED_EVENT)); updateInterval = LONG_INTERVAL; _checkSectionsForValue = false; _checkAreasForValue = false; sections = FXCollections.observableArrayList(); _secondsVisible = false; _highlightSections = false; areas = FXCollections.observableArrayList(); _areasVisible = false; _highlightAreas = false; _text = ""; _discreteSeconds = true; _discreteMinutes = true; _discreteHours = false; _secondsVisible = false; _titleVisible = false; _textVisible = false; _dateVisible = false; _dayVisible = false; _nightMode = false; _running = false; _autoNightMode = false; _backgroundPaint = Color.TRANSPARENT; _borderPaint = Color.TRANSPARENT; _borderWidth = 1; _foregroundPaint = Color.TRANSPARENT; _titleColor = DARK_COLOR; _textColor = DARK_COLOR; _dateColor = DARK_COLOR; _hourTickMarkColor = DARK_COLOR; _minuteTickMarkColor = DARK_COLOR; _tickLabelColor = DARK_COLOR; _alarmColor = DARK_COLOR; _hourTickMarksVisible = true; _minuteTickMarksVisible = true; _tickLabelsVisible = true; _hourColor = DARK_COLOR; _minuteColor = DARK_COLOR; _secondColor = DARK_COLOR; _knobColor = DARK_COLOR; _lcdDesign = LcdDesign.STANDARD; _alarmsEnabled = false; _alarmsVisible = false; alarms = FXCollections.observableArrayList(); alarmsToRemove = new ArrayList<>(); _lcdCrystalEnabled = false; _shadowsEnabled = false; _lcdFont = LcdFont.DIGITAL_BOLD; _locale = Locale.US; _tickLabelLocation = TickLabelLocation.INSIDE; _animated = false; animationDuration = 10000; _customFontEnabled = false; _customFont = Fonts.robotoRegular(12); }