GridBagLayout - Komponenten werden nicht angezeigt

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Ich versuche mich zum ersten Mal am GridBagLayout und bisher hat auch alles gut geklappt. Drei Komponenten konnte ich einfügen, der Rest soll angezeigt werden, je nach dem was im DropDown ausgewählt wird. Leider wird aber gar nichts angezeigt.... Warum?

Das ist meine Methode zum setzen der Eigenschaften des GridBags:

Code:
	private void buildConstraints(GridBagConstraints gbc,int x, int y, int w, int h, double wx, double wy, int fill, int anchor){
		 gbc.insets = new Insets(5, 5, 5, 5);
		 gbc.gridx = x; // start cell in a row
		 gbc.gridy = y; // start cell in a column
		 gbc.gridwidth = w; // how many column does the control occupy in the row
		 gbc.gridheight = h; // how many column does the control occupy in the column
		 gbc.weightx = wx; // relative horizontal size
		 gbc.weighty = wy; // relative vertical size
		 gbc.fill = fill; // the way how the control fills cells
		 gbc.anchor = anchor; // alignment
    }

Und hier der Code, bei dem wohl irgendetwas nicht stimmen kann:

Code:
	void addComponents(){
		   question = new JLabel("Möchten Sie ein zufälliges Kreuzworträtsel erstellen "+
		   						 "oder Wörter aus einer Liste auswählen?");
		   question.setForeground(Color.LIGHT_GRAY);
		   buildConstraints(gbc, 0, 0, 4, 1, 0, 1.0, GridBagConstraints.NONE, GridBagConstraints.CENTER);
		   gbc.insets = new Insets(20,30,5,5);
		   gbl.setConstraints(question, gbc);
		   getContentPane().add(question);
   
		   selectGenType = new JComboBox();
		   selectGenType.addItem("Auswahl aus Liste");
		   selectGenType.addItem("Zufall");
		   selectGenType.setBackground(Color.WHITE);
		   buildConstraints(gbc, 0, 1, 2, 1, 0.5, 1.0, GridBagConstraints.NONE, GridBagConstraints.EAST);
		   gbl.setConstraints(selectGenType, gbc);
		   getContentPane().add(selectGenType);
		   
		   go = new JButton("GO");
		   go.setBackground(Color.WHITE);   
		   buildConstraints(gbc, 2, 1, 2, 1, 0.5, 0, GridBagConstraints.NONE, GridBagConstraints.WEST);
		   gbl.setConstraints(go, gbc);
		   go.addActionListener(this);
		   getContentPane().add(go); 

		   pack();
	}

	
	public void actionPerformed (ActionEvent e){
		String s = e.getActionCommand();
		if (s.equals("GO")){
			if(selectGenType.getSelectedItem().equals("Auswahl aus Liste")) {
				   getContentPane().removeAll();
				   getContentPane().add(question);
				   getContentPane().add(selectGenType);
				   getContentPane().add(go);

				   open = new JLabel("Datei öffnen:");
				   open.setForeground(Color.LIGHT_GRAY);
				   buildConstraints(gbc, 0, 2, 1, 1, 0, 1.0, GridBagConstraints.NONE, GridBagConstraints.EAST);
				   gbl.setConstraints(open, gbc);
				   getContentPane().add(open);

			
				   openTextField = new JTextField("");
				   openTextField.setBackground(Color.WHITE);
				   buildConstraints(gbc, 1, 2, 1, 1, 0, 0, GridBagConstraints.NONE, GridBagConstraints.WEST);
				   gbl.setConstraints(openTextField, gbc);
				   getContentPane().add(openTextField);

usw., es werden noch weitere Elemente eingefügt...

                                   pack();
                      }
             }

Mit pack() wird ausser den Komponenten, die zu Beginn dort stehen nichts angezeigt und das Fenster verkleinert sich auf die Grösse der Titelleiste.
Bei anderen Funktionen wie
repaint();
getContentPane().doLayout();
getContentPane().validate();
update(getGraphics());
bleibt das Fenster in der richtigen Grösse, die Anzeige erscheint jedoch auch nicht.

Ich weiss einfach nicht, was ich falsch mache und wäre dankbar, wenn mir jemand einen Tipp geben könnte.
 
S

SlaterB

Gast
hast du irgendwo
getContentPane().setLayout(new GridBagLayout());
?
 
G

Gast

Gast
ja hier:

Code:
	private JPanel getJContentPane(){
		if(jContentPane == null){
			jContentPane = new JPanel();			
			jContentPane.setBackground(Color.BLACK);
			jContentPane.setSize(500,300);
			gbl = new GridBagLayout();
			jContentPane.setLayout(gbl);  // GridBag-Layout
			gbc = new GridBagConstraints();
			jContentPane.setVisible(true);
		}
		return jContentPane;
	}

	private void initialize(){
		this.setContentPane(getJContentPane());
		this.setLocationRelativeTo(null);    //Fenster auf Bildschirm zentrieren
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

Und die ersten 3 Komponenten werden ja auch angezeigt. Nur der rest eben nicht, daher bin ich auch so ratlos...
 
S

SlaterB

Gast
du musst immer
add(componente, gbc);
verwenden mit korrekten Werten für gbc, am besten jedes mal ein neues GridBagConstraints-Objekt
 
G

Gast

Gast
Vielen Dank für deine Hilfe, aber das funktioniert auch nicht.

Also in meiner Funktion addComponents(), die im Konstruktor der Klasse aufgerufen wird, erzeuge ich 3 GUI-Komponenten mit Hilfe des Gridbag-Layouts die auch angezeigt werden.
Eines davon ist ein Drop Down (JComboBox) und eins ein JButton. Am Button wird ein ActionListener registriert und je nach Auswahl der JComboBox sollen noch weitere GUI Komponenten im Fenster angezeigt werden.
Genau diese Komponenten habe ich nun aus der actionPerformed-Methode rausgeholt und zum Test in die addComponents verschoben und dort funktioniert alles!!
Es muss also irgend etwas mit der actionPerformed zu tun haben oder? Allerdings steht ganz zu Beginn der actionPerformed-Methode folgendes:
getContentPane().removeAll();
getContentPane().add(question);
getContentPane().add(selectGenType);
getContentPane().add(go);
Ich lösche die gesamte Anzeige und füge die 3 Komponenten, die in der addComponents()-Methode erzeugt wurden, erneut hinzu. Und genau diese vier Zeilen werden auch ausgeführt (habe es mit auskommentieren getestet).
Nur der Rest wird ignoriert (oder was auch immer).

Kann es etwas mit dem ActionListener zu tun haben? Oder dem Aufruf der Methoden? Oder sollte ich nicht mit der ContentPane arbeiten? Ich bin relativ neu in der Programmierung und habe leider keine Ahnung was ich falsch mache...
 
S

SlaterB

Gast
Code:
public class TestGUI extends JFrame implements ActionListener {

	private JPanel jContentPane;
	private GridBagLayout gbl;
	private GridBagConstraints gbc;
	JComboBox selectGenType;
	JButton go;
	JLabel open;
	JLabel question;
	JTextField openTextField;

	public TestGUI() {

		initialize();
		addComponents();
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(600, 400);
		setVisible(true);
	}

	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setBackground(Color.BLACK);
			jContentPane.setSize(500, 300);
			gbl = new GridBagLayout();
			jContentPane.setLayout(gbl); // GridBag-Layout
			gbc = new GridBagConstraints();
			jContentPane.setVisible(true);
		}
		return jContentPane;
	}

	private void initialize() {
		this.setContentPane(getJContentPane());
		// this.setLocationRelativeTo(null); // Fenster auf Bildschirm
		// zentrieren
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	private void buildConstraints(GridBagConstraints gbc, int x, int y, int w,
			int h, double wx, double wy, int fill, int anchor) {
		gbc.insets = new Insets(5, 5, 5, 5);
		gbc.gridx = x; // start cell in a row
		gbc.gridy = y; // start cell in a column
		gbc.gridwidth = w; // how many column does the control occupy in the row
		gbc.gridheight = h; // how many column does the control occupy in the
		// column
		gbc.weightx = wx; // relative horizontal size
		gbc.weighty = wy; // relative vertical size
		gbc.fill = fill; // the way how the control fills cells
		gbc.anchor = anchor; // alignment
	}

	void addComponents() {
		question = new JLabel(
				"Möchten Sie ein zufälliges Kreuzworträtsel erstellen "
						+ "oder Wörter aus einer Liste auswählen?");
		question.setForeground(Color.LIGHT_GRAY);
		buildConstraints(gbc, 0, 0, 4, 1, 0, 1.0, GridBagConstraints.NONE,
				GridBagConstraints.CENTER);
		gbc.insets = new Insets(20, 30, 5, 5);
		gbl.setConstraints(question, gbc);
		getContentPane().add(question);

		selectGenType = new JComboBox();
		selectGenType.addItem("Auswahl aus Liste");
		selectGenType.addItem("Zufall");
		selectGenType.setBackground(Color.WHITE);
		buildConstraints(gbc, 0, 1, 2, 1, 0.5, 1.0, GridBagConstraints.NONE,
				GridBagConstraints.EAST);
		gbl.setConstraints(selectGenType, gbc);
		getContentPane().add(selectGenType);

		go = new JButton("GO");
		go.setBackground(Color.WHITE);
		buildConstraints(gbc, 2, 1, 2, 1, 0.5, 0, GridBagConstraints.NONE,
				GridBagConstraints.WEST);
		gbl.setConstraints(go, gbc);
		go.addActionListener(this);
		getContentPane().add(go);

		// pack();
	}

	public void actionPerformed(ActionEvent e) {
		String s = e.getActionCommand();
		if (s.equals("GO")) {
			if (selectGenType.getSelectedItem().equals("Auswahl aus Liste")) {
				System.out.println("x");
				getContentPane().removeAll();
				getContentPane().add(question);
				getContentPane().add(selectGenType);
				getContentPane().add(go);

				open = new JLabel("Datei öffnen:");
				open.setForeground(Color.LIGHT_GRAY);
				buildConstraints(gbc, 0, 2, 1, 1, 0, 1.0,
						GridBagConstraints.NONE, GridBagConstraints.EAST);
				gbl.setConstraints(open, gbc);
				getContentPane().add(open);

				openTextField = new JTextField("");
				openTextField.setBackground(Color.WHITE);
				buildConstraints(gbc, 1, 2, 1, 1, 0, 0,
						GridBagConstraints.NONE, GridBagConstraints.WEST);
				gbl.setConstraints(openTextField, gbc);
				getContentPane().add(openTextField);

				getContentPane().validate();
				// pack();
			}
		}
	}

	public static void main(String[] args) {
		new TestGUI();
	}

}
hier passiert was, wenn man auf den Button klickt
 
G

Gast

Gast
Ich hatte wohl irgend etwas in meinen Eclipse-Einstellungen falsch. Jetzt passiert zumindest schon mal was, leider sieht es, wahrscheinlich dank dem Gridbag-Layout, überhaupt nicht so aus wie ich es mir vorgestellt habe ;-)
Trotzdem vielen Dank, jetzt kann ich wenigstens weiter arbeiten.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
DaCrazyJavaExpert Swing Komponenten in GridBagLayout werden Falsch angeordnet AWT, Swing, JavaFX & SWT 1
Asamandra LayoutManager GridBagLayout - Komponenten (mit fill?) vergrößern aber Proportionen dabei erhalten? AWT, Swing, JavaFX & SWT 3
C LayoutManager GridBagLayout Komponenten austauschen AWT, Swing, JavaFX & SWT 5
R GridBagLayout: anchor ungewollt für mehrere Komponenten AWT, Swing, JavaFX & SWT 2
J Dynamisches füllen von GridBagLayout: Größe der Komponenten AWT, Swing, JavaFX & SWT 4
P GridbagLayout: Komponenten anordnen mit Freiraum AWT, Swing, JavaFX & SWT 6
F GridBagLayout - Komponenten verschieben sich :( AWT, Swing, JavaFX & SWT 3
S GridBagLayout Felder formatieren AWT, Swing, JavaFX & SWT 1
S GridBagLayout - Probleme mit Bilderanzeige AWT, Swing, JavaFX & SWT 3
C GridbagLayout verstehen lernen AWT, Swing, JavaFX & SWT 1
H GridBagLayout macht mich wahnsinnig :-( AWT, Swing, JavaFX & SWT 5
BabySuna darstellungsprobleme mit JTabbedPane und GridBagLayout AWT, Swing, JavaFX & SWT 8
CptK Positionieren von Elementen in GridBagLayout AWT, Swing, JavaFX & SWT 4
A Probleme mit gridheight (GridBagLayout) AWT, Swing, JavaFX & SWT 6
Mario1409 AWT GridBagLayout AWT, Swing, JavaFX & SWT 5
J LayoutManager GridBagLayout, probleme mit Anordnung von Objekten AWT, Swing, JavaFX & SWT 6
T LayoutManager Anordnen der Elemente im GridBagLayout AWT, Swing, JavaFX & SWT 11
K GridBagLayout mit reponsive Design 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
B LayoutManager GridBagLayout und JScrollPane AWT, Swing, JavaFX & SWT 5
T GridBagLayout Anfängerprobleme AWT, Swing, JavaFX & SWT 3
Sin137 LayoutManager GridBagLayout Probleme AWT, Swing, JavaFX & SWT 6
L GridBagLayout Anordnung AWT, Swing, JavaFX & SWT 3
M Gridbaglayout Spaltenbreite AWT, Swing, JavaFX & SWT 3
M LayoutManager GridBagLayout passt seine größe nicht an AWT, Swing, JavaFX & SWT 3
V GridBagLayout AWT, Swing, JavaFX & SWT 4
N LayoutManager GridBagLayout - Grundlagen AWT, Swing, JavaFX & SWT 6
Neumi5694 Swing Gridbaglayout - automatische Anpassung verhindern AWT, Swing, JavaFX & SWT 1
P AWT Problem mit Platzierung (GridBagLayout) AWT, Swing, JavaFX & SWT 2
F Breite beim GridBagLayout festlegen AWT, Swing, JavaFX & SWT 2
M Swing GridBagLayout Komponentengröße festsetzen AWT, Swing, JavaFX & SWT 1
J GridBagLayout mit Hilfe einer For-Schleife befüllen AWT, Swing, JavaFX & SWT 1
W GridBagLayout Größe geben AWT, Swing, JavaFX & SWT 1
HarleyDavidson Swing Seltsames Verhalten GridBagLayout AWT, Swing, JavaFX & SWT 11
W GridBagLayout mit fester Zellgrösse AWT, Swing, JavaFX & SWT 2
N Swing GridBagLayout: Ein Pixel Versatz AWT, Swing, JavaFX & SWT 2
B Swing Gridbaglayout unterschiedliche Zeilenhöhe AWT, Swing, JavaFX & SWT 6
H LayoutManager GridBagLayout AWT, Swing, JavaFX & SWT 1
N GridBagLayout - was fehlt? AWT, Swing, JavaFX & SWT 8
S Swing rowHeight und rowWeight im GridBagLayout AWT, Swing, JavaFX & SWT 1
N Swing GUI mit GridBagLayout AWT, Swing, JavaFX & SWT 4
A jpanel mit gridbaglayout auf hintergrundbild AWT, Swing, JavaFX & SWT 7
S GridBagLayout-Frage AWT, Swing, JavaFX & SWT 1
G GridBagLayout AWT, Swing, JavaFX & SWT 6
S GridBagLayout "links-rechts-layouten" AWT, Swing, JavaFX & SWT 7
T LayoutManager GridBagLayout / erwartetes Raster fehlt AWT, Swing, JavaFX & SWT 3
X Gridbaglayout gridx + gridy auslesen? AWT, Swing, JavaFX & SWT 7
H GridBagLayout macht Probleme... AWT, Swing, JavaFX & SWT 4
N GridBagLayout - Zeitplan AWT, Swing, JavaFX & SWT 13
N Swing GridbagLayout AWT, Swing, JavaFX & SWT 4
S Swing gridbaglayout AWT, Swing, JavaFX & SWT 8
G GridBagLayout Problem AWT, Swing, JavaFX & SWT 4
Java-Insel LayoutManager Ein GridBagLayout-Objekt für mehrere Panels? AWT, Swing, JavaFX & SWT 2
X LayoutManager gridBagLayout wird nicht richtig Dargestellt AWT, Swing, JavaFX & SWT 5
das-mo Probleme mit GridBagLayout AWT, Swing, JavaFX & SWT 6
T LayoutManager GridBagLayout - zwei jTable mit unterschiedlicher Höhe AWT, Swing, JavaFX & SWT 2
N LayoutManager GridBagLayout schummeln erlaubt ? AWT, Swing, JavaFX & SWT 2
D GridBagLayout AWT, Swing, JavaFX & SWT 9
A Swing GridBagLayout - constraints.anchor scheint nicht korrekt zu funktionieren? AWT, Swing, JavaFX & SWT 7
J Swing Terminkalender Wochenansicht mit Gridbaglayout oder JTable AWT, Swing, JavaFX & SWT 16
C LayoutManager GridBagLayout - Anfängerfrage AWT, Swing, JavaFX & SWT 5
R GridBagLayout in GridBagLayout AWT, Swing, JavaFX & SWT 2
H Positionierungsprobleme beim GridBagLayout AWT, Swing, JavaFX & SWT 16
Furtano AWT GridBagLayout macht mir Sorgen AWT, Swing, JavaFX & SWT 3
A GridbagLayout positionierungsproblem AWT, Swing, JavaFX & SWT 4
earlgrey_tea GridBagLayout Componenten proportional vergößern AWT, Swing, JavaFX & SWT 12
D JTable im GridBagLayout -> gridwidth AWT, Swing, JavaFX & SWT 6
T GridBagLayout Problem AWT, Swing, JavaFX & SWT 3
D Probleme mit GridBagLayout AWT, Swing, JavaFX & SWT 8
J Swing GridBagLayout: Links-nach-rechts Orientierung statt zentriert AWT, Swing, JavaFX & SWT 12
R Größe eines Labels bei GridBagLayout festlegen AWT, Swing, JavaFX & SWT 9
B GridBagLayout Problem AWT, Swing, JavaFX & SWT 3
M LayoutManager GridBagLayout AWT, Swing, JavaFX & SWT 11
E LayoutManager GridBagLayout in BorderLayout - Abstand bei Resizing AWT, Swing, JavaFX & SWT 2
Y LayoutManager Keine vollständige Darstellung der Tabelle mit GridBagLayout AWT, Swing, JavaFX & SWT 3
L LayoutManager GridBagLayout leere Zeilen AWT, Swing, JavaFX & SWT 4
H LayoutManager Layout mit GridBagLayout machbar? AWT, Swing, JavaFX & SWT 6
N GridBagLayout Problem AWT, Swing, JavaFX & SWT 6
C Swing JTable "zerstört" GridBagLayout AWT, Swing, JavaFX & SWT 9
N LayoutManager GridBagLayout Größe fixieren AWT, Swing, JavaFX & SWT 3
M GridBagLayout AWT, Swing, JavaFX & SWT 7
V Swing Gridbaglayout Leeres Fenster AWT, Swing, JavaFX & SWT 2
R LayoutManager GridBagLayout Fragen AWT, Swing, JavaFX & SWT 10
P LayoutManager Verständnis-Frage GridBagLayout AWT, Swing, JavaFX & SWT 7
M LayoutManager Einige Fragen zum GridBagLayout AWT, Swing, JavaFX & SWT 13
N GridBagLayout AWT, Swing, JavaFX & SWT 11
D Swing Problem mit Gridbaglayout bzw. Größenanpassung JPanels AWT, Swing, JavaFX & SWT 7
Y Swing GridbagLayout JTextfield zu klein AWT, Swing, JavaFX & SWT 5
L LayoutManager GridBagLayout spielt verrückt AWT, Swing, JavaFX & SWT 9
T LayoutManager GridBagLayout an Fenstergröße anpassen AWT, Swing, JavaFX & SWT 2
J Java GUI mit GridBagLayout AWT, Swing, JavaFX & SWT 3
Y LayoutManager Problem mit Gridbaglayout AWT, Swing, JavaFX & SWT 8
hdi LayoutManager GridBagLayout AWT, Swing, JavaFX & SWT 9
W GridBagLayout Falsche Größenanpassung AWT, Swing, JavaFX & SWT 6
R Swing Button-Größe in JPanel mit GridBagLayout nicht änderbar AWT, Swing, JavaFX & SWT 3
E Problem mit meiner GUI/GridbagLayout AWT, Swing, JavaFX & SWT 2
M LayoutManager GradientPaint auf GridBagLayout AWT, Swing, JavaFX & SWT 5
D LayoutManager GridBagLayout, Änderung zur Laufzeit AWT, Swing, JavaFX & SWT 4
G LayoutManager per Button GridBagLayout + Inhalt ändern AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben