Я хочу сделать циферблат, который будет каждую секунду менять время. - Java

Узнай цену своей работы

Формулировка задачи:

Подскажите, как можно в javafx реализовать бесконечный цикл. Допустим я хочу сделать циферблат, который будет каждую секунду менять время.

Решение задачи: «Я хочу сделать циферблат, который будет каждую секунду менять время.»

textual
Листинг программы
import javafx.animation.*;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;
import javafx.stage.Stage;
import javafx.util.Duration;
 
public class Ciferblat extends Application {
 
    private double width = 500, height = 500, length = 200;
 
    public static void main(String[] args) {
        launch(args);
    }
 
    @Override
    public void start(Stage primaryStage) {
        ImageView view = new ImageView("http://poko-pic.ru/images/490625_ciferblat-png.jpg");
        view.setPreserveRatio(true);
        view.setFitWidth(width);
 
        Line line = new Line(width / 2, height / 2, width / 2, height / 2 - length);
        Circle circle = new Circle(width / 2, height / 2, 10, Color.WHITE);
        circle.setStroke(Color.RED);
        line.setStroke(Color.RED);
 
        Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(60),
                new KeyValue(line.endXProperty(), line.getStartX() + length, new MyInterpolator(true)),
                new KeyValue(line.endYProperty(), line.getStartY(), new MyInterpolator(false)))
        );
        timeline.setCycleCount(Animation.INDEFINITE); 
        timeline.play();
 
        primaryStage.setScene(new Scene(new AnchorPane(view, line, circle), 500, 500));
        primaryStage.show();
    }
 
    class MyInterpolator extends Interpolator {
        private boolean isX;
 
        MyInterpolator(boolean isX) {
            this.isX = isX;
        }
 
        @Override
        protected double curve(double t) {
            return isX ? Math.cos(Math.toRadians(90 - 360 * t)) : 1 - Math.sin(Math.toRadians(90 - 360 * t));
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5
Похожие ответы