Swing Graphic anpassbar/resizeable machen

johannesboy

Mitglied
Guten Abend,

Ich hab folgendes Problem: Ich habe in der paintComponent Methode eine Schleife, welche mir abhängig vom JMenuItem, welches geklickt worden ist, eine gewissen Anzahl an Rechtecken zeichnet. (Mein Programm ist MVC like aufgebaut)
Es werden immer Zufalls x,y - Koordinaten und Farben berechnet.
Nun möchte ich aber, dass wenn ich die Größe vom Fenster verändere, dass sich die Größe bzw. meine Rechtecke der "neuen Größe" des Fensters anpassen. (Farbe sollte gleich bleiben, Koordinaten dementsprechend um den Faktor angepasst)
Doch leider habe ich nach mehreren Stunden herumprobieren noch immer keine Lösung :(
Ich zeig euch mal die paintComponent Methode (sollte ausreichend sein, falls nein, einfach sagen)
Java:
public void paintComponent(Graphics g) {
		super.paintComponent(g);
		for (int i = 0; i < rechteckControl.getAnzahl(); i++) {
			g.setColor(rechteckControl.farben());
			g.fillRect(rechteckControl.xPosition(),
			rechteckControl.yPosition(), 20, 20);
		}
	}
Ich hab da, trotz mehreren Versuchen mit getWidth/Height usw. kein Ergebniss zusammengebracht.
Ich hänge noch ein Bild ein, wo ich das mit einem Smiley gemacht habe. (Nur auf das Smiley achten bitte: Links resized, Rechts original)
bsp09oza6sfm7.png


Vielen Dank im Voraus und ich hoffe auf eine Schnelle Antwort.
Mit freundlichen Grüßen,
johannesboy
 

eMmiE

Bekanntes Mitglied
Wie jetzt?
Rechtecke oder Smiley?

Bei Rechtecken solltest du es relativ einfach haben, weil du einfach eine Double festlegen kannst, die angibt, in welchem Verhältnis die Rechtecke zum Fenster stehen.

Bsp:
Code:
double STATIC = 0.5;

drawRect(x * STATIC,y * STATIC,width * STATIC,height * STATIC);

So bliebe das Rechteck im Verhältnis zum Rahmen immer an der gleichen Position
Du musst aber darauf achten, dass x,y,width und height nicht zu groß werden, sodass deine random-Rechtecke nicht ausserhalb des Bildes erscheinen würden.

Wenn du nohc Fragen hast, einfach reinschreiben

Gruß eMmiE
 

johannesboy

Mitglied
Hey,
Erstmal danke für die Antwort.
Es geht hier um die Rechtecke (Das mit dem Smiley war nur ein Beispiel von mir, wie ich dass mit dem resizen gemeint habe).

Das Problem ist jz aber, dass immer neue Rechtecke erzeugt werden und nicht die Größe von den vorhanden geändert wird.

Die Koordinaten werden in der Model-Class erzeugt:
Java:
/**
	 * @return
	 */
	public int xPosition() {
		return (int) (Math.random() * 400);
	}

	/**
	 * @return
	 */
	public int yPosition() {
		return (int) (Math.random() * 400);
	}

Danke im Voraus,
LG
 

TheSorm

Bekanntes Mitglied
er hat doch die antwort schon gegeben du must die größe der Rechtecke anhand der Fenstergröße deffinieren so dass sie relativ zum fenster immer gelichgroß sind!
 

TheSorm

Bekanntes Mitglied
Ja und du machst einfach alle rechtecke wenn sie neu gezeichnet werden abhängig von der fenster göße verstehst du?
 

johannesboy

Mitglied
Ich glaub ich hab meine Frage nicht klar genug formuliert:
Ich habe eine MenueBar, wo ausgewählt werden kann ob:
1) Rechtecke löschen
2) 1 Rechteck Zeichnen
3) 10 Rechtecke Zeichnen

Nun soll eben nicht neue Zeichnen beim Verändern der Größe, sondern erst nach dem Klick in der MenueBar.
 

eMmiE

Bekanntes Mitglied
Google mal nach einem Window Listener
Da gibt es sicher eine Methode, die aufgerufen wird, wenn die Fenstergröße verändert wird.
Wenn das passiert rufst du einfach nacheinander alle deine Rechtecke auf (dazu brauchst du die natürlich als Objekt) und veränderst deren Größe.

Der andere Weg wäre, die Dinger Runnable zu machen, aber das frisst meiner Meinung nach zu viel CPU

Wenn du die Menu-Bar benutzt, erstellst du einfach neue Rechtecke

Gruß eMmiE
 

Ähnliche Java Themen

Neue Themen


Oben