4

我在我的 SWT GUI 应用程序中使用 GridLayout。我为每个网格单元定义了以下 GridData。网格单元本身只是一个标签。

    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

3 回答 3

8

CL标签?你为什么不使用它?

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

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

(三年后我很抱歉)

于 2012-11-30T02:12:52.783 回答
4

Label 上没有 setVerticalAlignment() ,如果您使用 LayoutData 中的 heightHint 设置高度,它将成为控件的大小,并有效地阻止您将其设置在中间。一种解决方法是将 Label 放入具有所需大小的组合中,然后将控件居中。例如

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));
于 2009-04-30T23:37:03.240 回答
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);

这对我有用。

于 2015-03-12T08:20:11.577 回答