Java:如何从带有颜色的ArrayList填充形状?

时间:2016-11-02 00:15:34

标签: java swing paintcomponent

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

我的ArrayList由矩形和椭圆组成。如果我执行fillRect(颜色),它会将所有形状绘制为矩形,如果我执行fillOval(颜色),它会将所有形状绘制为椭圆形。如何正确填充椭圆和矩形?以下代码仅列出了大纲。

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);
    }
}

2 个答案:

答案 0 :(得分:2)

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。

答案 1 :(得分:1)

  

如何在for循环中用颜色填充它们?

您需要使用Shape存储颜色信息。因此,您需要创建一个具有两个属性的自定义对象:&#34; shape&#34;和&#34;颜色&#34;。然后,您可以在绘制Shape之前设置图形颜色。

有关此方法的实例,请参阅Custom Painting Approaches