SWT在组中创建滚动组合

时间:2014-09-28 15:59:09

标签: java layout swt composite

我想创建一个包含2个Groups的Composite。 2组具有与复合材料相同的宽度,可以调整大小。

Group1包含一个可滚动的Composite。此可滚动复合材料的固定高度= 400,包含20个文本字段==>显示V_SCROLL

Group2包含一个文本字段,高度将是动态的,最小尺寸为100,按高度复合尺寸重新调整大小 - 400(可滚动复合材料的高度)

我尝试构建此布局,但Group1始终完全填充复合材料,我无法看到Group2

由于

1 个答案:

答案 0 :(得分:9)

您可以使用GridData#heightHintGridData#minimumHeight来设置自己的高度。但请记住,强制执行特定大小可能无法在所有屏幕分辨率上正常工作,因为所需的大小可能会超出可用的屏幕大小。

但是,这是一个可以帮助您的简单示例:

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

    Group first = new Group(shell, SWT.NONE);
    first.setText("Group 1");
    first.setLayout(new GridLayout(1, false));
    GridData firstData = new GridData(SWT.FILL, SWT.FILL, true, false);
    firstData.heightHint = 400;
    first.setLayoutData(firstData);

    ScrolledComposite firstScroll = new ScrolledComposite(first, SWT.V_SCROLL);
    firstScroll.setLayout(new GridLayout(1, false));
    firstScroll.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    Composite firstContent = new Composite(firstScroll, SWT.NONE);
    firstContent.setLayout(new GridLayout(1, false));
    firstContent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    for (int i = 0; i < 20; i++)
    {
        Text text = new Text(firstContent, SWT.BORDER);
        text.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
    }

    firstScroll.setContent(firstContent);
    firstScroll.setExpandHorizontal(true);
    firstScroll.setExpandVertical(true);
    firstScroll.setMinSize(firstContent.computeSize(SWT.DEFAULT, SWT.DEFAULT));

    Group second = new Group(shell, SWT.NONE);
    second.setText("Group 2");
    second.setLayout(new GridLayout(1, false));
    GridData secondData = new GridData(SWT.FILL, SWT.FILL, true, true);
    secondData.minimumHeight = 100;
    second.setLayoutData(secondData);

    Text text = new Text(second, SWT.BORDER | SWT.MULTI);
    text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    shell.pack();
    shell.setSize(400, shell.getSize().y);
    shell.open();

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

看起来像这样:

enter image description here