# SWT Label horizontal und vertikal zentrieren



## DeeDee0815 (19. Mai 2008)

Hi,

ich möchte innerhalb einer Shell einen Text zentrieren: Horizontal und vertikal. Leider komme ich nicht so ganz voran, was muss man dafür machen?


```
info = new Composite(window, SWT.NONE);
		infoLayout = new GridLayout();
		infoLayout.numColumns = 1;
		info.setLayout(infoLayout);

		infoLabel = new Label(info, SWT.CENTER);
		infoLabelLayoutData = new GridData(GridData.FILL_BOTH);
		infoLabel.setText("Please select an action to get started.");
		infoLabel.setLayoutData(infoLabelLayoutData);
		infoLabel.pack();
```

Ich habe schon alle möglichen (Layout-)GridData und (Label-)style kombinationen versucht: Ohne erfolg. Was muss ich tun?

Siehe auch: http://www.java-forum.org/de/viewtopic.php?t=59634 (ohne Lösung)

MfG
DeeDee0815


----------



## Wildcard (19. Mai 2008)

Mach mal so:

```
infoLabelLayoutData = GridDataFactory.fillDefaults().grab(true,true).create();
```


----------



## DeeDee0815 (20. Mai 2008)

Hi Wildcard,

danke für Deine schnelle Antwort: Leider kann ich die Klasse GridDataFactory nicht finden. Ist diese etwa nicht bei dem standard SWT dabei?

MfG
René


----------



## Wildcard (20. Mai 2008)

Das ist eine JFace Klasse. Verwendest du etwa kein JFace?  ???:L 
Macht aber nichts, du kannst der GridData auch ohne die Factory das grab Attribut setzen.


----------



## DeeDee0815 (20. Mai 2008)

Hi Wildcard,

nein, ich nutze kein JFace, und habe, ehrlich gesagt, auch keine so rechte Ahnung, was das ist, wenngleich ich bereits davon gehört habe. Ich bin allerdings auch gerade erst dabei, mich in SWT einzuarbeiten.

Jedenfalls konnte ich das Ganze jetzt folgendermaßen lösen, wobei den Anstoß dazu mir Dein Tipp mit dem "das grab Attribut setzen" gegeben hat.


```
info = new Composite(window, SWT.NONE);
		infoLayout = new GridLayout();
		infoLayout.numColumns = 1;
		info.setLayout(infoLayout);

		infoLabel = new Label(info, SWT.READ_ONLY);
		infoLabelLayoutData = new GridData(GridData.FILL_BOTH);
		infoLabelLayoutData.verticalAlignment = SWT.CENTER;
		infoLabelLayoutData.horizontalAlignment = SWT.CENTER;
		infoLabel.setText("Please select an action to get started.");
		infoLabel.setLayoutData(infoLabelLayoutData);
		infoLabel.pack();
```

Also mal wieder vielen Dank für Deine schnelle und kompetente Hilfe! Vielen Dank!

MfG
DeeDee0815


----------



## Wildcard (20. Mai 2008)

JFace abstrahiert das furchtbare pure SWT und macht es damit benutzbar. Ich kann dir nur dringend davon abraten SWT ohne JFace einzusetzen. Ein einfacher Tree wird mit SWT zur Qual.
Ausserdem gibt es tolle JFace Widgets und Dialoge.


----------



## DeeDee0815 (20. Mai 2008)

Hi Wildcard,

vielen Dank für den Tipp: Bei dem aktuellen Projekt handelt es sich jedoch nur um eine ganz simple Cryptoanwendung für die Schule. Da wird so schnell nix zu umständlich. Was meine größeren, sich in Planung befindlichen, SWT-Projekte angeht, werde ich diesen Vorschlag aber gerne beherzigen. Ich muss allerdings sagen, dass mir "pures" SWT wesentlich besser als Swing gefällt. Abgesehen vom wesentlich besseren (sichtbaren) Ergebnis, jedenfalls was SystemLAF angeht, finde ich die Programmierung irgendwie zielführender. Mit SWT komme ich schneller zum Ziel als mit Swing, insbesondere mit dem SWT-GridLayout im Gegensatz zu dem Swing-GridBagLayout, für das ich mir extra zur Benutzbarkeit eine Hilfsklasse schreiben musste.

Als nochmals vielen Dank,
DeeDee0815


----------



## Wildcard (20. Mai 2008)

Schon richtig, das GridLayout ist gut. Es gibt allerdings ebensogute für Swing.
Die AWT API ist ein absoluter Krampf, ohne JFace überhaupt nicht benutzbar.
Mit JFace sind dann einige Dinge tatsächlich besser als in Swing (Content- und LabelProvider zb), andere dagegen immer noch schlechter (hässliche Bitmasken).
Swing ist definitiv das mächtigere Framework, aber SWT hat die schöneren Standard Widgets.


----------

