因为fr.setSize(400, 500);设置的窗口宽400,高500,而在g.fillOval(c++, d++, 50, 50); c和d一直是相等的,所以是沿着45度的方向移动,并没有按照对角线方向移动,这里的d需要根据c和窗口宽高来计算即可。即增加d = c * 500 / 400; 将d++修改为d。
代码修改后如下:
public void paint(Graphics g) {
for (int i = 0; i < 400; i++) {
g.clearRect(0, 0, a-1, b-1);
g.setColor(Color.orange);
d = c * 500 / 400;
g.fillOval(c++, d, 50, 50);
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (c >= a) a = 400;
if (d >= b) b = 500;
}
}
我在jdk17环境下是对角线运动的