Zeichnung in einem Fenster Vergrößern

breaku

Mitglied
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:

Java:
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?
 
G

Gast2

Gast
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
Code:
super.paintComponent(g);
Aufruf.
 

Marco13

Top Contributor
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
Java:
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

Mitglied
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

Top Contributor
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.
 

Neue Themen


Oben