我对这个程序遇到了很多麻烦,我想知道是否有人能告诉我我做错了什么......这里有提示: 实现一个包含Point2D.Double对象数组列表的类Cloud。支持方法
public void add(Point2D.Double aPoint)
public void draw (Graphics2D g2)
将每个点画成一个小圆圈。编写一个绘制100个随机点云的图形应用程序。
这是我拥有的,但它实际上什么都不做,我真的很困惑,我可以使用任何帮助!
Cloud.java:
import java.awt.*;
import java.util.*;
import java.awt.geom.Point2D;
import java.awt.geom.Ellipse2D;
public class Cloud {
public void draw(Graphics2D g)
{
Random rand = new Random();
Graphics2D g2 = (Graphics2D) g;
for (int i=0;i<=20;i++)
{
this.add(new Point2D.Double(rand.nextInt(400)+1,rand.nextInt(300)+1));
}
for (int i=0; i<list.size();i++)
{
Ellipse2D.Double circle = new Ellipse2D.Double(list.get(i).getX()-5,list.get(i).getY()-5, 10, 10);
g2.draw(circle);
}
}
public void add(Point2D.Double aPoint)
{
list.add(aPoint);
}
private ArrayList<Point2D.Double> list = new ArrayList<Point2D.Double>();
}
CloudTest.java:
import java.applet.Applet;
import java.awt.*;
import java.awt.geom.Point2D;
import java.util.*;
public class CloudTest extends Applet
{
public void paint(Graphics2D g)
{
Graphics2D g1 = (Graphics2D) g;
Cloud myCloud = new Cloud();
myCloud.draw(g1);
}
}
答案 0 :(得分:1)
基本上,可能在您的init
方法中,您实际上需要创建一系列随机数据......
首先看一下java.util.Random
。
基本上,您需要创建一个随机x位置,其上限不大于applet的宽度和随机y位置,上限不大于applet的高度,例如..
private Cloud cloud = new Cloud();
//...Probably within the init method...
Random rnd = new Random();
int cloudDensity = 10 + rnd.nextInt(990);
for (int index = 0; index < cloudDensity; index++) {
int x = rnd.nextInt(getWidth());
int y = rnd.nextInt(getHeight());
cloud.add(new Point2D.Double(x, y));
}
然后在你的paint
方法中,你需要绘制这个云......
@Override
public void paint(Graphics g)
{
super.paint(g);
Graphics2D g2d = (Graphics2D)g.create();
myCloud.draw(g2d);
g2d.dispose();
}
现在,paint
的{{1}}方法需要Applet
的实例,而不是Graphics
,否则该方法永远不会被绘制。这是Graphcis2D
注释非常重要的地方,因为如果您在尝试覆盖方法时做错了会导致编译时错误