椭圆形叶子留下的痕迹(涉及IT技术)。

4
我正在尝试制作一个简单的球形动画,从面板的一个角落开始到另一个角落。我已经为此编写了一个程序。
当我运行程序时,椭圆形或球体会留下痕迹。我的意思是说,当程序运行时,它会留下“颜色轨迹”。在我的程序中,计时器每100毫秒触发一个事件。
以下是负责运行代码的逻辑:
void function() {
  // in this there is a action listener timed accordingly to fire event of 
  // doing x++ every 100th miliseconds
}

public void paintComponent(final Graphics g) {
 g.setColor(Color.black);
 g.drawOval(x,y,width,height);
 g.fillOval(x,y,width,height);
}

输出结果的截图:


为什么要对Graphics对象进行final声明? - Andrew Thompson
@ Andrew Thompson,painComponent()在匿名类中声明。 - saplingPro
@ Andrew Thompson,参考 @ Bala R 的回答,super.paintComponent(g) 是什么意思?它的作用是什么? - saplingPro
1个回答

6

尝试

public void paintComponent(final Graphics g) {
 super.paintComponent(g);

 g.setColor(Color.black);
 g.drawOval(x,y,width,height);
 g.fillOval(x,y,width,height);
}

@ Bala R 是的,那个可以用。但是 super.paintComponent(g) 的作用是什么? - saplingPro
@Meprogrammer 调用父类的 paintComponent() 方法相当于清空画布。 - Bala R
如果不清除,@Meprogrammer就会留下轨迹,所以如果需要清除,你必须“某种方式”在每次绘画时清除画布。 - Bala R
2
@Meprogrammer 有时候需求是在画布上继续绘制而不清除已经存在的内容(这种情况下,您不必调用 super.paintComponent())。在您的情况下,由于您不断增加 x 并继续绘制更多的椭圆形,留下了之前绘制的仍然存在于画布上的椭圆形轨迹。因此,在您的情况下,由于您不想要这个轨迹,您必须在绘制新的椭圆形之前清除画布。您可以调用 super.paintComponent() 或使用背景颜色重新填充旧的椭圆形,但通常前者更容易实现。 - Bala R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接