Java绘图框架:刷新?

时间:2018-05-01 17:01:54

标签: java drawing repaint

只是为了序言,我对java很新。所以期待愚蠢的错误。

我正在尝试用BlueJ中的java绘图面板做一个项目,我无法弄清楚如何制作一个有移动对象的程序。这是一个项目,因此提供了代码。我们不得不以任何我们想要的方式修改它。我们无法添加任何其他包。

我知道它与某种循环有关,但是我在制作某种类型的错误时,它只打印了大量的圆圈,而不是每次按下刷新时的新类型。这是代码。

import java.awt.*;
import javax.swing.*;

public class DrawingPanel extends JPanel {
  public void paintComponent(Graphics g)
  {
   // clear screen
    g.setColor(Color.white);
    g.clearRect(0,0,500,500);
    {
      System.out.printf("Spring Design Barker Spring 2018%n");
      int x = 125;
      int y = 125;
      int w = 50;
      int h =80;
      int b = 50;
      int rd = 255 ;    
      int gn = 255 ;    
      int bl = 0 ;
      Circle c1,c2;
      Rectangle r1,r2;
      Triangle t1,t2;
      Color clr1,c;
      clr1 = new Color(rd,gn,bl);  
      r1 = new Rectangle(x,y,w,h,clr1);
      clr1 = new Color(106,96,200);  
      t1=new Triangle(x,y,w,h,clr1);
      clr1 = new Color(220,15,15);  
      c1=new Circle(x,25,25,clr1);
      r1.draw(g);      /*display the rectangle  */
      t1.draw(g);      /*display the triangle  */
      c1.draw(g);      /*display the circle  */
      t1.setH(-h);      /*display the triangle  */
      t1.setColor(new Color(15,220,15));      /*display the triangle  */
      t1.draw(g);      /*display the triangle  */

      x=200;
      y=200;
      for(int k=0;k<9;k++)
       {
         c=new Color(255-k*20,0+k*15,0+k*25);   // vary color
         c1=new Circle(200,10 * k,50,c);
         c1.draw(g);      /*display the new circle  */
       }
      //c=new Color(0,255,0);   // change paint in can to green
      //c2=new Circle(300,50,10,c);
      //c2.draw(g);      /*display the new circle  */
    }
  }
}

1 个答案:

答案 0 :(得分:1)

错误在于你一次又一次地画圆圈。 每次循环中的代码运行时,都会绘制一个新的圆圈。你必须明白,当你绘制圆形时,你实际上并没有重绘相同的圆形而是绘制一个新的圆形。我理解你想做的是让一个圆圈移动。你可以通过一次又一次地运行整个方法来做到这一点。我喜欢这样做的方法是使用Swing Timer。这是一种运行循环的方法,用简单的单词调用paintComponent()方法。

我实际上在做某事,我正在使用这个库来显示图形。我唯一不喜欢的是它使用了大量的CPU 。也许有更好的方法来做到这一点。