我创建了一个绘制粗线的程序。
import javax.swing.*;
import java.awt.*;
public class Movement {
int xGrid = 50;
public static void main(String[] args) {
Movement m = new Movement();
m.animate();
}
public void animate() {
JFrame frame = new JFrame("Movement");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ScreenDisplay display = new ScreenDisplay();
frame.getContentPane().add(display);
frame.setSize(400, 400);
frame.setVisible(true);
for (int aL = 0; aL < 200; aL++) {
xGrid++;
display.repaint();
try {
Thread.sleep(50);
} catch (Exception ex) { }
}
}
class ScreenDisplay extends JPanel {
public void paintComponent(Graphics g) {
g.setColor(Color.RED);
g.fillOval(xGrid, 175, 50, 50);
}
}
}
由于方法“Thread.sleep(50)”,程序的速度减慢了一点。
所以我有点好奇并删除了“sleep()”方法。
我期望输出的是完全相同的输出,只是非常快。
然而,它只是在框架中打印出一个圆圈。
我真的不知道为什么它只输出一个圆圈,我所做的研究都没有提供答案。
任何人都可以解释原因吗?
答案 0 :(得分:1)
来自Component.repaint
文档:
重新绘制此组件。
如果此组件是轻量级组件,则此方法 导致调用此组件的
paint
方法尽快。否则,这种方法会导致 尽快调用此组件的update
方法 尽可能。
通过它的外观,你的for循环完成得如此之快,以至于当组件调用repaint
方法时,它已经完成,因此只绘制存储在缓冲区中的最后一个圆圈。