Tirmean Tirmean - 1 year ago 108
Java Question

SWT removing margin from Composite

When I embedding

control inside
, a vertical margin/padding is added between textbox and button (button is part of another Composite) , as seen on attached picture.

How can I remove it?

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

public void createPartControl(Composite parent) {

GridLayout layout = new GridLayout(1, false);

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

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

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

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


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



enter image description here

Baz Baz
Answer Source

GridLayout#marginHeight and GridLayout#marginWidth can be set to 0 to remove margins.

In your case setting GridLayout#marginTop of the NewComposite may be sufficient.

JavaDoc of GridLayout#marginHeight

Like this:

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

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

    Button firstButton = new Button(first, SWT.PUSH);
    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));


    while (!shell.isDisposed()) {
        if (!display.readAndDispatch())


Looks like this:

enter image description here

If you want to reduce the spacing between the composites further, you can set the GridLayout#verticalSpacing to 0 as well:

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

Which will look like this:

enter image description here

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download