BoxLayout

Mr.Java

Mitglied
Hallo,

seit ein paar Tagen versuche ich mich in swing einzuarbeiten. Heute habe ich versucht etwas mit einem BoxLayout zu machen:
Java:
import java.awt.*;

import javax.swing.*;


public class Fenster {

	JFrame frame = new JFrame();
	
	public static void main(String[] args) {
		Fenster fenster = new Fenster();

	}

	public Fenster(){
		
		frame.setSize(1000,1000);
		frame.setTitle("Abfrage");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		
		JPanel panel_oben = new JPanel();
		JPanel panel_mitte = new JPanel();
		JPanel panel_unten = new JPanel();
		
		JTextField Textfield = new JTextField();
		Textfield.setSize(900, 400);
		panel_oben.setLayout(new GridLayout());
		panel_oben.add(Textfield);
		
		
		frame.setLayout(new BoxLayout(frame, BoxLayout.Y_AXIS));
		frame.add(panel_oben);
		frame.add(panel_mitte);
		frame.setVisible(true);
	}
	
}

dabei kommt immer folgende Fehlermeldung:

Exception in thread "main" java.awt.AWTError: BoxLayout can't be shared
at javax.swing.BoxLayout.checkContainer(Unknown Source)
at javax.swing.BoxLayout.invalidateLayout(Unknown Source)
at javax.swing.BoxLayout.addLayoutComponent(Unknown Source)
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at javax.swing.JFrame.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at Fenster.<init>(Fenster.java:33)
at Fenster.main(Fenster.java:11)

Was habe ich falsch gemacht?
 
Du kannst das Layout eines JFrame ContentPanes nicht so einfach ändern. Du kannst es aber austauschen: Erstelle ein JPanel mit BoxLayout und setze es als dein neues ContentPane:
Java:
frame.setContentPane(deinPanel);
Dort kannst du dann ganz normal deine anderen Panels adden.
 
Zuletzt bearbeitet:
Habe dies getan(hoffe es ist nun wie du meinst):
Java:
import java.awt.*;

import javax.swing.*;


public class Fenster {

	JFrame frame = new JFrame();
	
	public static void main(String[] args) {
		Fenster fenster = new Fenster();

	}

	public Fenster(){
		
		frame.setSize(1000,1000);
		frame.setTitle("Abfrage");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JPanel hilfe = new JPanel();
		JPanel panel_oben = new JPanel();
		JPanel panel_mitte = new JPanel();
		JPanel panel_unten = new JPanel();
		
		JTextField Textfield = new JTextField();
		Textfield.setSize(900, 400);
		panel_oben.setLayout(new GridLayout());
		panel_oben.add(Textfield);
		
		frame.setContentPane(hilfe);
		hilfe.setLayout(new BoxLayout(frame, BoxLayout.Y_AXIS));
		hilfe.add(panel_oben);
		hilfe.add(panel_mitte);
		hilfe.setVisible(true);
	}
	
}

Aber nun kommt wieder eine Fehlermeldung:

Exception in thread "main" java.awt.AWTError: BoxLayout can't be shared
at javax.swing.BoxLayout.checkContainer(Unknown Source)
at javax.swing.BoxLayout.invalidateLayout(Unknown Source)
at javax.swing.BoxLayout.addLayoutComponent(Unknown Source)
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at Fenster.<init>(Fenster.java:33)
at Fenster.main(Fenster.java:11)
 
Zwei Fehler: erstens musst du dem BoxLayout den Container mitgeben der es beinhalten soll (also nicht frame, sondern hilfe). Zweitens addest du dann deine Komponenten in hilfe. Hilfe ist aber dein neues ContentPane vom Frame, also
frame.add(panel_oben) etc.
 
Danke es hat funktioniert, aber wie kann ich den Layoutmanager dazu zwingen genau das zu machen was ich will. ( Er soll keine Größen etc. verändern)
 
Wenn du eh keine größen verändert haben willst kannst du auch ohne manager arbeiten. Das ist ja gerade das schöne am manager das er die components entsprechend resized das es immer gut aussieht.
 

Neue Themen


Zurück
Oben