Как правило, в представлениях Eclipse, я хочу, чтобы мои элементы управления захватывали все доступное пространство и отображали только полосы прокрутки, если в противном случае элемент управления уменьшился бы ниже используемого размера.
Другие ответы совершенно верны, но я хотелчтобы добавить полный пример метода 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));
}
Обратите внимание, что .fillDefaults()
подразумевает .align(SWT.FILL, SWT.FILL)
.
Я обычно использую этот шаблон, поэтому я создалследующий маленький вспомогательный метод:
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;
}
Благодаря лямбда-выражениям Java 8 теперь вы можете создавать новые прокручиваемые композиты очень компактным способом:
createScrollable(container, composite -> {
composite.setLayout(new FillLayout());
// fill composite with controls
});