AWT Problem mit Platzierung (GridBagLayout)

PascalC

Mitglied
Hi,

ich versuche eine GUI zu programmieren und wollte rechts oben Log-in/Passwort Felder untereinander mittels GridBagLayout platzieren. Leider platziert er sie nebeneinander. Woran kann das liegen?

Java:
import java.awt.* ;
import java.awt.event.*;
import javax.swing.*;


public class Interface extends JFrame 
{
	//Instanzvariablen
	JLabel text= new JLabel("Willkommen bei text");
	JLabel login = new JLabel("Log-in: ");
	JTextField loginfeld = new JTextField(10);
	JLabel passwortfeld = new JLabel("Passwort: ");
	JPasswordField passwort = new JPasswordField(10);
	JPanel oben = new JPanel();
	JPanel logindaten = new JPanel();
	
	//Konstruktor
	public Interface (String titel)
	{
		super (titel);
		
		//Anlegen der verschiedenen Produktgruppen
		JPanel obst = new JPanel();
		JPanel gemuese = new JPanel();
		JPanel tiefkuehl = new JPanel();
		JPanel milchprodukte = new JPanel();
		JPanel fleisch = new JPanel();
		JPanel konserven = new JPanel();
		
		obst.setBackground(Color.GREEN);
		gemuese.setBackground(Color.GREEN);
		tiefkuehl.setBackground(Color.BLUE);
		milchprodukte.setBackground(Color.BLUE);
		fleisch.setBackground(Color.RED);
		konserven.setBackground(Color.GRAY);
		
		//Anlegen der Produktgruppen als Registerkarten
		JTabbedPane sortiment = new JTabbedPane(JTabbedPane.LEFT, JTabbedPane.WRAP_TAB_LAYOUT);
		
		sortiment.addTab("Obst", obst);
		sortiment.addTab("Gemuese", gemuese);
		sortiment.addTab("Tiefkuehl", tiefkuehl);
		sortiment.addTab("Milchprodukte", milchprodukte);
		sortiment.addTab("Fleisch", fleisch);
		sortiment.addTab("Konserven", konserven);
		
		add(sortiment);
		
		//Layout
		setLayout(new BorderLayout());
		
		oben.setLayout(new BorderLayout()); //BorderLayout um Überschrift und Log-in zu platzieren
		oben.add(text, BorderLayout.NORTH);
		
		logindaten.setLayout(new GridBagLayout());
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.fill=GridBagConstraints.HORIZONTAL;
		gbc.insets = new Insets(2,2,2,2);
		
		gbc.gridx = 0;
		gbc.gridy = 0;
		gbc.gridheight = 2;
		logindaten.add(login);
		
		gbc.gridx = 1;
		gbc.gridy = 0;
		gbc.gridheight = 1;
		logindaten.add(loginfeld);
		
		gbc.gridx = 0;
		gbc.gridy = 1;
		gbc.gridheight = 1;
		logindaten.add(passwortfeld);
		
		gbc.gridx = 1;
		gbc.gridy = 1;
		gbc.gridheight = 1;
		logindaten.add(passwort);
		
		oben.add(logindaten, BorderLayout.EAST);
		add(oben, BorderLayout.PAGE_START);
		add(sortiment, BorderLayout.LINE_START);
		pack();
		
		//Einstellungen des Fensters
		setVisible(true);
		setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		setSize(800, 550);
		setResizable(true);
	}
}
 
Du musst auch die GridBagConstraint deinem Container übergeben:
Java:
logindaten.add(login, gbc);

Geschweige davon ist dein Code eine kleine Katastrophe.
- Ordne deinen Code: Zerlege Aufgaben in kleinere und clustere sie in Methoden
- Unbedingt Objekte Kapseln: Nicht alle deine Felder müssen so große Sichtbarkeit verfügen
- Leite nicht von JFrame ab!!!! Einfach verwenden!!!! Wo lernt man den sowas nur?
- setVisible(true) sollte der letzte Aufruf sein!
- frame.pack() und setSize(...) vertragen sich nicht.
- Klassennamen anders wählen, sonst kommt es zu Verwechslungen mit interface (keyword)

Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class UserInterface {

  public UserInterface(String titel) {
    JFrame frame = new JFrame(titel);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(800, 550);

    JPanel mainPanel = new JPanel(new BorderLayout());

    mainPanel.add(createLoginPanel(), BorderLayout.PAGE_START);
    mainPanel.add(createTabPanel(), BorderLayout.CENTER);

    frame.add(mainPanel);
    frame.setVisible(true);
  }

  private JTabbedPane createTabPanel() {
    JTabbedPane sortiment = new JTabbedPane(JTabbedPane.LEFT, JTabbedPane.WRAP_TAB_LAYOUT);

    JPanel obst = new JPanel();
    JPanel gemuese = new JPanel();
    JPanel tiefkuehl = new JPanel();
    JPanel milchprodukte = new JPanel();
    JPanel fleisch = new JPanel();
    JPanel konserven = new JPanel();

    obst.setBackground(Color.GREEN);
    gemuese.setBackground(Color.ORANGE);
    tiefkuehl.setBackground(Color.MAGENTA);
    milchprodukte.setBackground(Color.BLUE);
    fleisch.setBackground(Color.RED);
    konserven.setBackground(Color.GRAY);

    sortiment.addTab("Obst", obst);
    sortiment.addTab("Gemuese", gemuese);
    sortiment.addTab("Tiefkuehl", tiefkuehl);
    sortiment.addTab("Milchprodukte", milchprodukte);
    sortiment.addTab("Fleisch", fleisch);
    sortiment.addTab("Konserven", konserven);

    return sortiment;
  }

  private JComponent createLoginPanel() {
    JPanel oben = new JPanel(new BorderLayout());

    JLabel text = new JLabel("Willkommen bei text");
    oben.add(text, BorderLayout.NORTH);

    JPanel logindaten = new JPanel(new GridBagLayout());

    JLabel login = new JLabel("Log-in: ");
    JTextField loginfeld = new JTextField(10);
    JLabel passwortfeld = new JLabel("Passwort: ");
    JPasswordField passwort = new JPasswordField(10);

    GridBagConstraints gbc = new GridBagConstraints();
    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.insets = new Insets(2, 2, 2, 2);

    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.gridheight = 1;
    logindaten.add(login, gbc);

    gbc.gridx = 1;
    gbc.gridy = 0;
    gbc.gridheight = 1;
    logindaten.add(loginfeld, gbc);

    gbc.gridx = 0;
    gbc.gridy = 1;
    gbc.gridheight = 1;
    logindaten.add(passwortfeld, gbc);

    gbc.gridx = 1;
    gbc.gridy = 1;
    gbc.gridheight = 1;
    logindaten.add(passwort, gbc);

    oben.add(logindaten, BorderLayout.EAST);

    return oben;
  }

  public static void main(String... args) {
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        new UserInterface("Test");
      }
    });
  }
}
 

Zurück
Oben