hvr*_*hal 3 java eclipse user-interface swt eclipse-rcp
我正在尝试创建一个Eclipse Form,它有三个可折叠部分,一个固定大小,另外两个应该抓住编辑器窗口中所有剩余的垂直空间,这样,当其中一个底部折叠时,另一个将填充所有可用空间.
我已阅读形式的文章,尝试了许多变化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;
}
}
Run Code Online (Sandbox Code Playgroud)
有什么指针吗?对于章节或其父母或客户,甚至应该指定哪种布局?先谢谢!
我终于让一位同事看了这个,我们一起找到了一个解决方案,诀窍就是简单地修改一下GridData而不是 grabExcessVerticalSpace当折叠部分时:
private void createSectionWithButton(FormToolkit toolkit, final Composite body, final GridData layoutData) {
final Section section = createSection(toolkit, body, "Section", layoutData.grabExcessVerticalSpace);
section.setLayoutData(layoutData);
section.setClient(toolkit.createButton(section, "button", SWT.NONE));
}
private Section createSection(final FormToolkit toolkit, final Composite body, String title,
boolean shouldGiveUpVerticalSpaceWhenFolded) {
final Section section = toolkit.createSection(body, Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
section.setText(title);
managedForm.addPart(new SectionPart(section));
if (shouldGiveUpVerticalSpaceWhenFolded) {
section.addExpansionListener(new ExpansionAdapter() {
public void expansionStateChanged(ExpansionEvent e) {
GridData gridData = (GridData) section.getLayoutData();
gridData.grabExcessVerticalSpace = e.getState();
}
});
}
section.addExpansionListener(new ExpansionAdapter() {
public void expansionStateChanged(ExpansionEvent e) {
managedForm.reflow(true);
}
});
return section;
}
Run Code Online (Sandbox Code Playgroud)
我只是坚持我的想法,必须有可能以某种方式定义这个布局.我仍然有兴趣知道它是不是.
| 归档时间: |
|
| 查看次数: |
5516 次 |
| 最近记录: |