Как сделать прокрутку вида в приложении Eclipse RCP? - PullRequest
6 голосов
/ 17 октября 2011

Что я пробовал до сих пор:

В createPartControl:

ScrolledComposite sc = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.H_SCROLL);
        sc.setLayoutData(new GridData(GridData.FILL_BOTH));
        sc.setExpandVertical(true);
        sc.setExpandHorizontal(true);
        sc.setSize(ApplicationWorkbenchWindowAdvisor.WIDTH, ApplicationWorkbenchWindowAdvisor.HEIGHT);
        final TabFolder tabFolder = new TabFolder(sc, SWT.TOP);

, но это не работает.Моя проблема в том, что если я изменю размер окна моей программы, полосы прокрутки не появятся в моем представлении.Есть идеи?

Ответы [ 3 ]

7 голосов
/ 17 октября 2011

Javadoc ScrolledComposite описывает два способа его использования, включая пример кода. Подводя их итог:

  1. Вы либо устанавливаете размер элемента управления / композита, содержащегося в вашем ScrolledComposite, на самом элементе управления / композита
  2. Или вы указываете ScrolledComposite минимальный размер, который следует использовать для его содержимого.

В настоящее время вы не делаете ни того, ни другого. Вы устанавливаете размер на ScrolledComposite, но если вы не используете менеджер макетов, это не имеет особого смысла. В любом случае, смотрите приведенную выше ссылку для некоторого официального примера кода.

6 голосов
/ 11 июля 2014

Как правило, в представлениях 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
    });
4 голосов
/ 12 сентября 2013

Это небольшой фрагмент кода, который работал для меня:

    ScrolledComposite sc = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
    Composite composite = new Composite(sc, SWT.NONE);
    sc.setContent(composite);

    Label lblRelation = new Label(composite, SWT.NONE);
    lblRelation.setBounds(10, 13, 74, 15);
    lblRelation.setText("Label name:");
    composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
...