Я пытаюсь создать анимацию прямоугольника, который следует по круговой траектории, как планета вокруг Солнца, но моя анимация проходит только четверть всей орбиты. Я не совсем уверен, что я делаю не так, и ни один из ранее отвеченных вопросов не совпадает с моим. Большинство из них не реализуют java.awt.Timer. Вот мой код:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Circular_path extends JFrame{
public Circular_path() {
setTitle("Circular_path");
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Canvas canvas = new Canvas();
add(canvas);
setVisible(true);
}
protected class Canvas extends JComponent implements ActionListener{
protected double a=getWidth()/2, b=getHeight()/2; //the center of the orbit
protected double x= 0, y = 0; //initialising x and y coordinates
protected int r=100; //radius of circle
protected double theta = 0.0;//angle theta
public Canvas() {
timer.start();
}
//create Timer object
Timer timer = new Timer(10, this);
@Override
public void paintComponent(Graphics g) {
System.out.println("Canvas.paintComponent");
g.setColor(Color.RED);
g.fillRect((int)x,(int)y,10,10);
}
public void actionPerformed(ActionEvent e) {
x = a+ (r*Math.cos(theta));
y = b+ (r*Math.sin(theta));
repaint();
theta= theta+(Math.PI/1000);
}
}
public static void main(String[] args) {
new Circular_path();
}
}