我在eclipse rcp中遇到了一些问题。我希望有一个对话框,向我展示一个MasterDetailBlock,用于管理主零件上表格中显示的任意数量的实体,以及详细部分中显示的相应DetailPages。截至目前,这是使用View完成的,但非模态对话框似乎更适合此。
首先,我尝试了从视图中获取代码并将其放入对话框的简单方法,由于视图和对话框创建之间的差异而进行了一些修改。但是,大多数控件都丢失了。在Google上搜索,eclipse论坛和Stackoverflow上没有为此提供解决方案。在检查这些网站以寻找解决方案之后,我尝试通过使用调试器逐步完成代码来了解发生了什么,但这对我也没有帮助。
以下代码应显示一个对话框,其中包含应显示按钮的部分。但是,它没有:
protected Control createDialogArea(Composite parent) {
parent.setLayout(new GridLayout(1, true));
Section section = toolkit.createSection(parent, ExpandableComposite.EXPANDED | ExpandableComposite.TITLE_BAR);
section.setLayout(new GridLayout());
section.setText("Section");
section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
Button test = toolkit.createButton(section, "test", SWT.PUSH);
test.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
test.setVisible(true);
section.computeSize(SWT.DEFAULT, SWT.DEFAULT);
return parent;
}
结果是:
但是,由于MasterDetailBlock需要表格,我也会提供此代码:
protected Control createDialogArea(Composite parent) {
parent.setLayout(new GridLayout(1, true));
form = new ScrolledForm(parent);
form.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
form.getBody().setLayout(new FillLayout());
Composite formComposite = toolkit.createComposite(form.getBody());
formComposite.setLayout(new GridLayout(1,true));
Section section = toolkit.createSection(formComposite, ExpandableComposite.EXPANDED | ExpandableComposite.TITLE_BAR);
section.setLayout(new GridLayout());
section.setText("Section");
section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
Button test = toolkit.createButton(section, "test", SWT.PUSH);
test.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
test.setVisible(true);
section.computeSize(SWT.DEFAULT, SWT.DEFAULT);
return parent;
}
只需稍微修改一下,就可以在对话框中添加一个表单,一切都在表单上。但是,结果如下所示:
我担心我会遗漏一些明显的东西。正如我所说,搜索并没有带来任何启发,并且踩过代码也没有帮助。我的最后一招“尝试看看会发生什么并尝试理解”并没有多大帮助,因为结果并没有改变已发布的结果。
那么,我会错过什么吗? (我认为是这样) 如果你能给我一个链接,告诉我什么是错的(或者你的经历中的任何东西),我会赞同这个。
感谢您的帮助。
答案 0 :(得分:0)
有一个
section.setClient(test);
丢失。此外,您在使用表格时应该这样,并且该部分是可扩展的:
protected final IExpansionListener expansionListener= new ExpansionAdapter()
{
/**
* {@inheritDoc}
*/
@Override
public void expansionStateChanged(ExpansionEvent e)
{
ScrolledForm form = ...; //your scrolled form goes here
form.layout(new Control[] {(ExpandableComposite) e.getSource()}, SWT.ALL | SWT.CHANGED);
form.reflow(true);
}
};
...
section.addExpansionListener(expansionListener);
您应该添加包含该按钮的test
,而不是按钮Composite
。每个部分只能有一个客户端。