When I embedding Composite control inside ViewPart, 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);
        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
    }
}

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);
    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();
}
Looks like this:

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;
shell.setLayout(layout);
Which will look like this:

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With