Я - новичок.
package com.company;
import javax.swing.*;
import java.awt.*;
import java.util.Timer;
import java.util.TimerTask;

import static javax.swing.WindowConstants.EXIT_ON_CLOSE;
public class Main  extends JPanel {
    int i=0;
    public static void main(String[] args) {
        JFrame window = new JFrame(String.valueOf(600));
        window.setContentPane(new Main());
        window.setSize(600,600);
        window.setBackground(Color.CYAN);
        window.setResizable(false);
        window.setDefaultCloseOperation(EXIT_ON_CLOSE);
        window.setVisible(true);
    }


    public void paintComponent (Graphics g){
        Graphics2D graphic = (Graphics2D) g;
        g.setColor(Color.black);
        graphic.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);   //сглаживание
        Circle(g);
        graphic.clearRect(20,20,30,30);
    }


    public void Circle(Graphics g) {
        int x = 100;
         int[] i = {0};
        g.drawOval(x-50, x-50, 400, 400);
        while (i[0] <360){
        double a = Math.PI * i[0] / 180;
        double gradus = Math.sin(a);
        double gradus1 = Math.cos(a);
        int gr = (int) Math.round(gradus*x);
        int gr1 = (int) Math.round(gradus1*x);
        g.drawOval((gr+122)*2, (gr1+122)*2, 10, 10);
        System.out.println(gr);
        i[0] = i[0] +30; }

            TimerTask task = new TimerTask() {

                @Override
                public void run() {
                    // task to run goes here
                    System.out.println("Hello !!!"+ i[0]);
                    i[0]++;
                }

            };
            Timer timer = new Timer();

            System.out.println("Привет");
            long delay = 0;
            long intevalPeriod = 1000;

            // schedules the task to be run in an interval
            timer.scheduleAtFixedRate(task, delay,
                    intevalPeriod);

        }}
1. Подбором совместил координаты центров малых окружностей и большую окружность . Как это сделать по умному, т.е. программно и с формулами? 2. При запуске программы идет повтор. Считает координаты (я рад!), выводит приветствие (я рад!), НО!потом начинает снова считать координаты и выводить приветствие, Почему? НО! потом САМОСТОЯТЕЛЬНО! перестает считать координаты и выводит приветствия, помеченные глобальной переменной со счетчиком (я рад!). Почему? 3. Хочется сделать перемещение объекта по заданной траектории, но не афинными трансформациями, а дифурами с приращением по времени. Java ругается и не дает впихнуть paintComponent в таймер. Что делать ?