您可以调用该TreeViewer
refresh()
方法以使其从模型中刷新整个树,或者refresh(Object)
从给定模型对象开始刷新树。
如果树结构没有改变,你可以调用update(Object)
来更新单个对象的显示。
add
当您从模型树中添加和删除对象时,还有一些remove
方法。
一些方法也有Object []
变体,因此您可以一次修改多个对象。
更新:
您的模型应该支持生成内容提供者可以收听的模型更改事件。您将在内容提供程序方法中设置此侦听器并在inputChanged
方法中将其删除dispose
。当收到模型更改事件时,使用各种TreeViewer
方法更新树。
如何使用所有这些的一个示例是 Eclipse 视图,它显示了工作空间中的文件(例如 Navigator 视图)。这些内容提供程序使用工作区资源更改侦听器 (IResourceChangeListener) 来通知工作区的更改,并使用事件中的信息调用我上面列出的方法来更新树。
更新 2:在内容提供程序中使用的示例IResourceChangeListener
,摘自org.eclipse.ui.views.tasklist.TaskListContentProvider
class TaskListContentProvider
implements IStructuredContentProvider, IResourceChangeListener
{
private TableViewer viewer;
private IResource input;
... other methods ....
public void dispose() {
if (input != null) {
input.getWorkspace().removeResourceChangeListener(this);
input = null;
}
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
if (input != null) {
input.getWorkspace().removeResourceChangeListener(this);
}
input = (IResource) newInput;
if (input != null) {
input.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);
}
viewer = (TableViewer) viewer;
}
public void resourceChanged(IResourceChangeEvent event) {
... use resource change event to update viewer
}
}