Größe von Panel verändern welches auf anderem Panel sitzt

Shumuu

Mitglied
Hi Leute!

Folgendes Problem, ich habe ein tabbedPane und auf diesen Pane befinden sich verschiedene Panels
allerdings kann ich die Panel Größe mit .setSize nicht kontrollieren.
Es läuft darauf hinaus wieviele Zeilen ich dem Panel gebe, auf denen die Panels liegen und er sie dann alle gleich groß macht.

Mit Sicherheit überseh ich etwas ganz elementares und hoffe nun auf eure Hilfe!

Hier mal ein kurzes Test Programm, welches nur einen Ausschnitt des eigentlichen Programmes enthält

Java:
import javax.swing.*;
import java.awt.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTabbedPane;

public class Haupt extends JFrame{
	
	private static final long serialVersionUID = 1L;
	private static final int HEIGHT = 300;
	private static final int WIDTH = 410;	
	private JTabbedPane tabbedPane;			
	
	public Haupt()
	{
		super("Haupt");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
		int x = ((dim.width)+(WIDTH/2))/2;
		int y = ((dim.height)-(HEIGHT/2))/2;
		this.setLocation(x,y);
		
		JButton button1 = new JButton("Button 1");
		JButton button2 = new JButton("Button 2");
		JButton button3 = new JButton("Button 3");
		JButton button4 = new JButton("Button 4");
		JButton button5 = new JButton("Button 5");

				
		JPanel paneP = new JPanel();
		paneP.setLayout(new GridLayout(3,1));
		
		JPanel paneP1 = new JPanel();
		paneP1.setLayout(new GridLayout(1,2));
		
		JPanel paneP2 = new JPanel();
		paneP2.setLayout(new GridLayout(3,3));
		
		
		JPanel paneS = new JPanel();
		paneS.setLayout(new GridLayout(2,1));
		
		JPanel paneS1 = new JPanel();
		paneS1.setLayout(new GridLayout(1,2));
//		paneS1.setSize(WIDTH, 50); geht nicht
		
		JPanel paneS2 = new JPanel();
		paneS2.setLayout(new GridLayout(0,3));
		
		tabbedPane = new JTabbedPane();
		
		tabbedPane.addTab("Schicht", paneS);
		tabbedPane.addTab("Personal", paneP);

				
		add(tabbedPane);

		paneP.add(paneP1, BorderLayout.NORTH);
		paneP.add(paneP2);	
		
		paneS.add(paneS1, BorderLayout.NORTH);
		paneS.add(paneS2);	
		
		paneS1.add(button1);
		paneS1.add(button2);
		paneS2.add(button3);
		paneS2.add(button4);
		paneS2.add(button5);
	}
	
	
	public static void main(String[] args) { 
		Haupt haupt = new Haupt();
		haupt.setSize(WIDTH, HEIGHT);
		haupt.setVisible(true);
		}	
}

Lieben Gruß
 

Shumuu

Mitglied
Also muss ich das FlowLayout benutzen ?
Oder gibt es ein "besseres" ?

P.S. Ich sag ja, ich überseh was ganz elementares :applaus:
 

Marco13

Top Contributor
Sowas wie
Java:
paneP.setLayout(new GridLayout(3,1));
...
paneP.add(paneP1, BorderLayout.NORTH);
kann schonmal nicht funktionieren. Das GridLayout macht alle Components gleich groß, und bei "add" darf dann kein 'BorderLayout.NORTH' übergeben werden.

Aber das BorderLayout.NORTH war vom Ansatz her (!) vielleicht schon nicht falsch: Wenn es darum geht, in ein Panel verschiedene Components zu legen, mit der Option, dass "unten Platz frei gelassen wird", kann man sowas machen wie
Java:
        tabbedPane = new JTabbedPane();
        
        JPanel wrapperS = new JPanel(new BorderLayout());
        wrapperS.add(paneS, BorderLayout.NORTH);

        JPanel wrapperP = new JPanel(new BorderLayout());
        wrapperP.add(paneP, BorderLayout.NORTH);
        
        tabbedPane.addTab("Schicht", wrapperS);
        tabbedPane.addTab("Personal", wrapperP);

Das ist vielleicht etwa das, was du mit dem BorderLayout.NORTH schon machen wolltest. Wie man das "In echt" am günstigsten aufteilt, musst du dir überlegen (dort gibt es ja wahrscheinlich andere Panels, mit sprechenderen Namen als 'paneS1' und so...)
 

Shumuu

Mitglied
Sowas wie
Java:
paneP.setLayout(new GridLayout(3,1));
...
paneP.add(paneP1, BorderLayout.NORTH);
kann schonmal nicht funktionieren. Das GridLayout macht alle Components gleich groß, und bei "add" darf dann kein 'BorderLayout.NORTH' übergeben werden.

Natürlich kann das nicht funktionieren :lol: ist ja auch kein BorderLayout, ich weiß leider auch nicht
was ich mir da gedacht habe, ich hab so viel mit den Layouts rumgespielt um die Größe irgendwie zu ändern das dieser Schnipsel wohl liegen blieb :shock:

Danke für den Hinweis!

Hab nun das panelS Panel, wo die Panels drauf liegen, als FlowLayout gemacht und nun passt es auch :)
 
C

Camino

Gast
Also muss ich das FlowLayout benutzen ?
Oder gibt es ein "besseres" ?

Na ja, es kommt halt immer darauf an, wie du deine Komponenten anordnen möchtest. Da bin ich mir noch nicht ganz sicher, wie du das machen willlst, bzw. was du genau erreichen möchtest. Das FlowLayout fügt halt alle Komponenten nebeneinander hinzu. Wenn die Zeile voll ist, geht es in der nächsten weiter.

Am besten schaust du dir die verschiedenen LayoutManager mal genauer an:
http://www.java-forum.org/bilder-gui-damit-zusammenhaengt/109289-vorstellung-layoutmanager-standard-java-api-externer-layoutmanager.html

Es gibt auch die Möglichkeit, mehrere verschiedene LayoutManager zu verschachteln, wenn du dein gewünschtes Ergebnis mit einem alleine nicht hin bekommst.
 

jgh

Top Contributor
die wenigsten Layout-Wünsche lassen sich mit einer Antwort a´la "Also muss ich das FlowLayout benutzen ? Oder gibt es ein "besseres" ?"

Meist ist es eine Kombination aus verschiedenen LayoutManagern. Wenn du mal erzählst/skizzierst wie sich deine Anwendung beim Vergrößern/Verkleinern verhalten soll...finden wir sicherlich eine anständige Lösung dafür.

Willst du wirklich nur das panelS2 mit einer Größe festlegen, bietet es sich ein Hilfspanel mit FlowLayout an...

[java=44]JPanel paneS1 = new JPanel();
paneS1.setLayout(new GridLayout(1, 2));
paneS1.setPreferredSize(new Dimension(WIDTH, 50));
JPanel hilfsPanelS1 = new JPanel();
hilfsPanelS1.add(paneS1);

JPanel paneS2 = new JPanel();
paneS2.setLayout(new GridLayout(0, 3));

tabbedPane = new JTabbedPane();

tabbedPane.addTab("Schicht", paneS);
tabbedPane.addTab("Personal", paneP);

add(tabbedPane);

paneP.add(paneP1, BorderLayout.NORTH);
paneP.add(paneP2);

paneS.add(hilfsPanelS1, BorderLayout.NORTH);
paneS.add(paneS2);
[/code]

Solche Konstrukte
[java=19] Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
int x = ((dim.width)+(WIDTH/2))/2;
int y = ((dim.height)-(HEIGHT/2))/2;
this.setLocation(x,y);[/code]

lassen sich -sofern es sich um die Zentrierung des Frames handeln soll- mit folgenden Code einfacher handeln...btw. ansonsten fehlt noch die Differenz der Fenstergröße, damit das Frame mittig angezeigt wird.
Java:
	public static void main(String[] args) {
		Haupt haupt = new Haupt();
		haupt.setSize(WIDTH, HEIGHT);
		haupt.setLocationRelativeTo(null);
		haupt.setVisible(true);
	}
 

Shumuu

Mitglied
Na ja, es kommt halt immer darauf an, wie du deine Komponenten anordnen möchtest. Da bin ich mir noch nicht ganz sicher, wie du das machen willlst, bzw. was du genau erreichen möchtest. Das FlowLayout fügt halt alle Komponenten nebeneinander hinzu. Wenn die Zeile voll ist, geht es in der nächsten weiter.

Am besten schaust du dir die verschiedenen LayoutManager mal genauer an:
http://www.java-forum.org/bilder-gui-damit-zusammenhaengt/109289-vorstellung-layoutmanager-standard-java-api-externer-layoutmanager.html

Es gibt auch die Möglichkeit, mehrere verschiedene LayoutManager zu verschachteln, wenn du dein gewünschtes Ergebnis mit einem alleine nicht hin bekommst.

Mir ging es ja nur darum das die Panels alle gleich groß waren obwohl auf dem einen vielleicht nur ein Objekt war und auf dem anderen 10!

Das kann ich ja nun durch das FlowLayout regeln.
Das GridLayout, wie schon gesagt wurde, macht alle OBJEKTE gleich groß, die auf dem Panel liegen, mir ging es ja nur um die Panel Größe ;)


Solche Konstrukte
[java=19] Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
int x = ((dim.width)+(WIDTH/2))/2;
int y = ((dim.height)-(HEIGHT/2))/2;
this.setLocation(x,y);[/code]

lassen sich -sofern es sich um die Zentrierung des Frames handeln soll- mit folgenden Code einfacher handeln...btw. ansonsten fehlt noch die Differenz der Fenstergröße, damit das Frame mittig angezeigt wird.
Java:
	public static void main(String[] args) {
		Haupt haupt = new Haupt();
		haupt.setSize(WIDTH, HEIGHT);
		haupt.setLocationRelativeTo(null);
		haupt.setVisible(true);
	}

Danke! Nach sowas hab ich schon gesucht, hab mich damit aber nicht wirklich beschäftigt.
 
Zuletzt bearbeitet:
C

Camino

Gast
Um Komponenten nebeneinander oder untereinander anzuordnen gibt es auch noch das BoxLayout. Musst du einfach mal ein bisschen rumprobieren, welches am besten passt. Vor allem auch mal das Fenster (Frame) grösser und kleiner ziehen und schauen,was passiert.

Und noch zur Info: manche Komponenten haben einen Standard-LayoutManager, den du nicht explizit zuweisen musst. JPanel z.B. das FlowLayout und JFrame das BorderLayout.
 

Shumuu

Mitglied
Um Komponenten nebeneinander oder untereinander anzuordnen gibt es auch noch das BoxLayout. Musst du einfach mal ein bisschen rumprobieren, welches am besten passt. Vor allem auch mal das Fenster (Frame) grösser und kleiner ziehen und schauen,was passiert.

Und noch zur Info: manche Komponenten haben einen Standard-LayoutManager, den du nicht explizit zuweisen musst. JPanel z.B. das FlowLayout und JFrame das BorderLayout.

Gut zu wissen ! Dann kann ich mir folgende Zeile sparen
Java:
paneP.setLayout(new FlowLayout());
 
C

Camino

Gast
Gut zu wissen ! Dann kann ich mir folgende Zeile sparen
Java:
paneP.setLayout(new FlowLayout());

Ja, ausser du möchtest das FlowLayout anders ausrichten, dann könntest du das noch dem FlowLayout im Konstruktor mitteilen. Vom Standard her ist das FlowLayout zentriert ausgerichtet, d.h. die hinzugefügten Komponenten liegen alle zentriert im Panel.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Swing Größe von JLabels verändern sich in einem Panel unterschiedlich AWT, Swing, JavaFX & SWT 6
B AWT Panel größe im BorderLayout einstellen AWT, Swing, JavaFX & SWT 1
I Panel scheint keine Größe zu haben AWT, Swing, JavaFX & SWT 3
D Swing [Erledigt]Panel mit ScrollBar , anpassbare Größe AWT, Swing, JavaFX & SWT 15
M ein Panel mit konst Größe das andere Variabel AWT, Swing, JavaFX & SWT 2
D BorderLayout.Center mit 3 Panel und dynamischer Größe AWT, Swing, JavaFX & SWT 2
vogella Panel mit konstanter Größe in JTabbedPane AWT, Swing, JavaFX & SWT 6
P JTextField wird nur sehr klein angezeigt und verändert die Größe nicht AWT, Swing, JavaFX & SWT 3
H JDialog in Größe ändern - Resize-Cursor bleibt betreten der Komponente AWT, Swing, JavaFX & SWT 1
H AWT Dialog Größe ändern - Schwarzer Inhalt beim groß ziehen AWT, Swing, JavaFX & SWT 1
Yonnig JavaFX Größe von WebView an Content anpassen AWT, Swing, JavaFX & SWT 3
J Swing Komponente wird unpassend angepasst in der Größe AWT, Swing, JavaFX & SWT 35
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
D JavaFX Größe des Bild an ImageView anpassen AWT, Swing, JavaFX & SWT 3
B Dynamische ListView-Größe, die bei Fenstergrößenänderung sich anpasst AWT, Swing, JavaFX & SWT 19
R Swing JTextField - Schriftgröße je nach Länge und Größe ändern AWT, Swing, JavaFX & SWT 0
B veränderte Größe eines Panels im Vorhinein wissen? AWT, Swing, JavaFX & SWT 1
B Größe der Parent-Component dynamisch an children anpassen AWT, Swing, JavaFX & SWT 30
L JavaFX AnchorPane an die Größe der Scene oder Window binden? AWT, Swing, JavaFX & SWT 3
K JavaFX Component Größe an Inhalt anpassen AWT, Swing, JavaFX & SWT 11
S Java GUI durch variable Größe einer Map anpassen AWT, Swing, JavaFX & SWT 3
R Größe von Scene und stage an grid anpassen AWT, Swing, JavaFX & SWT 4
M Java FX größe der shapes anpassen AWT, Swing, JavaFX & SWT 0
L Swing JPanel Größe anpassen AWT, Swing, JavaFX & SWT 6
E Wie kann ich ein JLabel auf größe der schriftlänge setzten? AWT, Swing, JavaFX & SWT 2
C Swing JFrame ändert Größe AWT, Swing, JavaFX & SWT 0
G Swing JButton ändert (unerwünscht) Größe bei Ausführung AWT, Swing, JavaFX & SWT 4
L Swing Größe automatisch anpassen AWT, Swing, JavaFX & SWT 14
J Swing Pane im SplitPane automatische Größe aktivieren AWT, Swing, JavaFX & SWT 0
DaCrazyJavaExpert Swing Größe des JPanel ändern/wird nicht geändert. AWT, Swing, JavaFX & SWT 3
M Swing Mehrere Textfelder mit ScrollBars - Größe der Felder AWT, Swing, JavaFX & SWT 0
L JavaFX ListView Größe anpassen AWT, Swing, JavaFX & SWT 1
Neumi5694 Größe von Komboboxen neu berechnen AWT, Swing, JavaFX & SWT 3
L JavaFX List oder TableView Größe dynamisch anpassen? AWT, Swing, JavaFX & SWT 4
P Größe und Ausrichtung von Komponenten festlegen AWT, Swing, JavaFX & SWT 13
I CSS - backgroundImage - Größe automatisch an den Container anpassen AWT, Swing, JavaFX & SWT 1
C Größe des Mauszeigers ermitteln AWT, Swing, JavaFX & SWT 5
MaxG. JFrame Größe ändern AWT, Swing, JavaFX & SWT 16
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
K GridBagLayout verändert die größe? AWT, Swing, JavaFX & SWT 1
D Swing Größe einer JComboBox im GridBagLayout aufgrund der maximalen Länge der enthaltenen Daten AWT, Swing, JavaFX & SWT 7
D JavaFX Alle Knöpfe auf die gleiche Größe AWT, Swing, JavaFX & SWT 14
G JFrame - manuell Größe verändern AWT, Swing, JavaFX & SWT 6
M LayoutManager GridBagLayout passt seine größe nicht an AWT, Swing, JavaFX & SWT 3
F Gui weicht von Designpreview ab (kein fensterrahmen, andere größe) AWT, Swing, JavaFX & SWT 13
A JPanel größe verändern AWT, Swing, JavaFX & SWT 4
M SWT ScrollPane Größe zu klein AWT, Swing, JavaFX & SWT 6
T Swing Größe einer Komponente in einem BoxLayout / FlowLayout festlegen AWT, Swing, JavaFX & SWT 7
H JTree in JScrollPane passt sich nicht an Größe von JPanel an AWT, Swing, JavaFX & SWT 2
L JButton - Größe anders als erwartet AWT, Swing, JavaFX & SWT 2
L JDialog - Event wenn Parent größe ändert AWT, Swing, JavaFX & SWT 2
W GridBagLayout Größe geben AWT, Swing, JavaFX & SWT 1
S Swing JFrame hat nicht die Größe, die ich eingegeben habe AWT, Swing, JavaFX & SWT 3
S Größe der Komponenten, beim ändern der größe des Frames, mit ändern! AWT, Swing, JavaFX & SWT 2
S Größe und Farbe vom JButton festlegen AWT, Swing, JavaFX & SWT 2
D Swing Jlist Größe während der Laufzeit verändern. AWT, Swing, JavaFX & SWT 11
H AWT Fenster- und JLabel-Größe automatisch anpassen AWT, Swing, JavaFX & SWT 2
T Swing Größe des Randes AWT, Swing, JavaFX & SWT 2
C LayoutManager JFrame größe und ausrichtung + Position von Fensterelementen AWT, Swing, JavaFX & SWT 2
B Swing JTable mit Daten - Reihen-Größe anpassen AWT, Swing, JavaFX & SWT 0
D SWT Window passt Größe nicht an AWT, Swing, JavaFX & SWT 4
N JPanel größe wissen/festlegen vor dem Anzeigen AWT, Swing, JavaFX & SWT 3
U Größe eines Button im Menü ändern AWT, Swing, JavaFX & SWT 1
G JavaFX Größe der Parentknoten AWT, Swing, JavaFX & SWT 5
R JPanel-Größe verändert sich nicht. Warum? AWT, Swing, JavaFX & SWT 5
T Swing Aktuelle Größe eines Textes in einem Label darstellen AWT, Swing, JavaFX & SWT 3
A JPanel oder GridLayout Größe festsetzten AWT, Swing, JavaFX & SWT 4
F Swing JComboBox - Frage zur Größe AWT, Swing, JavaFX & SWT 11
X Swing Größe eines Fensters JFrame / Frame AWT, Swing, JavaFX & SWT 5
SimonRap Swing JFrame Größe zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
G 2D-Grafik Größe der JFrame Decorations herausfinden? AWT, Swing, JavaFX & SWT 4
O Swing Jpanel autom. auf JFrame Größe bringen AWT, Swing, JavaFX & SWT 6
M Swing JLabel mit fester größe nachträglich formatieren AWT, Swing, JavaFX & SWT 2
A JComponent Größe AWT, Swing, JavaFX & SWT 8
B JTextArea Größe an Container anpassen AWT, Swing, JavaFX & SWT 2
S Swing TextPane größe beschränken AWT, Swing, JavaFX & SWT 2
R Ellipse2D ändert Größe AWT, Swing, JavaFX & SWT 3
H Swing JButton größe ändern AWT, Swing, JavaFX & SWT 5
G JScrollPane reagiert nicht auf Änderung der JPanel-Größe AWT, Swing, JavaFX & SWT 4
P JPanel Größe ändern AWT, Swing, JavaFX & SWT 22
I Größe eines rotierten Images AWT, Swing, JavaFX & SWT 3
C Button Größe einstellen klappt nicht (setBounds) AWT, Swing, JavaFX & SWT 8
S 2D-Grafik Canvas Problem(Größe) AWT, Swing, JavaFX & SWT 6
R Größe/Anordnung der Gui-Elemente automatisch? AWT, Swing, JavaFX & SWT 6
S Die größe eines JButton ändern AWT, Swing, JavaFX & SWT 7
U feste Größe für den Zeichenbereich eines JFrames AWT, Swing, JavaFX & SWT 4
L Graphics.drawImage() - Output-Größe entspricht nicht Parametern AWT, Swing, JavaFX & SWT 10
P Tatsächliche Größe für Applet AWT, Swing, JavaFX & SWT 3
C Swing GridBag-Probleme (Größe und Ausrichtung) AWT, Swing, JavaFX & SWT 3
K JFrame Größe ändern AWT, Swing, JavaFX & SWT 4
M jTable - Größe beim Erzeugen AWT, Swing, JavaFX & SWT 4
hdi Swing JFrame Größe ermitteln AWT, Swing, JavaFX & SWT 6
S Swing jFrame auf maximale Größe setzten AWT, Swing, JavaFX & SWT 7
Z größe der komponenten bestimmen AWT, Swing, JavaFX & SWT 16
X Alte Frame-Größe beim wiederholten Aufruf AWT, Swing, JavaFX & SWT 5
I Größe von JPanel ändern AWT, Swing, JavaFX & SWT 6
S SWT Shell durch Event in der Größe verändern AWT, Swing, JavaFX & SWT 7
T Die Größe einer JTextArea an Ihren Parent JPanel anpassen. AWT, Swing, JavaFX & SWT 5
L JFrame größe in einem ActionEvent ändern AWT, Swing, JavaFX & SWT 4
G LayoutManager BorderLayout WEST Bereich auf maximale Größe beschränken AWT, Swing, JavaFX & SWT 19

Ähnliche Java Themen

Neue Themen


Oben