Я пытаюсь создать форму Eclipse, которая имеет три складных секции, один фиксированный размер и два других, которые должны захватывать все оставшееся вертикальное пространство в окне редактора так, чтобы, когда одна из нижних секций была сложена, другая один будет заполнять все доступное пространство.
Я прочитал формуляр , перепробовал множество вариантов grabExcessVerticalSpace
и SWT.FILL
и почти все, что может предложить GridData для разделов, но безуспешно. Я также пытался вкладывать клиентов секции в композиты, которые бы grabExcess...Space
, но это тоже не помогает. Вызов layout()
не помогает, форма перекомпоновывается при сложении разделов, а складывание первого раздела работает нормально.
Вот код для формы с тремя секциями, но в которой две нижние секции в сложенном виде отдают только крошечную часть своего пространства, а не всю, как хотелось бы:
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.SectionPart;
import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.forms.editor.FormPage;
import org.eclipse.ui.forms.events.ExpansionAdapter;
import org.eclipse.ui.forms.events.ExpansionEvent;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;
public class SectionFormPage extends FormPage {
private IManagedForm managedForm;
public SectionFormPage(FormEditor editor) {
super(editor, "sectionEditor", "title");
}
protected void createFormContent(IManagedForm managedForm) {
this.managedForm = managedForm;
FormToolkit toolkit = managedForm.getToolkit();
Composite body = managedForm.getForm().getBody();
body.setLayout(new GridLayout());
createSectionWithButton(toolkit, body, new GridData(SWT.FILL, SWT.FILL, true, false));
createSectionWithButton(toolkit, body, new GridData(SWT.FILL, SWT.FILL, true, true));
createSectionWithButton(toolkit, body, new GridData(SWT.FILL, SWT.FILL, true, true));
body.layout();
}
private void createSectionWithButton(FormToolkit toolkit, final Composite body, final GridData layoutData) {
Section section = createSection(toolkit, body, "Section");
section.setLayoutData(layoutData);
section.setClient(toolkit.createButton(section, "button", SWT.NONE));
}
private Section createSection(final FormToolkit toolkit, final Composite body, String title) {
Section section = toolkit.createSection(body, Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
section.setText(title);
managedForm.addPart(new SectionPart(section));
section.addExpansionListener(new ExpansionAdapter() {
public void expansionStateChanged(ExpansionEvent e) {
managedForm.reflow(true);
}
});
return section;
}
}
Есть указатели? Где должен быть указан этот макет для Разделов, их родителей или Клиентов? Заранее спасибо!