java - SWT 从 Composite 中移除边距

标签 java layout swt

当我在 ViewPart 中嵌入 Composite 控件时,在文本框和按钮(按钮是另一个 Composite 的一部分)之间添加了垂直边距/填充,如附图所示.

如何删除它?

public class View extends ViewPart {
    public static final String ID = "xyyx.view";

    public void createPartControl(Composite parent) {

        GridLayout layout = new GridLayout(1, false);
        parent.setLayout(layout);


        Text infoText = new Text(parent, SWT.BORDER);

        GridData gridDataInfo = new GridData();
        gridDataInfo.horizontalSpan = 1;
        gridDataInfo.grabExcessHorizontalSpace = true;
        gridDataInfo.horizontalAlignment = GridData.FILL;
        infoText.setLayoutData(gridDataInfo);       

        new NewComposite(parent, SWT.NONE);         

    }

    public class NewComposite extends Composite{

        public NewComposite(Composite parent, int style) {
            super(parent, style);           

            GridLayout layout = new GridLayout(1, false);
            setLayout(layout);      

            Button btn = new Button(parent, SWT.PUSH);
            btn.setText("Button");                  
        }

    }

    @Override
    public void setFocus() {
        // TODO Auto-generated method stub

    }

}

enter image description here

最佳答案

GridLayout#marginHeightGridLayout#marginWidth 可以设置为 0 以移除边距。

在您的情况下,设置 NewCompositeGridLayout#marginTop 可能就足够了。

JavaDoc of GridLayout#marginHeight

像这样:

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

    Composite first = new Composite(shell, SWT.NONE);
    Composite second = new Composite(shell, SWT.NONE);

    GridLayout firstLayout = new GridLayout(1, false);
    first.setLayout(firstLayout);

    GridLayout secondLayout = new GridLayout(1, false);
    secondLayout.marginHeight = 0;
    secondLayout.marginWidth = 0;
    second.setLayout(secondLayout);

    Button firstButton = new Button(first, SWT.PUSH);
    firstButton.setText("Margin");
    Button secondButton = new Button(second, SWT.PUSH);
    secondButton.setText("No Margin");

    first.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    second.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    firstButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    secondButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

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

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

    display.dispose();
}

看起来像这样:

enter image description here

如果您想进一步减少复合 Material 之间的间距,您也可以将 GridLayout#verticalSpacing 设置为 0:

GridLayout layout = new GridLayout(1, false);
layout.verticalSpacing = 0;
shell.setLayout(layout);

看起来像这样:

enter image description here

关于java - SWT 从 Composite 中移除边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30514617/

相关文章:

java - 惯用的 Clojure 将资源从正在运行的 jar 复制到外部

html - 固定/不固定高度容器的基于 Div 和 CSS 的解决方案

asp.net-mvc-3 - 从另一个文件指定布局会产生编译错误(ASP.NET MVC3/Razor)

java - 如何在每个单元格的基础上右对齐 SWT 表格单元格中的文本

java - 如何为ListView中的每一项设置id

java - 在 Eclipse 中通过多次调用在单行上打印

java - 数组类在 Java 中如何工作?

php - yii 框架中的主题和布局

java - 根据切换状态禁用/启用工具栏菜单项

maven - swt 库无法解析