繁体   English   中英

Eclipse RCP:控件在对话框中不可见

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM