Normalmente, en vistas de Eclipse, quiero que mis controles para agarrar todo el espacio disponible, y sólo muestran las barras de desplazamiento, si de otro modo un control se reduciría por debajo un tamaño utilizable.
Las otras respuestas son perfectamente válidas, pero quería agregar un ejemplo completo de un método createPartControl
(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));
}
Tenga en cuenta que .fillDefaults()
implica .align(SWT.FILL, SWT.FILL)
.
comúnmente utilizo este patrón, así que creé el siguiente método poco de ayuda:
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;
}
Gracias a Java 8 lambdas, ahora se puede poner en práctica nuevos compuestos desplazables de una manera muy compacta:
createScrollable(container, composite -> {
composite.setLayout(new FillLayout());
// fill composite with controls
});
¡Muchas gracias! Ahora aprendí SIEMPRE a verificar javadoc antes de hacer preguntas estúpidas ... –