在 SWT 中将 FillLayout 与浏览器一起使用

Use FillLayout with Browser in SWT

我有一个由标题和浏览器组成的视图。我希望浏览器填充我的视图。它应该是这样的:

我尝试了不同的组合。

    c = new Composite(parent, SWT.NONE);
    c.setLayout(new RowLayout(SWT.VERTICAL));

    Label l = new Label(c, SWT.NONE);
    l.setBackground(color);
    l.setText("----------------------Heading--------------------------------");
    l.setFont(new Font(null, new FontData(Constants.FONT, 12, SWT.BOLD)));

    Composite wrapper = new Composite(c, SWT.NONE);
    wrapper.setBackground(new Color(null, 0, 0, 0));
    wrapper.setLayout(new FillLayout(SWT.VERTICAL));
    browser = new Browser(wrapper, SWT.WRAP);
    browser.setBackground(color);

产生:

将 FillLayout 设置为 c 也不起作用。通过这样做,标题和浏览器共享视图的大小并具有相同的大小。

    c = new Composite(parent, SWT.NONE);
    c.setLayout(new FillLayout(SWT.VERTICAL));

    Label l = new Label(c, SWT.NONE);
    l.setBackground(color);
    l.setText("----------------------Heading--------------------------------");
    l.setFont(new Font(null, new FontData(Constants.FONT, 12, SWT.BOLD)));

    browser = new Browser(c, SWT.WRAP);
    browser.setBackground(color);

产生:

我也试过以下方法:

composite with filllayout

-> composite with gridlayout

    ->composite with rowLayout (fixed height, grab right)

    ->composite with rowLayout

        -> composite with fillLayout

            -> composite with browser

假设 header 和浏览器具有相同的 parent,您可以像这样使用 GridLayout

parent.setLayout( new GridLayout( 1, false ) );
label.setLayoutData( new GridData( SWT.FILL, SWT.TOP, true, false ) );
browser.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );

尽管 one-cell-grid 并不是 GridLayout 的真正用途,但它应该可以解决问题。布局数据建议标签在顶部对齐并使用所有水平 space 和浏览器使用水平和垂直 space