JFrame an Fenstergröße anpassen

Schaaaf

Bekanntes Mitglied
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?
 
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?
 
Doch, doch. Wenn ein Layout-Manager im Spiel ist, werden sich die Komponenten auch anpassen.

Hier als Beispiel:
Java:
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.

getHeight/getWidth : Welche Höhe/Breite bekomme ich damit? Von dem Frame oder von was?
Die der Komponente, auf die du die Methoden aufrufst.
 
Zuletzt bearbeitet:
Sieht wie ein
Code:
setLayout(null)
auf die einzelnen Komponenten aus, also kein Layout-Manager vorhanden.

Fehlt nur noch der Code. 🙂
 
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
 
Nein, ich mache derzeit :
Java:
setLayout(null)

Ich ändere das mal auf BorderLayout... Mal sehen, ob es dann geht?
 
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.
 
Nein, ich mache derzeit :
Java:
setLayout(null)

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

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 ****
 
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.
 
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]
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Zurück
Oben