2

我正在学习如何创建一个带有表单的 Eclipse RCP 应用程序,并且我正在构建一个我需要做的简单原型。我在 Windows x64 平台上使用 64 位 Eclipse 3.7 和 Java 1.7。

我正在尝试做的是相当标准的:应用程序左侧的视图包含一棵树 ( ViewTree),右侧的视图 ( ViewDetail) 使用 Eclipse 表单来呈现有关树选择的详细信息。我设置ViewTree为选择提供者,并ViewDetail设置为收听ViewTree. 我想ViewDetail用每一个新的树选择来刷新自己。

以下是相关代码ViewTree

public class ViewTree extends ViewPart
{
    private TreeViewer treeViewer;

    public ViewTree() {
        super();
    }

    @Override
    public void createPartControl(Composite parent) {
        treeViewer = new TreeViewer(parent, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
        getSite().setSelectionProvider(treeViewer);
        treeViewer.setLabelProvider(new TreeObjLabelProvider());
        treeViewer.setContentProvider(new TreeObjContentProvider());
    }

以下是相关代码ViewDetail

public class ViewDetail extends ViewPart implements ISelectionListener 
{
    private FormToolkit toolkit;
    private ScrolledForm form;
    private Composite compParent;

    public ViewDetail() {}

    @Override
    public void createPartControl(Composite parent) {
        toolkit = new FormToolkit(parent.getDisplay());
        form = toolkit.createScrolledForm(parent);
        compParent = parent;
        // register as a selection listener with the workbench
        getSite().getPage().addSelectionListener(ViewTree.ID, (ISelectionListener) this);
    }

因为我希望表单ViewDetail擦除自身并为每个新选择重新绘制新信息,所以在selectionChanged(IWorkbenchPart part, ISelection selection)ViewDetail 的函数中,我调用 form.dispose(); 擦除它,然后使用以下方法重新创建表单: form = toolkit.createScrolledForm(compParent); 然后确定已选择的对象类型并构建相应的形式。

问题是,一旦我在树中选择了一个对象,我的表单就会被处理掉并且ViewDetail变成空白。在调整窗口大小之前,视图中不会显示任何内容。构建表单后,我尝试通过调用来刷新它: form.getBody().layout(); 但这似乎没有帮助。关于接下来要尝试什么的任何想法?

4

2 回答 2

0

通过调用,我能够在不调整大小的情况下重绘表单:

compParent.layout();

所以我在布局命令的正确轨道上,我只需要在顶层调用它 - 父复合体,而不是表单,它是父复合体的子级。感谢@GGeorge 的帮助。

于 2012-12-13T22:10:58.507 回答
0

直接做form.layout(true)

或者

你甚至可以试试form.reflow()

编辑:

有关该主题的进一步阅读,请点击此处。阅读“监听事件”部分。

于 2012-12-12T23:19:01.490 回答