Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在SWT中改变嵌套复合材料顶面之间的间距_Java_User Interface_Swt - Fatal编程技术网

Java 在SWT中改变嵌套复合材料顶面之间的间距

Java 在SWT中改变嵌套复合材料顶面之间的间距,java,user-interface,swt,Java,User Interface,Swt,是否可以更改SWT中两个嵌套复合材料顶面之间的间距 例如,当使用下面的代码时,我得到的结果如下所示: 我希望红色和蓝色复合材料的顶部之间没有任何空间,如下所示: 我尝试使两个组件的高度相同(使用GridData),但没有成功 public class CompositeSnippet { public static void main(String[] args) { Display display = new Display(); Shell shell = new She

是否可以更改SWT中两个嵌套复合材料顶面之间的间距

例如,当使用下面的代码时,我得到的结果如下所示:

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

我尝试使两个组件的高度相同(使用
GridData
),但没有成功

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();
}
}

基于这篇文章,似乎这个间距可能是由于蓝色复合材料的修剪造成的。我试图创建自己的自定义小部件来扩展Composite并覆盖
computeTrim(…)
方法,但也没有成功

另外,这个问题似乎已经被问过了,但我在stackoverflow上找不到任何与之相关的东西。如果这个问题已经解决,请给我指出正确的讨论,我为重复的帖子道歉。

给你:

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

看起来像这样:


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

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();
}
}

谢谢,这很有效。我接受了Baz上面的回答,因为它还为原始代码片段添加了一些编码风格的改进。