Tipicamente nelle viste Eclipse, voglio che i miei controlli per afferrare tutto lo spazio disponibile, e solo mostrare le barre di scorrimento, se altrimenti un controllo verrebbe ridotto al di sotto una dimensione utilizzabile
Le altre risposte sono perfettamente valide, ma volevo aggiungere un esempio completo di un metodo 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));
}
Nota che .fillDefaults()
implica .align(SWT.FILL, SWT.FILL)
.
Io comunemente uso questo modello, così ho creato il seguente metodo piccolo aiutante:
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;
}
Grazie a Java 8 lambda, è ora possibile implementare nuovi compositi scorrevole in un modo molto compatto:
createScrollable(container, composite -> {
composite.setLayout(new FillLayout());
// fill composite with controls
});
fonte
2014-07-11 12:48:35
Grazie mille! Ora ho imparato a controllare SEMPRE javadoc prima di fare domande stupide ... –