Java 绘图框架:令人耳目一新?

Posted

技术标签:

【中文标题】Java 绘图框架:令人耳目一新?【英文标题】:Java Drawing Frame: Refreshing? 【发布时间】:2018-10-11 17:41:12 【问题描述】:

只是作为序言,我对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  */
    
  

【问题讨论】:

为什么要打印新类型?你只是告诉它打印圆圈 正如我所说,我是新手,所以我可能不知道我在说什么。但是在for循环中说。有了这个,我试图让它在每次点击刷新时打印一个新的圆圈,给定带有“k”的新参数。 所以你每次都尝试打印一个新的圆圈,但你一直在打印同一个圆圈? 没错。所以给出的代码是给我们的,因为我们从来没有从教授那里得到任何帮助._。所以我目前提供的代码中会有很多额外的东西,但是 for 循环是我尝试制作一个圆圈,当刷新时,将出现另一个给定位置,而不保留前一个或打印他们都在同一时间。 【参考方案1】:

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

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

【讨论】:

好的,我想我明白你在说什么了。所以说我想画一个圆圈,每次按刷新它的坐标都会向上移动一个数字。我该怎么做? 如果要使用Timer 1)去掉循环,2)使用Timer ...看这个教程docs.oracle.com/javase/tutorial/uiswing/misc/timer.html 在没有计时器的情况下有什么技巧吗?感谢您迄今为止的帮助! 也许你想看看这个链接...codereview.stackexchange.com/questions/29630/…...还有这个...***.com/questions/21247776/…

以上是关于Java 绘图框架:令人耳目一新?的主要内容,如果未能解决你的问题,请参考以下文章

Core Graphics框架 利用Quartz 2D绘图

常见绘图框架-(Charts)

Flask框架:如何运用Ajax轮询动态绘图

Flask框架:运用Ajax轮询动态绘图

UIImage 中的绘图被扭曲

java 绘图程序