Java: 如何用颜色填充 ArrayList 中的形状?

Java: How to fill shape from an ArrayList with color?

我有一个形状(矩形和椭圆形)的数组列表,我想绘制这些形状。 如何在 for 循环中用颜色填充它们?

我的 ArrayList 由矩形和椭圆组成。如果我执行 fillRect(color),它将 all 形状绘制为矩形,如果我执行 fillOval(color),它将所有形状绘制为椭圆。如何适当地填充椭圆和矩形?下面的代码只做轮廓。

private ArrayList<Shape> shapes = new ArrayList<Shape>();
private Shape currentShape; // the shape being drawn (either Rectangle or Oval)

public void paintComponent(Graphics g) {
    super.paintComponent(g);

    for(Shape s : shapes) {
        Graphics2D g2d = (Graphics2D) g.create();
        s.paint(g2d);
    }
}

How do I fill them with color in the for loop?

您需要将颜色信息与形状一起存储。因此,您需要创建一个具有两个属性的自定义对象:"shape" 和 "color"。然后你可以在绘制形状之前设置图形颜色。

有关此方法的工作示例,请参阅 Custom Painting Approaches

Graphics2D.fill(Shape) 就可以了。

private List<Shape> shapes = new ArrayList<>();

public void paintComponent(Graphics g) {
    Graphics2D g2d = (Graphics2D) g;
    g2d.setColor(Color.RED);
    for (Shape shape : shapes) {
        g2d.fill(shape);
    }
}

没有g.create。每个 paintComponent 参数实际上是一个 Graphics2D 的事实在历史上是成立的:他们用更详尽的 Graphics2D 替换了 Graphics,但为了向后兼容保留了 Graphics。