Java SWT布局重新定位表单控件

Java SWT布局重新定位表单控件,java,layout,swt,Java,Layout,Swt,这是我的代码和表单截图 我希望最上面的文本框占据所有可用的水平空间。 使用GridData和grabeExcessHorizontalSpan值为2的Composite,使用GridData和水平对齐的值FILL和grabeExcessHorizontalSpace值true到文本小部件 我通常使用创建GridData对象,我认为代码更干净。使用GridData和horizontalSpan,值为2的组合,和一个GridData带horizontalAlignment带值FILL的GridDa

这是我的代码和表单截图

我希望最上面的文本框占据所有可用的水平空间。


使用
GridData
grabeExcessHorizontalSpan
值为2的
Composite
,使用
GridData
水平对齐的
FILL
grabeExcessHorizontalSpace
true
文本
小部件


我通常使用创建
GridData
对象,我认为代码更干净。

使用
GridData
horizontalSpan
,值为2的
组合
,和一个
GridData
horizontalAlignment
带值
FILL
GridData
和一个
grabsExcessHorizontalSpace
带值
true
小部件


我通常使用创建
GridData
对象,我认为代码更干净。

这就是我需要的!小问题,为什么标签、文本1和文本2没有水平对齐?“标签”与“文本1”和“文本2”位于不同的容器中,因此它们具有不同的布局管理器。为了确保第一列在两个布局管理器中具有相同的宽度,可以在
GridData
s中指定宽度。或者,您可以使用一个包含6列的容器,第一个文本具有水平跨度3,并使用空标签填充右下角的空白。您也可以使用WindowBuilder。这就是我需要的!小问题,为什么标签、文本1和文本2没有水平对齐?“标签”与“文本1”和“文本2”位于不同的容器中,因此它们具有不同的布局管理器。为了确保第一列在两个布局管理器中具有相同的宽度,可以在
GridData
s中指定宽度。或者,您可以使用一个包含6列的容器,第一个文本的水平跨度为3,并使用空标签填充右下角的空白。您也可以使用WindowBuilder。
![Display display = new Display();][1]
    Shell shell = new Shell(display);
    shell.setLayout(new GridLayout());

    Group group = new Group(shell, SWT.FILL);
    group.setText("Group");
    group.setLayout(new GridLayout(4, false));
    group.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false));


    Label lb = new Label(group, SWT.NONE);
    lb.setText("label");
    new Text(group, SWT.BORDER);

    Button btn = new Button(group, SWT.CHECK);
    Label lbbtn = new Label(group, SWT.NONE);
    lbbtn.setText("check");


    Composite comp = new Composite(group, SWT.NONE);
    comp.setLayout(new GridLayout(4, false));
    comp.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
    Label lb1 = new Label(comp, SWT.NONE);
    lb1.setText("Text1");
    Text txt = new Text(comp, SWT.BORDER);

    Label lb2 = new Label(comp, SWT.NONE);
    lb2.setText("Text2");
    txt = new Text(comp, SWT.BORDER);

    Label lb3 = new Label(comp, SWT.NONE);
    lb3.setText("Text3");
    txt = new Text(comp, SWT.BORDER);

    Label lb4 = new Label(comp, SWT.NONE);
    lb4.setText("Text4");
    txt = new Text(comp, SWT.BORDER);

    shell.pack();
    shell.open();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}