2016-11-02 59 views
-3

我有一个ArrayList的形状(矩形和椭圆形),我想绘制这些形状。 如何在for循环中用颜色填充它们?我的ArrayList由矩形和椭圆两种组成。如果我使用fillRect(color),则将的所有形状绘制为矩形,如果我使用fillOval(color),则将所有形状绘制为椭圆形。我该如何适当填充椭圆和矩形?下面的代码只是大纲。Java:如何用颜色填充ArrayList的形状?

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

事实上,你的'形状'被保存在一个ArrayList中是完全不相关的 - 你的问题实际上是“如何用颜色填充一个形状”。 –

+0

'Graphics2D g2d =(Graphics2D)g.create();'应该**在循环外**。 –

回答

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

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

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

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