在我正在做的这个程序中,我需要能够用随机颜色填充形状。我对如何实际填充形状感到困惑。我能够生成随机颜色。我在网上浏览了一下,发现一些消息来源谈论实现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
的东西,但我试过的任何类型转换都不起作用。我不确定如何解决这个问题。有任何想法吗?或者是否有更简单/更好的方法来填充随机颜色的形状?感谢。
答案 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):
然后,您可以创建一个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
示例。