# Gridbaglayout - Abstände zwischen Komponenten einstellen



## nastron (31. Jul 2010)

Hallo zusammen,

ich bin grad dabei nen kleines Programm zuschreiben, mit welchem ich Emails auslesen will. Dazu arbeite ich ein bisschen mit Gridbaglayout. Ersmal der Code:
[Java]
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.util.*;

public class Email_Anzeige extends JFrame implements ActionListener {


	String[] Got_Mails;
	String[] MONTHS = { "Januar", "Februar", "Maerz", "April", "Mai", "Juni", "Juli"};

	static void addComponent( Container cont,
            GridBagLayout gbl,
            Component c,
            int x, int y,
            int width, int height,
            double weightx, double weighty )
{
         GridBagConstraints gbc = new GridBagConstraints();
         gbc.fill = GridBagConstraints.BOTH;
         gbc.gridx = x; gbc.gridy = y;
         gbc.gridwidth = width; gbc.gridheight = height;
         gbc.weightx = weightx; gbc.weighty = weighty;
         gbc.insets= new Insets(1,1,1,1);
         gbl.setConstraints( c, gbc );
         cont.add( c );
}



	public Email_Anzeige()throws Exception
	{

	super("Empfangene Emails");
	GridBagLayout gbl = new GridBagLayout();
        getContentPane().setLayout( gbl );  
        Container c = getContentPane();
	//Got_Mails = Einlesen();
	JList list = new JList(MONTHS);
	list.setToolTipText("Waehlen Sie eine Email aus");
	JScrollPane JScroll = new JScrollPane(list);

	addComponent( c, gbl, JScroll, 0, 0, 3, 1, 1.0, 1.0 );
	addComponent( c, gbl, new JButton("Einlesen"), 1, 1, 1, 1, 1.0, 1.0 );
	addComponent( c, gbl, new JLabel("              "), 0, 1, 1, 1, 1.8, 1.0 );
        addComponent( c, gbl, new JLabel("              "), 2, 1, 1, 1, 1.8, 1.0   );
	addComponent( c, gbl, new JTextArea(0, 0), 0, 3, 3, 1, 1.0, 1.0);

        addWindowListener(new WindowClosingAdapter(true));

	}


[/Java]
Wie man sehen kann, habe ich eine Jlist(in einer JScrollPane) die ueber 3 Spalten breit ist und eine Liste unterhalb des Buttons "Einlesen", die ebenfalls 3 Spalten breit ist. Ich habe mir nun gedacht, dass ich gerne zwischen den beiden Felder in der Mitte einen Button "Einlesen" moechte. Um diesen in die Mitte zu bekommen, habe ich aber rechts und links von ihm zwei leere Labels erstellen muessen, da sich der Button sonst der max Breite anpasst. Gibt es da eine elegantere Loesung? Und mit welchen Layout arbeitet ihr? Ich suche eins bei dem ich die Felder frei setzen kann. Hatte mit Null-Layout gearbeitet(dachte zuerst supi, kann die Felder setzen wie ich will) hab aber im Internet gelesen, dass die Schriften sich bei Groessenaenderung verzerren und Null-Layout nicht empfehlenswert ist.


----------



## L-ectron-X (31. Jul 2010)

Du kannst um den Button Insets einbauen, die als Abstandhalter fungieren. Folgenden Code vor dem Hinzufügen des Buttons setzen:

```
gbc.insets = new Insets(0, 10, 0, 10); //Abstand: oben, links, unten, rechts
```

Du müsstest deinen Code entsprechend anpassen, 1:1 kannst du das nicht übernehmen!


----------



## nastron (1. Aug 2010)

Ja, wenn ich das ganze noch ein bisschen erhoehe geht das wirklich gut, danke.


----------

