# SWT: GridLayout und Textfelder



## paedubucher (28. Dez 2005)

Hallo allerseits

Aufgrund eines Schulprojekts habe ich mal mit SWT begonnen. Nun möchte ich eine kleine Beispielapplikation erstellen. Dabei handelt es sich um eine kleine Adressverwaltung. Nun habe ich einmal mit einem Bearbeitungs-GUI für die Adressen angefangen, hier der Code:


```
package guis;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class FriendDetail
{
  private Display display = null;
  private Shell shell = null;
  
  private Group groupData = null;
  private GridLayout dataLayout = null;
  private Label lblVorname = null;
  private Text txtVorname = null;
  private Label lblNachname = null;
  private Text txtNachname = null;
  
  public FriendDetail()
  {
    display = new Display();
    
    shell = new Shell(display);
    shell.setText("[Vorname] [Nachname] editieren");
    
    groupData = new Group(shell, SWT.NONE);
    groupData.setText("Daten");
    
    dataLayout = new GridLayout();
    dataLayout.numColumns = 4;
    dataLayout.marginHeight = 5;
    dataLayout.marginWidth = 5;
    dataLayout.horizontalSpacing = 5;
    dataLayout.verticalSpacing = 5;
    groupData.setLayout(dataLayout);
    
    lblVorname = new Label(groupData, SWT.NULL);
    lblVorname.setText("Vorname");
    
    txtVorname = new Text(groupData, SWT.SINGLE | SWT.BORDER);
    
    lblNachname = new Label(groupData, SWT.NULL);
    lblNachname.setText("Nachname");
    
    txtNachname = new Text(groupData, SWT.SINGLE | SWT.BORDER);
    
    groupData.pack();
    shell.pack();
    shell.setMinimumSize(shell.getSize());
    shell.setVisible(true);
    while(!shell.isDisposed())
    {
      if(!display.readAndDispatch())
        display.sleep();
    }
  }
}
```

Ist noch nicht so schön, halt alles im Konstruktor... Aber es geht ja erstmals nur ums Prinzip. Offenbar habe ich mich für das GridLayout entschieden, dies ist IMHO der beste LayoutManager für diesen Zweck. Das Label wird natürlich automatisch auf die richtige Grösse gebracht, da es ja einen bestimmten Inhalt hat. Bei den Textfeldern ist das so ein Problem, da die am Anfang ja noch leer sind.
Nun bin ich fast am durchdrehen, wie ich diesen Textfeldern eine Grösse aufzwingen kann. Die setSize Methode hat irgendwie keinen Einfluss und setText("                            ") ist natürlich totaler Schwachsinn.

Kann mir da jemand helfen?

Auf der SWT-Homepage bin ich bloss auf ein paar Codeschnippsel gestossen, die mit Buttons arbeiten.


----------



## paedubucher (30. Dez 2005)

Nun habe ich mir mal die Konstruktoren der GridData-Klasse mal näher angeschaut  :###

Der Konstruktor mit den zwei int-Parameter scheint mein Problem tatsächlich zu lösen:
GridData(int Breite, int Höhe);

```
Text foobar = new Text(myComposite, SWT.SINGLE | SWT.BORDER);
foobar.setLayoutData(new GridData(120, foobar.getLineHeight()));
```

Mithilfe der Methode getLineHeight() der Klasse Text erhalte ich die aktuelle, in diesem Fall die standardmässige, Grösse des Textfeldes zurück.

Problem gelöst!


----------

