没有间距的SWT布局允许给定小部件的水平填充

woj*_*k88 0 java layout swt

我尝试创建具有3列但没有间距的视图.更重要的是我需要有一个中心列,其宽度由容器的整体宽度决定(所以它抓住多余的水平空间).

GridLayout允许我创建3个宽度的中心填充容器,但我不能使此布局中的单元格之间的间距等于零.另一方面,在FillLayout中,很容易将specing等于零,但是不可能使中心列宽由容器宽度决定.

你能告诉我如何通过SWT布局实现我的目标吗?

Baz*_*Baz 7

您可以设置verticalSpacinghorizontalSpacingGridLayout,以0去除间距:

public static void main(String[] args)
{
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setText("StackOverflow");
    GridLayout layout = new GridLayout(3, false);
    layout.horizontalSpacing = 0;
    layout.verticalSpacing = 0;
    shell.setLayout(layout);

    createContent(new Composite(shell, SWT.BORDER), false);
    createContent(new Composite(shell, SWT.BORDER), true);
    createContent(new Composite(shell, SWT.BORDER), false);

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

private static void createContent(Composite parent, boolean hFill)
{
    if (hFill)
    {
        parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        parent.setLayout(new GridLayout(3, true));
    }
    else
    {
        parent.setLayoutData(new GridData(SWT.BEGINNING, SWT.FILL, false, true));
        parent.setLayout(new GridLayout(1, true));
    }

    for (int i = 0; i < 6; i++)
    {
        new Button(parent, SWT.PUSH).setText("Button " + i);
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是它的样子(注意彼此相邻的边框没有间距):

在此输入图像描述