2009-04-30 58 views
4

我在我的SWT GUI應用程序中使用GridLayout。我爲每個網格單元格定義了以下GridData。網格單元本身就是一個標籤。SWT佈局問題 - 填充標籤可能嗎?

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; 

我創建這樣每個拉布勒元素 -

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

現在我的問題是,儘管使用標籤本身上verticalAlignment財產,verticalIndent財產和參考setAlignment的,我不能夠得到文本相對於網格單元格區域(25 x 25)垂直居中對齊。我想我錯過了一些東西。我如何在網格單元中實現垂直居中對齊?

回答

4

標籤上沒有setVerticalAlignment(),如果您使用LayoutData中的heightHint設置高度,則該高度將成爲控件的大小,並有效地阻止您將其設置在中間。解決方法是將標籤放入具有所需大小的組合中,然後居中控制。例如。

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

這不起作用。 – miqbal 2012-11-30 02:13:43

8

CLabel?你爲什麼不使用它?

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

甚至,您可以使用leftMargin,rightMargin,topMargin,bottomMargin。

(我爲後3年後不好意思)

1

我也有這個問題搏鬥。 Label不支持填充。我改用StyledText代替。

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); 

這對我來說伎倆。