JPanels platzieren sich nach dem Vergrössern in der Ursprungsposition

grossli

Grünschnabel
Hab da ein Problem mit JPanels resp. JFrames, dies sieht folgendermassen aus:

Ich habe eine JFrame welches eine JScrollPane beinhaltete, dieses beinhaltet wiederum ein JPanel in welchem viele kleine JPanels platziert sind, diese kleinen JPanels simulieren Displays, deshalb werde ich sie nun Displays nennen. Ich ermögliche es nun anhand eines Mouselisteners jedes einzelne Display zu verschieben.

Soweit funktioniert das auch einwandfrei, mein Problem ist aber sobald man die Grösse des JFrames verändert springen die Displays alle in die Ursprungsposition zurück. Wie könnte ich das verhindern?

die Displays, also die vielen kleinen JPanels füge ich mit dem GridbagLayoutManager ins grosse JPanel, oder anders gesagt das grosse JPanel hat ein GridbagLayoutManager gesetzt!

Liegts am LayoutManager oder könnte man irgendwie das repaint des JFrames beim Vergrössern verhindern ?

Hoffe das ich das Problem einigermassen veständlich geschildert habe und mir jemand helfen kann

Danke...
 
Wie setzt du das ganze denn um? Weist du den Komponenten dann auch im Layout die neuen Positionen richtig wieder zu?
 
Hallo,

es liegt am LayoutManager. Es wird auch nichts bringen, das repaint zu verhindern.
Ich habe was ähnliches verwirklicht, wie du im Anhang siehst. Grob gesagt hab ich versucht die Datei-Ansicht im Windows-Explorer nach zu programmieren. bei mir habe ich das Null-Layout genommen und positioniere alles selbst.

MFG

zEriX
 

Anhänge

  • bild.bmp
    125,2 KB · Aufrufe: 22
Nein, ich verschiebe sie einfach mittels setLocation (siehe Code)

müsste ich die auch im Layoutmanager wieder richtig Positionieren

wenn ja, versuch ich das mal nach dem Mittag und gebe bescheid.

Code:
		MouseListener l = new MouseListener(){

			public void mousePressed(MouseEvent e) {
				System.out.println(e.getPoint().x - displayPanel.getLocation().x);
				System.out.println(e.getPoint().y - displayPanel.getLocation().y);
				tempX = e.getPoint().x - displayPanel.getLocation().x;
				tempY = e.getPoint().y - displayPanel.getLocation().y;
			}
			public void mouseReleased(MouseEvent e) {
				displayPanel.setLocation((e.getPoint().x - (int)tempX),(e.getPoint().y - (int)tempY));	
				
			}
			
		};
 
Wenn du einen LayoutManager nutzt, wird die setLocation ignoriert bei der Positionierung.
 
Hab's jetzt auch mit dem NullLayout erstellt und es klappt einwandfrei!

Danke für die rasche Hilfe euch Beiden
 
Ich habe da noch was übersehen jetzt werden die Scrollleisten des JScrollpane nicht mehr angezeigt, muss ich das noch was ändern das ich jetzt das Nulllayout im JPanel verwende?
 
Das Problem ist, wenn du das NullLayout verwendest, dass die Componente ihre Größe nicht mehr ändert, wenn irgendwas aus dem Bereich rausgeht. Das musste ich auch selbst implementieren. Dazu hab ich den ComponentListener verwendet. Da laufe ich über alle Componenten die im Container drin liegen und passe dann die Größe selbst an.

MFG

zEriX
 
ja habe das probem gleich selber bemerkt aber diese Lösung wäre mir so wahrscheinlich nicht in den Sinn gekommen.

Danke und Sorry bin halt noch " jung im Geschäft"
 
Zuletzt bearbeitet:
Es gibt sicherlich noch andere Lösungen, aber das war die, die mir als erstes eingefallen ist.

MFG

zEriX
 
Zurück