# Abstrakte Graphics Klasse erzeugen



## Marmorkuchen (5. Feb 2007)

Hallo !
Ich habe folgendes Problem: Ich suche eine Möglichkeit Objekte in ein Fenster zu zeichnen, das aber ganz ohne
JPanel, JComponent u.s.w.. theoretisch muss ich nur die Graphics des Fensters dem Objekt im Konstruktor übergeben.

Das ganze ist notwenig um mehrere Rechtecke zu zeichnen. Jedes Rechteck soll als eigenes Objekt angesehen werden. Da alles noch in einem Stack abgelegt wird und die Objekte dazu ihre Position noch manchmal ändern ist es unschön mit Komponenten zu arbeiten (der ganze Kram mit Layout oder setBounds wird in diesem Projekt zu umständlich !).

Ganz einfach wäre eben ein Fenster dass diese Rechtecke erzeugt:


```
// mal ein kleines Beispiel, wie ich mir das ungefähr vorgestellt habe

private Rechteck rechteck1, rechteck2, reckteck3;
private Stack stack;

public Fenster(){
  stack = new Stack();

  // Rechteckobjekte im Stack ablegen
  rechteck1 = new Rechteck(this.getGraphics(),0,50); // Fenstergraphics an Objekt übergeben, X, Y
  stack.push(rechteck1);
  rechteck2 = new Rechteck(this.getGraphics(),50,50);
  stack.push(rechteck2);
  rechteck3 = new Rechteck(this.getGraphics(),100,50);
  stack.push(rechteck3);
}
```

und diese werden dann auch automatisch oder über eine "zeigen" methode dann im fenster
erscheinen.

ich hoffe man hat mich jetzt verstanden  also kurz: es geht darum unabhängige Rechteckobjekte zu zeichnen. Das ganze soll aber ganz ohne Komponenten und rein über Graphics geschehen.

grüße,
Mammo


----------



## Beni (5. Feb 2007)

Graphics-Objekte haben die Eigenschaft, dass sie irgendwann ihre Gültigkeit verlieren. Ein Graphics-Objekt irgendwie speichern, führt mit 99.9% Wahrscheinlichkeit zu einem späteren Fehler...

Du musst ja nicht unbedingt für jedes Rechteck eine Component machen: ein einziges Basis-JPanel reicht. In diesem Panel überschreibst du die "paintComponent"-Methode, und benutzt das Graphics das du dort bekommst, um sämtliche Objekte zu zeichnen (die Rechtecke müssen natürlich eine entsprechende Methode besitzen, die ein Graphics-Argument hat).


```
public class DrawPanel extends JPanel{
  public void paintComponent( Graphics g ){
    super.paintComponent( g );
    
    for( alle Rechtecke "rec" im Stack ){
      rec.draw( g );
    }
  }
}
```


```
public class Rechteck{
  public void draw( Graphics g ){
    ... // was auch immer hier geschehen soll...
  }
}
```


----------



## Marmorkuchen (20. Feb 2007)

Danke das hat mir geholfen !


----------

