Eclipse 如何在文件保存时更新decorator?

Eclipse 如何在文件保存时更新decorator?,eclipse,eclipse-plugin,eclipse-rcp,decorator,Eclipse,Eclipse Plugin,Eclipse Rcp,Decorator,我用decorator创建了一个插件,它将当前文件作为输入,并显示适当的decorator 这工作得很好,当eclipse第一次加载时,decorator会正确显示 但是,当文件更改时,装饰器不会更新 如何在每次修改文件时更新decorator?i、 如何在文件保存事件中更新decorator 这是示例代码 公共类装饰器实现ILightWeightLabelCorator{ 私有最终ImageDescriptor Overla1=AbstractUIPlugin.imageDescriptorF

我用decorator创建了一个插件,它将当前文件作为输入,并显示适当的decorator

这工作得很好,当eclipse第一次加载时,decorator会正确显示

但是,当文件更改时,装饰器不会更新

如何在每次修改文件时更新decorator?i、 如何在文件保存事件中更新decorator

这是示例代码

公共类装饰器实现ILightWeightLabelCorator{
私有最终ImageDescriptor Overla1=AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID,“icons/1.png”);
私有最终ImageDescriptor OVERLAY2=AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID,“icons/2.png”);
/*
*(非Javadoc)
*
*@see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
*/
@凌驾
公共void addListener(ILabelProviderListener侦听器){
//TODO自动生成的方法存根
//IResourceChangeEvent.POST\u更改
}
/*
*(非Javadoc)
*
*@see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
*/
@凌驾
公共空间处置(){
//TODO自动生成的方法存根
}
/*
*(非Javadoc)
*
*@see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,java.lang.String)
*/
@凌驾
公共布尔isLabelProperty(对象元素、字符串属性){
//TODO自动生成的方法存根
返回false;
}
/*
*(非Javadoc)
*
*@see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
*/
@凌驾
公共void RemovelListener(ILabelProviderListener侦听器){
//TODO自动生成的方法存根
}
/*
*(非Javadoc)
*
*@see org.eclipse.jface.viewers.ILightweightLabelDecorator#decoration(java.lang.Object,org.eclipse.jface.viewers.IDecoration)
*/
@凌驾
公共空间装饰(对象元素、创意装饰){
如果(某些条件)
装饰。添加覆盖层(覆盖层1);
其他的
装饰。添加覆盖层(覆盖层2);
}
}

您可以要求
IDecoratorManager
使用以下方法更新具有特定id的装饰:

IDecoratorManager decoratorManager=PlatformUI.getWorkbench().getDecoratorManager();
decoratorManager.update(“decoratorid”);
要在文件保存时执行此操作,您必须使用
IResourceChangeListener
来侦听工作区资源更改,并在看到文件更改时做出反应

使用以下内容设置侦听器:

ResourcesPlugin.getWorkspace().addResourceChangeListener(listener);
IResourceChangeListener
中,您可以执行以下操作:

public void resourceChanged(IResourceChangeEvent事件){
IResourceDelta=event.getDelta();
IResourceDelta fileDelta=delta.findMember(您感兴趣的文件的IPath);
if(fileDelta!=null){
//如何处理三角洲
}
}

通过将
ResourcesPlugin.getWorkspace().addResourceChangeListener(listener)
添加到
addListener(ILabelProviderListener)
ILightWeightDecorator的方法来设置listener是否合适?设置侦听器的其他过程是什么?您可以在decorator构造函数中添加它(并在dispose方法中删除它)。