[英]Eclipse RCP: Controls not visible in dialog
我在eclipse rcp中的对话框遇到了一些麻烦。 我希望有一个对话框,向我显示一个MasterDetailBlock来管理主部件上的表中显示的任意数量的实体,并在明细部分中显示它们对应的DetailPages。 到目前为止,这是使用“视图”完成的,但非模式对话框似乎更适合此操作。
最初,我尝试了仅从视图中获取代码并将其放入对话框的天真方法,由于视图和对话框创建之间的差异,进行了一些修改。 但是,大多数控件都丢失了。 在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;
}
只需在对话框中添加一个表单就可以对它进行一点修改,然后一切都将在表单上进行。 但是,结果看起来像这样:
恐怕我这里缺少明显的东西。 就像我说的那样,搜索没有任何启发,单步执行代码也无济于事。 我的最后一招“尝试看清楚发生的事情并试图理解这一点”并没有太大帮助,因为结果与已发布的结果没有变化。
所以,我想念什么吗? (我想是这样的)如果您可以提供一个链接以向我显示错误的内容(或您的经验中的任何内容),我也可以采用。
谢谢您的帮助。
有一个
section.setClient(test);
失踪。 此外,在使用Form时,您应该具有以下内容,并且该部分是可扩展的:
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
。 每个部分只能有一个客户。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.