swing求助啊!!! 我在JPanel中绘制了一个圆形 ,我现在想让它按一个轨迹自动移动,应该怎么做啊!

给个思路也行啊!!!
2025-01-06 15:14:26
推荐回答(2个)
回答1:

这个问题稍微复杂,不是一时半会能说清的。
你可以看看 网易公开课——《编程方法》,一定能解决你的问题,一定能。但是你要沉下心来仔细看,对你编程素养的提高大有帮助。

只要思路的话,请看

当你了一个轨迹,执行循环:
每次移动一小步;
循环结束

翻译成计算机算法

while(条件){ //这其实是个动画,所以要连续移动多步,while的作用在于此
move(dx,dy); // move(dx,dy)是 你自己编写的函数,让圆在 x、y方向上分别移动dx和dy个像素
dx = ?
dy = ? //dx 和 dy发生变化,至于怎么变化要看你需要什么轨迹
}

其实也挺简单的,语言细节绝非编程本质,程序的本质是人类世界在电脑中的模拟。先认清楚本质是什么再去编程。

回答2:

我给你一个圆形围绕另一个圆形转圈的程序,你看看吧。
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DD extends JFrame{
My_Panel jp=new My_Panel();
DD(){
Thread t=new Thread(jp);
t.start();
add(jp);
setSize(500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new DD();
}
}
class My_Panel extends JPanel implements Runnable{
int x,y,r=100,theta=0;
public void paint(Graphics g){
x=(int)(200+r*Math.sin(theta));
y=(int)(200+r*Math.cos(theta));
g.drawOval(x, y, 100, 100);
}
public void run() {
while(true){
try {
Thread.sleep(200);
theta++;
if(theta==360) theta=0;
repaint();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}