Java SWT在组中创建滚动组合

Java SWT在组中创建滚动组合,java,layout,swt,composite,Java,Layout,Swt,Composite,我想创建一个包含2个组的组合。两组的宽度与复合材料相同,可以调整大小 Group1包含一个可滚动的组合。此可滚动组合的固定高度为400,包含20个文本字段==>show V_SCROLL Group2包含一个文本字段,高度将是动态的,最小大小为100,按高度组合-400(可滚动组合的高度)重新调整大小 我尝试构建这个布局,但是Group1总是填满组合,我看不到Group2 谢谢您可以使用GridData#heightHint和GridData#minimumHeight设置您的身高。但请记住,强

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

Group1包含一个可滚动的组合。此可滚动组合的固定高度为400,包含20个文本字段==>show V_SCROLL

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

我尝试构建这个布局,但是Group1总是填满组合,我看不到Group2

谢谢

您可以使用
GridData#heightHint
GridData#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();
}
publicstaticvoidmain(字符串[]args)
{
显示=新显示();
外壳=新外壳();
shell.setText(“StackOverflow”);
shell.setLayout(新的GridLayout(1,false));
第一组=新组(壳牌,SWT.NONE);
第一,setText(“第1组”);
首先,setLayout(新的GridLayout(1,false));
GridData firstData=新的GridData(SWT.FILL、SWT.FILL、true、false);
firstData.heightHint=400;
first.setLayoutData(firstData);
ScrolledCompositeFirstScroll=新的ScrolledComposite(第一个,SWT.V_SCROLL);
setLayout(新的GridLayout(1,false));
setLayoutData(新的GridData(SWT.FILL,SWT.FILL,true,true));
Composite firstContent=新组合(firstScroll,SWT.NONE);
setLayout(新的GridLayout(1,false));
setLayoutData(新的GridData(SWT.FILL,SWT.FILL,true,true));
对于(int i=0;i<20;i++)
{
Text Text=新文本(firstContent,SWT.BORDER);
setLayoutData(新的GridData(SWT.FILL,SWT.beging,true,false));
}
setContent(firstContent);
firstScroll.setExpandHorizontal(true);
firstScroll.setExpandVertical(true);
setMinSize(firstContent.computeSize(SWT.DEFAULT,SWT.DEFAULT));
第二组=新组(壳牌,SWT.NONE);
第二,setText(“第2组”);
setLayout(新的GridLayout(1,false));
GridData secondData=新的GridData(SWT.FILL,SWT.FILL,true,true);
secondData.minimumHeight=100;
第二,设置布局数据(secondData);
文本文本=新文本(第二个,SWT.BORDER | SWT.MULTI);
setLayoutData(新的GridData(SWT.FILL,SWT.FILL,true,true));
shell.pack();
shell.setSize(400,shell.getSize().y);
shell.open();
而(!shell.isDisposed())
{
如果(!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}
看起来像这样:


非常感谢Baz,这正是我所需要的。此代码示例还提供了一个框架,用于滚动
网格布局中
按钮
对象的
,如果其生成
文本
对象的循环被替换为将每个
按钮
放在
第一个组合中的代码(和/或
secondComposite
等)。通过创建新的
GridLayout
然后调用例如
GridLayout.numColumns=2;
然后调用
shell.setLayout(GridLayout);