带有表单的Eclipse RCP视图不刷新

时间:2012-12-12 23:13:04

标签: eclipse eclipse-rcp rcp

我正在学习如何使用表单创建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中的表单擦除自身并使用每个新选择的新信息重绘,所以在ViewDetail的selectionChanged(IWorkbenchPart part, ISelection selection)函数中,我调用 form.dispose(); 擦除它,然后使用以下方法重新创建表单: form = toolkit.createScrolledForm(compParent); 然后我确定选择了什么类型的对象并相应地构建表单。

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

2 个答案:

答案 0 :(得分:0)

直接form.layout(true)

OR

您甚至可以尝试form.reflow()

修改

Further reading on the topic, here。阅读“倾听事件”部分。

答案 1 :(得分:0)

我能够通过调用以下方式重新绘制表格而不进行调整:

compParent.layout();

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