5

我有一个 RCP/SWT 应用程序,我正在尝试从现有的复合材料中构建一个视图。一个是 FillLayout 复合,另一个使用 GridLayout。

我希望最终得到一个视图,其中 GridLayout 组合排列在 FillLayout 组合的左侧(想想垂直横幅),大约是整个视图宽度的 10%,现有的 FillLayout 组合包括其他 90%。

我不确定是否可以在 SWT 中组合布局,但我正在考虑类似于具有两列的 GridLayout 之类的东西。第一列将包含 GridLayout 小部件,第二列将包含 FillLayout 组合。这可以在 SWT 中完成吗?如果是这样,这在代码方面看起来像什么?

谢谢-

4

2 回答 2

7

开始将 a 设置FormLayout为您的外部复合材料。将另外两个复合材料放入其中,设置它们的FormData信息以随意放置它们。然后设置这两个复合的布局(网格和填充,如你所说)。

这是一些开始的代码。在它显示它产生的东西之后有一个图像。您还可以查看 Eclipse 的SWT Layouts视图。

Shell shell = new Shell();

FillLayout fillLayout = new FillLayout();
fillLayout.marginHeight = 5;
fillLayout.marginWidth = 5;
shell.setLayout( fillLayout );

Composite outer = new Composite( shell, SWT.BORDER );
outer.setBackground( new Color( null, 207, 255, 206 ) ); // Green

FormLayout formLayout = new FormLayout();
formLayout.marginHeight = 5;
formLayout.marginWidth = 5;
formLayout.spacing = 5;
outer.setLayout( formLayout );

Composite innerLeft = new Composite( outer, SWT.BORDER );
innerLeft.setLayout( new GridLayout() );
innerLeft.setBackground( new Color( null, 232, 223, 255 ) ); // Blue

FormData fData = new FormData();
fData.top = new FormAttachment( 0 );
fData.left = new FormAttachment( 0 );
fData.right = new FormAttachment( 10 ); // Locks on 10% of the view
fData.bottom = new FormAttachment( 100 );
innerLeft.setLayoutData( fData );

Composite innerRight = new Composite( outer, SWT.BORDER );
innerRight.setLayout( fillLayout );
innerRight.setBackground( new Color( null, 255, 235, 223 ) ); // Orange

fData = new FormData();
fData.top = new FormAttachment( 0 );
fData.left = new FormAttachment( innerLeft );
fData.right = new FormAttachment( 100 );
fData.bottom = new FormAttachment( 100 );
innerRight.setLayoutData( fData );

shell.open();

代码输出

于 2013-05-31T12:25:29.553 回答
2

您可以使用以下代码作为起点:

public static void main(String[] args)
{
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new GridLayout(1, false));

    SashForm form = new SashForm(shell, SWT.HORIZONTAL);
    form.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    Composite left = new Composite(form, SWT.BORDER);
    left.setLayout(new GridLayout(3, true));
    left.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    for(int i = 0; i < 9; i++)
    {
        Button button = new Button(left, SWT.PUSH);
        button.setText("Button " + i);
        button.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));
    }

    final Composite right = new Composite(form, SWT.BORDER);
    right.setLayout(new GridLayout(1, true));
    right.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    Button fillButton = new Button(right, SWT.PUSH);
    fillButton.setText("Fill");
    fillButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    /* Set the width to 80% and 20% */
    form.setWeights(new int[] {4, 1});

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

它看起来像这样:

在此处输入图像描述


它基本上是SashForm由两部分组成的。左边是GridLayout三列的,右边是GridLayout一列的。无需混合Layouts。

百分比设置为form.setWeights(new int[] {4, 1});

于 2013-05-31T06:58:59.013 回答