首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SWT中嵌套复合材料顶部间距的变化

SWT中嵌套复合材料顶部间距的变化
EN

Stack Overflow用户
提问于 2013-10-18 19:04:02
回答 2查看 943关注 0票数 0

在SWT中,有可能改变两个嵌套复合材料顶部的间距吗?

例如,在使用下面的代码时,我得到了如下结果:

我不希望在红色和蓝色复合材料的顶部之间有任何空间,如下所示:

我试着让这两个组件的高度相同(使用GridData),但这是行不通的。

代码语言:javascript
复制
public class CompositeSnippet
{
public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);

    shell.setLayout(new GridLayout());

    Composite c1 = new Composite(shell, SWT.NONE);
    GridData c1GridData = new GridData(100, 50);
    c1.setLayoutData(c1GridData);
    c1.setLayout(new GridLayout());
    c1.setBackground(display.getSystemColor(SWT.COLOR_BLUE));


    Composite c2 = new Composite(c1, SWT.NONE);
    GridData c2GridData = new GridData(50, 50);
    c2.setLayoutData(c2GridData);
    c2.setBackground(display.getSystemColor(SWT.COLOR_RED));

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

}

基于本文在SWT布局上,似乎这一间距可能是由于修剪的蓝色复合材料。我试图创建我自己的自定义小部件,它扩展了复合材料并覆盖了computeTrim(...)方法,但是这也不起作用.

这个问题好像已经问过了,但我在堆叠溢出中找不到与它有关的任何东西。如果这个问题已经解决了,请指出正确的讨论,我对重复的帖子表示歉意。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-18 19:58:43

给你:

代码语言:javascript
复制
public static void main(String[] args)
{
    final Display display = Display.getDefault();
    final Shell shell = new Shell(display);
    shell.setLayout(new GridLayout(1, false));

    final Composite outer = new Composite(shell, SWT.NONE);
    outer.setBackground(display.getSystemColor(SWT.COLOR_BLUE));
    GridLayout layout = new GridLayout(1, false);
    layout.marginHeight = 0;
    outer.setLayout(layout);
    outer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    final Composite inner = new Composite(outer, SWT.NONE);
    inner.setBackground(display.getSystemColor(SWT.COLOR_RED));
    inner.setLayout(new GridLayout(1, false));
    inner.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    shell.pack();
    shell.open();

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

只需使用GridLayout#marginHeight并将其设置为0即可。

看起来是这样的:

票数 2
EN

Stack Overflow用户

发布于 2013-10-18 20:03:24

您需要将复合GridLayout.marginHeight c1设置为0。

代码语言:javascript
复制
public class CompositeSnippet
{
public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);

    shell.setLayout(new GridLayout());

    Composite c1 = new Composite(shell, SWT.NONE);
    GridData c1GridData = new GridData(100, 50);
    c1.setLayoutData(c1GridData);

    //Set marginWidth and marginHeight of parent composite to 0
    GridLayout c1Layout = new GridLayout();
    c1Layout.marginHeight = 0;
    c1.setLayout(c1Layout);
    c1.setBackground(display.getSystemColor(SWT.COLOR_BLUE));

    Composite c2 = new Composite(c1, SWT.NONE);
    GridData c2GridData = new GridData(50, 50);
    c2.setLayoutData(c2GridData);
    c2.setBackground(display.getSystemColor(SWT.COLOR_RED));

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19457242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档