我正在尝试做一些看起来应该很常见的事情,所以我很惊讶我很难找到解决方案。
我有一个简单的 Eclipse RCP 应用程序。它由一个视图组成,其中包含一个分层显示 xml 文件元素的 treeViewer。另一面是一个编辑器,它包含各种字段,例如文本框等,用于显示和修改 xml 值。treeviewer 在元素名称旁边显示图标,我要做的是在编辑器中进行更改时将图标更改为图标的“修改”版本 - 表示该元素的值已更改。这与 Eclipse 在与 subversion 集成时显示文件已从 Package Explorer 中的基本修订版修改后的方式非常相似。
我将尝试仅显示与此特定问题相关的代码部分,并希望我不会遗漏任何内容。这是编辑器类:
public class XmlEditor extends EditorPart
{
protected boolean dirty = false;
public void setDirty(boolean value)
{
dirty = value;
firePropertyChange(PROP_DIRTY);
}
}
这是树的视图:
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 的任何其他想法持开放态度,这似乎是当时最简单的方法。谢谢你。