2009-04-30 17 views
4

Ich verwende GridLayout in meiner SWT GUI App. Ich habe die folgenden GridData für jede Rasterzelle definiert. Die Gitterzelle selbst ist nur ein Label.SWT Layout Problem - Auffüllen für Etiketten möglich?

GridData gridData = new GridData(); 
    gridData.horizontalAlignment = GridData.FILL; 
    gridData.grabExcessHorizontalSpace = true; 
    gridData.grabExcessVerticalSpace = true; 
    gridData.heightHint = 25; 
    gridData.widthHint = 25; 
    gridData.verticalAlignment = GridData.VERTICAL_ALIGN_CENTER; 
    gridData.verticalIndent = 10; 

Und ich schaffen jedes Label Element wie folgt -

Label l = new Label(shell, SWT.BORDER); 
    l.setAlignment(SWT.CENTER); 
    l.setText("some text"); 
    l.setLayoutData(gridData); 

Jetzt ist mein Problem, trotz der Verwendung von Verticalsach verticalIndent Eigentum und SetAlignment auf dem Etikett selbst, ich bin nicht in der Lage das bekommen Text wird vertikal zentriert in Bezug auf den Gitterzellenbereich ausgerichtet (25 x 25). Ich denke, ich vermisse etwas. Wie kann ich die vertikal zentrierte Ausrichtung in einer Rasterzelle erreichen?

Antwort

4

Es gibt kein setVerticalAlignment() auf einem Label, und wenn Sie die Höhe mit dem heightHint in den LayoutData festlegen, wird dies zur Größe des Steuerelements und verhindert effektiv, dass Sie es in der Mitte setzen. Ein Workaround wäre, das Label in ein Composite mit der gewünschten Größe zu bringen und dann das Steuerelement zu zentrieren. Z.B.

Composite labelCell = new Composite(shell, SWT.BORDER); 
GridData gridData = new GridData(); 
gridData.heightHint = 250; 
gridData.widthHint = 250; 
labelCell.setLayoutData(gridData); 
labelCell.setLayout(new GridLayout()); 
Label l = new Label(labelCell , SWT.NONE); 
l.setText("some text"); 
l.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true)); 
+0

Dies funktioniert nicht. – miqbal

8

CLabel? Warum benutzt du es nicht?

CLabel cl = new CLabel(shell, SWT.CENTER); 
cl.setBounds(0, 0, 100, 100); 
cl.setText("Custom Label!!!"); 

Auch können Sie leftmargin, Right topmargin, Bottom verwenden.

(Es tut mir leid für die nach 3 Jahre später)

1

ich auch mit dieser Frage gerungen. Label unterstützt keine Auffüllung. Ich wendete mit StyledText stattdessen.

final StyledText text = new StyledText(parent, SWT.WRAP); 
final int padding = 5; 

text.setLeftMargin(padding); 
text.setRightMargin(padding); 
text.setTopMargin(padding); 
text.setBottomMargin(padding); 

text.setWordWrap(true); 
text.setCaret(null); 

Das hat den Trick für mich getan.