2016-11-02 12 views
-3

私は、シェイプ(長方形と楕円)のArrayListを持っており、これらのシェイプをペイントしたいと思います。 forループでの色で塗りつぶすにはどうすればいいですか?Java:色でArrayListからシェイプを塗りつぶす方法は?

My ArrayListは、長方形と楕円の両方で構成されています。 fillRect(color)を行うと、すべての図形が四角形としてペイントされ、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); 
    } 
} 
+0

あなたの 'Shape'が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であるという事実は歴史的に確立されています。GraphicsはGraphics2Dでより徹底的に置き換えられましたが、下位互換性でGraphicsを保持していました。

1

どのように私は、forループで色でそれらを埋めるのですか?

シェイプでカラー情報を保存する必要があります。したがって、「シェイプ」と「カラー」の2つのプロパティを持つカスタムオブジェクトを作成する必要があります。次に、図形をペイントする前にGraphics Colorを設定することができます。

このアプローチの実際の例については、Custom Painting Approachesを参照してください。

関連する問題