0

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

只需通过向对话框添加一个表单进行轻微修改,所有内容都会在表单上进行。但是,结果如下所示:

在此处输入图像描述

恐怕我在这里遗漏了一些明显的东西。正如我所说,搜索并没有带来任何启发,单步执行代码也无济于事。我最后的手段“尝试一些东西看看会发生什么并试图理解它”并没有太大帮助,因为结果与已经发布的结果并没有什么不同。

那么,我错过了什么吗?(我认为是这样)如果您可以向我提供一个链接以向我展示问题所在(或者您的经验中的任何内容),我会对此表示赞赏。

感谢您的帮助。

4

1 回答 1

0

有一个

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包含该按钮的按钮,而不是按钮。每个部分只能有一个客户。

于 2013-03-15T11:47:50.837 回答