Mehrere Shapes "malen"

Schaaaf

Bekanntes Mitglied
Hallo,

ich habe folgendes:

Java:
class PaintingClass extends JComponent
{
    private Shape shape;
    
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        if(shape!=null )
        {
            Graphics2D g2d = (Graphics2D)g;
            g2d.draw(shape);
        }
    }
 
    public void setShape(Shape shape) {
        this.shape = shape;
    }    
}

Java:
public class Polygon extends JPanel{	
	
private PaintingClass paintingComponent = new PaintingClass();

public Polygon() {
super();	
initialize();	
createPaintComp();
}
	
private void initialize() {
this.setBorder(BorderFactory.createTitledBorder(null, "Mein Testprogramm"));
paintingComponent.setPreferredSize(new Dimension(760,410));
this.add(paintingComponent,BorderLayout.CENTER);
this.setVisible(true);
}

private void createPaintComp() {
...
getMyShapes();
...
}

Java:
public void getMyShapes () {
...
Shape shape1 = new Line2D.Double(120,120,250,250);
paintingComponent.setShape(shape1);

Shape shape2 = new Line2D.Double(150,150,350,350);
paintingComponent.setShape(shape2);
		 
paintingComponent.repaint();		 
}


Hierbei wird allerdings nur die letzte Linie gezeichnet. Wie kann ich das ändern. Ich möchte ja beide Linien sehen. Vielen Dank schonmal.
 
Also eine Möglichkeit wäre folgendes: Überschreibe doch einfach die paintComponent Methode deines JPanels, anstatt dir eine extra Klasse dafür anzulegen. Dann erstellst du dir eine ArrayList und fügst deine Shapes dieser hinzu. Dann kannst du in der paintComponent Methode bequem sowas machen wie:

Java:
for(Shape s:deineArrayList){
    g2d.draw(s);
}

Oder halt die ganze ArrayList übergeben und dann zeichnen. Müsste auch gehen..

edit: Ach das steht ja alles auch in dem anderen Thread. Irgendwie doppelt ???:L
 
Zuletzt bearbeitet:
Joa, eines deiner Probleme ist, dass deine PaintingClass nur einen Shape aufnimmt:
Java:
class PaintingClass extends JComponent
{
    private Shape shape;
Hier müsstest du eine Liste oder etwas ähnliches haben, wie mein Vorredner schon erwähnt hat.
 
Genauso habe ich es jetzt schon gemacht... alle shapes in ne ArrayList gepackt und dann per :

Java:
public void setAllShapes(ArrayList<Shape> shapes) {
    	this.shapes = shapes;
    }

aufgerufen.

Vielen Dank.
 

Neue Themen


Zurück
Oben