Java 更改CommandStack时保存
这可能是一个非常简单的新手问题,但我已经有两天没法回答了,所以我会在这里回答。我的范围:我有一个带有一些图形编辑器(EditorPart的扩展)的RCP应用程序。在我的编辑器中,我希望捕获任何更改并直接保存它们。为此,我抓住了我的CommandStack被更改的时刻,并启动了一个doSave方法。问题是我的save方法调用了一个CommadStack change事件,如果我跳过这个调用,我的更改就会被保存,但是我的编辑器仍然有一个脏标志。我希望的行为是脏旗消失(就像正常的保存行为一样)。Java 更改CommandStack时保存,java,eclipse-rcp,eclipse-gef,Java,Eclipse Rcp,Eclipse Gef,这可能是一个非常简单的新手问题,但我已经有两天没法回答了,所以我会在这里回答。我的范围:我有一个带有一些图形编辑器(EditorPart的扩展)的RCP应用程序。在我的编辑器中,我希望捕获任何更改并直接保存它们。为此,我抓住了我的CommandStack被更改的时刻,并启动了一个doSave方法。问题是我的save方法调用了一个CommadStack change事件,如果我跳过这个调用,我的更改就会被保存,但是我的编辑器仍然有一个脏标志。我希望的行为是脏旗消失(就像正常的保存行为一样)。 下面
下面是我的CommandStack更改和doSave方法。你能帮帮我吗
@Override
public void commandStackChanged(EventObject event) {
firePropertyChange(IEditorPart.PROP_DIRTY);
doSave(null);
setDirty(false);
}
public void doSave(final IProgressMonitor progressMonitor) {
editorSaving = true;
SafeRunner.run(new SafeRunnable() {
public void run() throws Exception {
IFile targetFile = getFile();
List<GraphicalEditPart> editParts = DiagramUtil.getAllEditParts(NetEditor.this);
Rectangle offsetBounds = DiagramUtil.getBounds(editParts);
saveDiagramProperties();
List<INetTransition> transitionsToExpand = saveSubdiagramGroups();
FileUtil.saveDiagram(getNetDiagram(), targetFile,
NetEditor.this);
getCommandStack().markSaveLocation();
for (INetTransition trans : transitionsToExpand) {
trans.setExpanded(true);
}
}
});
setDirty(false);
editorSaving = false;
}
@覆盖
public void commandStackChanged(EventObject事件){
防火性能变化(部件部件变脏);
doSave(空);
setDirty(假);
}
public void doSave(最终IProgressMonitor进程监视器){
编辑保存=真;
SafeRunner.run(新的SafeRunnable(){
public void run()引发异常{
IFile targetFile=getFile();
List editParts=DiagramUtil.getAllEditParts(NetEditor.this);
矩形偏移边界=DiagramUtil.getBounds(editParts);
savediagramproperty();
List transitionsToExpand=saveSubdiagramGroups();
FileUtil.saveDiagram(getNetDiagram(),targetFile,
NetEditor.this);
getCommandStack().markSaveLocation();
for(inetransition trans:transitionsToExpand){
trans.setExpanded(真);
}
}
});
setDirty(假);
编辑保存=假;
}
使用getCommandStack().markSaveLocation()我再次调用commandStackChanged并进入循环。我怎样才能解决这个问题?没有它,我的编辑器在保存后仍然是脏的
感谢并问候,
Jeff将IPropertyListener添加到编辑器中,然后收听IEditorPart.PROP\u DIRTY。对于侦听器实现,如果编辑器脏,则执行保存,否则不执行任何操作