我正在尝试为在画布中以圆圈移动的正方形设置动画。我已经有一个正方形在框架内来回移动但我在布置圆周运动时遇到了一些困难。我创建了一个变量theta,它改变了摆动计时器,因此改变了形状的整体位置。但是,当我运行时没有任何反应。我也不确定我是否应该使用双精度或整数,因为drawRectangle命令只接受整数,但数学很复杂,需要双精度值。这是我到目前为止所做的:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Circle extends JPanel implements ActionListener{
Timer timer = new Timer(5, this);
Double theta= new Double(0);
Double x = new Double(200+(50*(Math.cos(theta))));
Double y = new Double(200+(50*(Math.sin(theta))));
Double change = new Double(0.1);
int xp = x.intValue();
int yp = y.intValue();
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.BLUE);
g.fillRect(xp, yp, 50, 50);
timer.start();
}
public void actionPerformed(ActionEvent e) {
theta=theta+change;
repaint();
}
public static void main(String[] args){
Circle a = new Circle();
JFrame frame = new JFrame("Circleg");
frame.setSize(600, 600);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(a);
}
}
答案 0 :(得分:1)
theta=theta+change;
repaint();
您不能更改xp,yp值。他们不会因为θ值的变化而神奇地更新自己。
将计算x / y位置的代码移动到paintComponent()方法中。
Double x = new Double(200+(50*(Math.cos(theta))));
Double y = new Double(200+(50*(Math.sin(theta))));
int xp = x.intValue();
int yp = y.intValue();
g.fillRect(xp, yp, 50, 50);
此外,
timer.start();
请勿在绘画方法中启动计时器。绘画方法仅用于绘画。
应该在你班级的构造函数中启动Timer。