Usually in Eclipse views, I want my controls to grab all the available space and display only the scroll bars, if otherwise the control will be reduced below the allowable size.
Other answers are perfectly valid, but I would like to add a complete example of the createPartControl
method (Eclipse e4).
@PostConstruct public void createPartControl(Composite parent) { ScrolledComposite sc = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL); Composite composite = new Composite(sc, SWT.NONE); sc.setContent(composite); composite.setLayout(new GridLayout(2, false)); Label label = new Label(composite, SWT.NONE); label.setText("Foo"); Text text = new Text(composite, SWT.BORDER | SWT.WRAP | SWT.V_SCROLL | SWT.MULTI); GridDataFactory.fillDefaults().grab(true, true).hint(400, 400).applyTo(text); sc.setExpandHorizontal(true); sc.setExpandVertical(true); sc.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); }
Note that .fillDefaults()
implies .align(SWT.FILL, SWT.FILL)
.
I usually use this template, so I created the following small helper method:
public static ScrolledComposite createScrollable(Composite parent, Consumer<Composite> scrollableContentCreator) { ScrolledComposite sc = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); Composite composite = new Composite(sc, SWT.NONE); sc.setContent(composite); scrollableContentCreator.accept(composite); sc.setExpandHorizontal(true); sc.setExpandVertical(true); sc.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); return sc; }
Thanks to Java 8 lambdas, you can now implement new scrollable composites in a very compact way:
createScrollable(container, composite -> { composite.setLayout(new FillLayout());
source share