2016-11-02 35 views
-3

Ich habe eine ArrayList von Formen (Rechtecke und Ovale) und ich möchte diese Formen malen. Wie fülle ich sie mit Farbe in der for-Schleife?Java: Wie füllt man Form aus einer ArrayList mit Farbe?

Meine ArrayList besteht aus Rechtecken und Ovalen. Wenn ich fillRect (color) male, malt es alle Formen als Rechtecke, und wenn ich fillOval (Farbe) fülle, malt es alle Formen als Ovale. Wie kann ich die Ovale und Rechtecke passend füllen? Der folgende Code enthält nur die Umrisse.

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

Die Tatsache, dass Ihre 'Shape's in einer ArrayList gehalten werden, ist völlig irrelevant - Ihre Frage ist wirklich" Wie man eine Form mit Farbe füllt ". –

+0

'Graphics2D g2d = (Graphics2D) g.create();' sollte ** außerhalb ** der Schleife sein. –

Antwort

2

Graphics2D.fill(Shape) wird tun.

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

Nein g.create. Die Tatsache, dass jeder paintComponent-Parameter eigentlich ein Graphics2D ist, ist historisch begründet: Sie ersetzten Graphics durch eine umfassendere Graphics2D, aber aus Gründen der Abwärtskompatibilität behielt Graphics.

1

Wie kann ich sie mit Farbe in der for-Schleife füllen?

Sie müssen die Farbinformationen mit der Form speichern. Sie müssen also ein benutzerdefiniertes Objekt mit zwei Eigenschaften erstellen: "Form" und "Farbe". Dann können Sie die Grafikfarbe einstellen, bevor Sie die Form malen.

Ein Arbeitsbeispiel für diesen Ansatz finden Sie unter Custom Painting Approaches.

Verwandte Themen