# JFrame an Fenstergröße anpassen



## Schaaaf (16. Feb 2012)

Hallo,

wenn ich die Größe meines Fensters (z.B. durch maximieren oder ziehen mit der Maus) ändere, dann möchte ich auch, dass mein JFrame mit allen seinen Panels sich an diese Änderung anpasst. Ist das machbar? wenn ja, wie?


----------



## _java_freak_ (16. Feb 2012)

Du kannst mit getHeight() und getWidth() die höhe und breite ermitteln und dann die größe der Panels mit setSize(int, int) anpassen.


----------



## Gast2 (16. Feb 2012)

Das macht ein JFrame doch eh schon?!?!?!?!


----------



## Sky (16. Feb 2012)

Welchen Layout-Manger verwendest Du?


----------



## Schaaaf (16. Feb 2012)

Ich verwende BorderLayout().

Ja, das Frame ist ja das Fenster, aber die Panels darauf passen sich halt nicht an. :-(

getHeight/getWidth : Welche Höhe/Breite bekomme ich damit? Von dem Frame oder von was?


----------



## xehpuk (16. Feb 2012)

Doch, doch. Wenn ein Layout-Manager im Spiel ist, werden sich die Komponenten auch anpassen.

Hier als Beispiel:

```
import java.awt.BorderLayout;
import java.awt.Color;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;

public class LayoutTest {
	public static void main(final String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				final JFrame frame = new JFrame();
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				add(frame, BorderLayout.NORTH);
				add(frame, BorderLayout.SOUTH);
				add(frame, BorderLayout.WEST);
				add(frame, BorderLayout.EAST);
				add(frame, BorderLayout.CENTER);
				frame.pack();
				frame.setLocationRelativeTo(null);
				frame.setVisible(true);
			}
		});
	}
	
	private static void add(final JFrame frame, final String text) {
		frame.add(label(text), text);
	}
	
	private static JLabel label(final String text) {
		final JLabel label = new JLabel(text, SwingConstants.CENTER);
		label.setBorder(BorderFactory.createLineBorder(Color.BLACK));
		return label;
	}
}
```
North und South strecken sich in der Breite, West und East in der Höhe. Center in beide Richtungen.

Am besten zeigst du uns anhand von Code und ggf. Screenshots, was du meinst.



Schaaaf hat gesagt.:


> getHeight/getWidth : Welche Höhe/Breite bekomme ich damit? Von dem Frame oder von was?


Die der Komponente, auf die du die Methoden aufrufst.


----------



## Schaaaf (16. Feb 2012)

So wie im Bild meine ich das mit dem nicht anpassen. Es werden einfach Objekt abgeschnitten, anstat sie kleiner zu machen


----------



## Sky (16. Feb 2012)

Nutzt Du in den einzelnen Panels auch irgendwelche LayoutManager?


----------



## xehpuk (16. Feb 2012)

Sieht wie ein 
	
	
	
	





```
setLayout(null)
```
 auf die einzelnen Komponenten aus, also kein Layout-Manager vorhanden.

Fehlt nur noch der Code.


----------



## bygones (16. Feb 2012)

mhm - was passiert eigentlich wenn ich auf meinem Panel eine Component habe (zb Table), die eine gewisse Groesse braucht, diesen aber nicht in eine ScrollPane packe. 
Kommt es nicht dann auch zu solchen Erscheinungen ?

mal so geraten


----------



## Schaaaf (17. Feb 2012)

Nein, ich mache derzeit : 
	
	
	
	





```
setLayout(null)
```

Ich ändere das mal auf BorderLayout... Mal sehen, ob es dann geht?


----------



## Schaaaf (17. Feb 2012)

So, alles geändert. Aber wenn ich das Fenster zu weit in der Höhe "zusammendrücke" (--> kleinere Höhe) , dann verschwindet auf dem rechten Panel (siehe Skizze) das untere Panel ganz.


----------



## Gast2 (17. Feb 2012)

Schaaaf hat gesagt.:


> Nein, ich mache derzeit :
> 
> 
> 
> ...



Das wirst du müssen, Das JFrame wird durch den vorhandenen LayoutManager zwar die Panels neu layouten. Die Panels werden aber aufgrund des nicht vorhandenen Layouts die in IHNEN angeordneten Komponenten nicht neu layouten. Daher das Problem. 

Generell sollte man null Layout eigentlich meiden wie die ****


----------



## Schaaaf (17. Feb 2012)

Wie gesagt hab jetzt überall Layouts gesetzt, aber dennoch rückt auch z.B. das "Gemalte" eines Panels nicht in dessen MIttelpunkt, sonder bleibt am ursprünglichen Punkt kleben.


----------



## vanny (17. Feb 2012)

Ich hatte auch schon das Problem, dass trotz LayoutManager einige Komponenten einen gewissen Mindestplatz benötigen, der zwar unterhalb der Startgröße des JFrames liegt aber beim nachträglichen Minimieren zu einem unschönen Ergebnis führt.

Ich hab dann einfach beim Initialisieren des JFrames alle Komponenten geadded und dann MeinJFrame.pack(); aufgerufen, danach MeinJFrame.setMinimumSize(MeinJFrame.getSize()); und dann MeinJFrame.setSize(dieStartGroesse);.
Danach dann erst MeinJFrame.setVisible(true);.

Dadurch kannste deinen JFrame dann zwar frei skallieren aber halt nur so weit verkleinern wie´s auch gut aussieht.

Gruß Vanny

[EDIT]Macht natürlich nur Sinn, wenn deine Komponenten eine vernünftige PrefferedSize liefern[/EDIT]


----------



## Schaaaf (17. Feb 2012)

Danke, ich werde es mal probieren.

Was heißt denn "vernünftige PrefferedSize"?


----------



## Schaaaf (17. Feb 2012)

Das ist klappt gut mit dem einschränken der Größe. Danke.


----------

