# Zeichnung in einem Fenster Vergrößern



## breaku (2. Jan 2013)

Guten Tag,

ich hab ein Problem bei vergrößern einer Zeichnung in Eclipse. Meine Zeichnung befindet sich in einem kleinen Fenster und wenn ich das Fenster vergrößere möchte ich dass sich die Zeichnung mitvergrößert.
Das ist meine Zeichnung:


```
class ZeichenFlaeche extends JPanel{
		public void paint(Graphics g){
			int [ ] x = {73, 53, 53, 73};
			int [ ] y = {150, 150, 100, 100};
		 	g.setColor(Color.black);
			g.fillPolygon(x, y, 4);
			int [ ] a = {90, 35, 10, 115};
			int [ ] b = {80, 80, 100, 100};
		 	g.setColor(Color.green);
			g.fillPolygon(a, b, 4);
			int [ ] c = {85, 40, 15, 110};
			int [ ] d = {65, 65, 80, 80};
		 	g.setColor(Color.green);
			g.fillPolygon(c, d, 4);
			int [ ] e = {80, 45, 20, 105};
			int [ ] f = {52, 52, 65, 65};
		 	g.setColor(Color.green);
			g.fillPolygon(e, f, 4);
			int [ ] h = {75, 50, 25, 100};
			int [ ] i= {42, 42, 52, 52};
		 	g.setColor(Color.green);
			g.fillPolygon(h, i, 4);
			int [ ] j = {63, 63, 35, 90};
			int [ ] k = {27, 27, 42, 42};
		 	g.setColor(Color.green);
			g.fillPolygon(j, k, 4);
			int [ ] l = {63, 48, 38, 48, 45, 63, 81, 78, 88, 78};
			int [ ] m = {0, 10, 15, 20, 30, 20, 30, 20, 15, 10};
		 	g.setColor(Color.yellow);
			g.fillPolygon(l, m, 10);
		}
	}
```

Soweit ich weiss kann ich mit "getWidth" und "getHeight" arbeiten. Allerdings weiss ich nicht wo ich man diese einfügen muss. 

Meine Frage ist nun: Weiss jemand wie man mit "getWidth" und "getHeight" die Zeichnung samt dem Fenster vergrößern kann?


----------



## Gast2 (2. Jan 2013)

Naja, statt den festen Koordinaten für deine Polygone musst du die Punkte in Abhängigkeit von der Höhe/Breite des JPanels berechnen. Dafür kannst du (wie schon vermutet) die getWidth() und getHeight() Methode nutzen.

PS:
In Swing Komponenten überschreibt man statt der paint() die paintComponent() Methode. Außerdem fehlt bei dir der 
	
	
	
	





```
super.paintComponent(g);
```
 Aufruf.


----------



## breaku (2. Jan 2013)

Ok ich dachte es würde vielleicht ein wenig leichter gehen  ,aber dann werde ich es mal so versuchen.

Danke dir


----------



## Marco13 (2. Jan 2013)

Die Art, wie diese Koordinaten im Moment angegeben sind, ist etwas ... naja, mal sollte sich mal überlegen, ob man nicht einmal in Konstruktor die Koordinaten erstellen oder besser gleich als Path2D erstellen und als Shape speichern kann.

Unabhängig davon: Tatsächlich die Koordinaten skalieren könnte frickelig werden. Man sollte in Erwägung ziehen, einfach das Graphics2D zu skalieren

```
protected void paintComponent(Graphics gr)
{
    super.paintComponent(gr);
    Graphics2D g = (Graphics2D)gr;

    double scaleX = (double)getWidth() / sizeOfPaintedObjectsX;
    double scaleY = (double)getHeight() / sizeOfPaintedObjectsY;
    g.scale(scaleX, scaleY);
    ...
}
```
Beachte aber, dass damit ALLES gezeichnete skaliert wird (d.h. ggf. werden auch die Linien dicker gemalt). Wenn das nicht erwünscht ist, müßte man ein AffineTransform mit der passenden Skalierung erstellen, und dann mit affineTransform.createTransformedShape(shape) die zu zeichnenden Objekte erstellen.


----------



## breaku (2. Jan 2013)

Ich versuch gerade mein bestes alles zu verstehen, aber da ich Student im ersten Semester bin, kenn ich mich noch nicht so gut mit Java aus. Dachte es würde vielleicht etwas leichter gehen. 
Ich mach mich nochmal ein bisschen schlau und versuch deinen Tipp umzusetzten.

Danke vielmals


----------



## Marco13 (2. Jan 2013)

Setz' notfalls in obigem Code mal für scaleX und scaleY einfach 2.0 ein (den Rest der Methode wie du ihn vorher hattest) : Dann wird alles um den Faktor 2 skaliert.


----------

