【问题标题】:Eclipse RCP View with form does not refresh带有表单的 Eclipse RCP 视图不刷新
【发布时间】:2012-12-12 23:13:03
【问题描述】:

我正在学习如何使用表单创建一个 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(); 但这似乎没有帮助。关于接下来要尝试什么的任何想法?

【问题讨论】:

    标签: eclipse eclipse-rcp rcp


    【解决方案1】:

    直接做form.layout(true)。

    或

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

    编辑:

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

    【讨论】:

    • 我尝试了这些建议,但它们都不起作用。您共享的链接很有趣,但我认为我的问题在于我如何使用 Eclipse Forms,并且文章没有提及它们。我的代码的选择和聆听部分工作正常 - 我遇到的问题是细节视图没有绘制在选择上。只有在调整窗口大小时才会显示表单。
    • 调整窗口大小时,会在表单上触发重排。这就是为什么我的第一个反应是进行回流……你见过这个ralfebert.de/blog/eclipsercp/rcp_examples 吗?我认为这些示例与您的非常相似。
    • 我已经看到你之前提到的那个链接 - 它有一些与我正在做的非常相似的优秀示例,但不幸的是这些示例似乎不适用于 Eclipse 3.7(或更高版本)而且我看到的所有示例都没有使用 Eclipse Forms。我开始认为那里没有太多关于 Eclipse Forms 的信息,因为它们不能很好地工作......
    【解决方案2】:

    我能够通过调用使表单重绘而无需调整大小:

    compParent.layout();
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      • 2020-11-13
      • 1970-01-01
      相关资源
      最近更新 更多