我試圖做一些看起來應該很常見的事情,所以我很驚訝我很難找到解決方案。當編輯器數據被修改時,Eclipse RCP視圖不會更新
我有一個簡單的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的其他想法,它似乎是當時最簡單的方法。謝謝。
如果這是一個選擇的情況下,很容易上鉤的編輯和查看在一起,因爲你可以指定PARTID在.addSelectionListener()調用的第一個參數。出於某種原因,該選項對於.addPropertyChangeListener()函數不存在,唯一的參數是針對偵聽器本身。我之所以這樣想,可能是一個PropertyChangeEvent被觸發時,可能會被註冊自己的應用程序中的任何監聽器聽到。這似乎並非如此。那麼你如何建議視圖被寫入正確地聽這個propertyChange? – JasonK
對於這種更新,屬性更改太大。你想要更細粒度的東西,那就意味着要自己設置它。 – nitind
爲什麼房產更改「太大」?我願意接受其他關於如何實現這一點的建議。如果你有更好的想法,我會非常欣賞一個例子。 – JasonK