椭圆形的小径

sap*_*Pro 4 java graphics user-interface swing 2d

我正在尝试制作一个简单的球动画,从1角开始,然后转到面板的另一个角落.我为此编写了一个程序.

当我运行程序时,oval离开了轨迹.我的意思是说它在程序运行时会留下"颜色痕迹".在我的程序中timer,每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);
}
Run Code Online (Sandbox Code Playgroud)

输出屏幕截图:

Bal*_*a R 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);
}
Run Code Online (Sandbox Code Playgroud)

  • @Meprogrammer有时要求是在画布上继续绘画而不清除画布上的内容(在这种情况下你不必调用`super.paintComponent()`).在您的情况下,当您继续增加x并继续绘制更多椭圆时,之前绘制的椭圆留在画布上仍留有痕迹.因此,在您的情况下,由于您不需要跟踪,因此在绘制新椭圆之前必须以某种方式清除画布.您可以调用`super.paintComponent()`或用背景颜色重新填充旧椭圆,但通常前者更容易. (2认同)