java - 修改编辑器数据时,Eclipse RCP View 不会更新

标签 java eclipse eclipse-plugin eclipse-rcp rcp

我正在尝试做一些看起来应该很常见的事情,所以我很惊讶我很难找到解决方案。

我有一个简单的 Eclipse RCP 应用程序。它由一个 View 组成,其中包含一个分层显示 xml 文件元素的 treeViewer。另一面是一个编辑器,其中包含各种字段,例如文本框等,用于显示和修改 xml 值。树查看器在元素名称旁边显示图标,而我要做的是在编辑器中进行更改时将图标更改为图标的“修改”版本 - 表示该元素的值已更改。这与 Eclipse 在与 Subversion 集成时如何显示文件已从 Package Explorer 中的基本修订版进行了修改非常相似。

我将尝试仅显示与此特定问题相关的代码部分,希望我不会遗漏任何内容。这是编辑器类:

public class XmlEditor extends EditorPart
{
    protected boolean dirty = false;

    public void setDirty(boolean value)
    {
        dirty = value;
        firePropertyChange(PROP_DIRTY);
    }
}

这是树的 View :

public class TreeView extends ViewPart implements IPropertyChangeListener {
    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());

        PlatformUI.getWorkbench().getWorkingSetManager().addPropertyChangeListener(this);
    }

    public void propertyChange(PropertyChangeEvent event) {
        if (event.getProperty().equals(IWorkbenchPartConstants.PROP_DIRTY)) {
            treeViewer.refresh();
        }
    }
}

在这种情况下,TreeView::propertyChange() 没有被调用,即使 firePropertyChange() 被触发。任何想法为什么?我也对不涉及 PropertyChangeListener 的任何其他想法持开放态度,这似乎是当时最简单的方法。谢谢。

最佳答案

这是我最终解决问题的方式:

  1. 更改了 TreeView 以实现 IPropertyListener 而不是 IPropertyChangeListener
  2. 实现了 propertyChanged() 方法来执行 treeViewer.refresh()
  3. XmlEditor::createPartControl() 方法中,我获得了对 Treeview 部分的引用,然后将其添加到属性监听器中,如下所示:
    • TreeView treeView = (TreeView) getSite().getPage().findView(TreeView.ID);
    • addPropertyListener(treeView);

现在,TreeView::propertyChanged()firePropertyChanged() 之后被调用,就像我需要的那样。需要大量实验才能了解 IPropertyListenerIPropertyChangeListeneraddPropertyListener()addPartPropertyListener() 之间的区别>.

感谢 nitind 给了我一个新的视角,并向我展示了装饰器,这绝对是正确的方法,而不是将 TreeMap 标更改为修改后的版本。

关于java - 修改编辑器数据时,Eclipse RCP View 不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16095237/

相关文章:

java - 附加调试后 Eclipse 是只读的

eclipse - Gradle Build配置帮助-Eclipse Oxygen

java - Eclipse插件开发: multipage editor with html extension

java - 使用im4java画一个圆

java - 错误: Non-static variable super cannot be referenced from a static context >>but i use static keyword

java - 在 Eclipse 中显示项目依赖关系

eclipse-plugin - 我如何使用 "org.eclipse.debug.ui.launchShortcuts"?

java - Android - JSONException 没有值(value)

java - @Async 在 Spring Boot 应用程序中给我错误

java - 无法实例化接收器 GCMBroadcastReceiver