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

时间:2013-03-15 08:52:32

标签: java dialog eclipse-rcp

我在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;
}

结果是:

Result of above Code, the button "test" is missing

但是,由于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;
}

只需稍微修改一下,就可以在对话框中添加一个表单,一切都在表单上。但是,结果如下所示:

enter image description here

我担心我会遗漏一些明显的东西。正如我所说,搜索并没有带来任何启发,并且踩过代码也没有帮助。我的最后一招“尝试看看会发生什么并尝试理解”并没有多大帮助,因为结果并没有改变已发布的结果。

那么,我会错过什么吗? (我认为是这样) 如果你能给我一个链接,告诉我什么是错的(或者你的经历中的任何东西),我会赞同这个。

感谢您的帮助。

1 个答案:

答案 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。每个部分只能有一个客户端。