かなり一般的なはずのことをやろうとしているのですが、解決策を見つけるのに苦労していることに驚いています。
私は単純な Eclipse RCP アプリケーションを持っています。これは、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);
}
}
そして、これはツリーのビューです:
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 を含まない他のアイデアにもオープンです。当時はこれが最も簡単な方法のように思えました。ありがとうございました。