如何编写一个java程序来制作一个" cloud"随机点?

时间:2014-08-19 02:06:44

标签: java applet

我对这个程序遇到了很多麻烦,我想知道是否有人能告诉我我做错了什么......这里有提示: 实现一个包含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);
    }
}

1 个答案:

答案 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注释非常重要的地方,因为如果您在尝试覆盖方法时做错了会导致编译时错误