在java

时间:2015-11-18 15:39:01

标签: java graphics colors

在我正在做的这个程序中,我需要能够用随机颜色填充形状。我对如何实际填充形状感到困惑。我能够生成随机颜色。我在网上浏览了一下,发现一些消息来源谈论实现Paint接口并在你想要绘制的形状上使用方法setPaint(),然后调用fill方法。我尝试了这个,但没有成功。也许我只是错了。这就是我所拥有的。

Random rand = new Random();
float r = rand.nextFloat();
float g = rand.nextFloat();
float b = rand.nextFloat();

Color randomColor = new Color (r, g, b);

这是在超类的构造函数中,我实际上有randomColor作为类的属性。因此,为了访问子类中的该元素,我提供了一个只返回Color的基本getter。

在子类中我有这个:

Rectangle2D.Double rectangle = new Rectangle2D.Double(getX(), getY(), getWidth(), height);
rectangle.setPaint(getColor());
rectangle.fill();
g2.draw(rectangle);

我得到的错误是关于类型转换rectangle的东西,但我试过的任何类型转换都不起作用。我不确定如何解决这个问题。有任何想法吗?或者是否有更简单/更好的方法来填充随机颜色的形状?感谢。

2 个答案:

答案 0 :(得分:2)

您应该在Graphics2D上的矩形上调用您正在调用的方法

Rectangle2D.Double rectangle = new Rectangle2D.Double(getX(), getY(), getWidth(), height);
g2.setPaint(getColor());
g2.fill(rectangle);
g2.draw(rectangle);

答案 1 :(得分:2)

  

我需要能够用随机颜色填充形状

然后你应该创建一个包含两个属性的类(ColoredShape):

  1. 形状
  2. 颜色
  3. 然后,您可以创建一个ArrayList来保存此类的实例。

    ArrayList<ColoredShape> shapes = new ArrayList<ColoredShape>();
    shapes.add( new ColoredShape(aShape, generateRandomColor());
    shapes.add( new ColoredShape(anotherShape, generateRandomColor());
    

    然后在面板的paintComponent()方法中,遍历ArrayList并绘制所有形状:

    for (ColoredShape shape: shapes)
    {
        g2.setColor(shape.getColor());
        g2.draw(shape.getShape());
    }
    

    有关此方法的工作示例,请查看Custom Painting Approaches中的DrawOnComponent示例。