Java 如何以编程方式打开启用编辑功能的eclipse比较编辑器?
我试图使用eclipse比较编辑器(org.eclipse.compare)来比较两个文件。比较编辑器打开并显示差异。但在比较编辑器中未启用任何编辑或合并。首先,我准备输入并调用Java 如何以编程方式打开启用编辑功能的eclipse比较编辑器?,java,eclipse,compare,editor,filecompare,Java,Eclipse,Compare,Editor,Filecompare,我试图使用eclipse比较编辑器(org.eclipse.compare)来比较两个文件。比较编辑器打开并显示差异。但在比较编辑器中未启用任何编辑或合并。首先,我准备输入并调用CompareUI.openCompareEditor(输入) 这将打开eclipse比较编辑器,如屏幕截图()所示,但无法在比较编辑器中编辑(不允许添加或删除任何字符)左侧文件或右侧文件。如屏幕截图所示,“从左向右复制更改”和“从右向左复制更改”按钮也被禁用 如何在此编辑器中启用编辑功能?查看源代码,内容查看器必须是扩
CompareUI.openCompareEditor(输入)
这将打开eclipse比较编辑器,如屏幕截图()所示,但无法在比较编辑器中编辑(不允许添加或删除任何字符)左侧文件或右侧文件。如屏幕截图所示,“从左向右复制更改”和“从右向左复制更改”按钮也被禁用
如何在此编辑器中启用编辑功能?查看源代码,内容查看器必须是扩展了
ContentMergeViewer
的内容,而不仅仅是ContentViewer
,例如textmmergeviewer
。如何确定这一点很复杂,请看CompareUIPlugin.findContentViewerDescriptor
@greg-449在我的案例中,我没有实现ContentViewer。我认为内容视图总是由比较编辑器在内部使用。ITypedElements决定使用哪一个。@greg-449那么我如何使它工作呢?我可以做什么改变谢谢我不知道,我很久没有使用比较编辑器了。尝试调试FindContentViewDescriptor调用。
public class CompareItem implements IStreamContentAccessor, ITypedElement, IModificationDate {
private File content;
private long modifiedDate;
private String fileName;
public CompareItem(File left, long lastModified, String name) {
content = left;
modifiedDate = lastModified;
fileName = name;
}
@Override
public long getModificationDate() {
return modifiedDate;
}
@Override
public String getName() {
return fileName;
}
@Override
public String getType() {
return "JAVA";
}
@Override
public InputStream getContents() {
try {
return new FileInputStream(content);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return null;
}
@Override
public Image getImage() {
return null;
}
}
public class CompareInput extends CompareEditorInput {
public CompareInput() {
super(new CompareConfiguration());
}
protected Object prepareInput(IProgressMonitor pm) {
File file1 = new File("D:\\hello.txt");
File file2 = new File("D:\\hello2.txt");
CompareItem ancestor =
new CompareItem(file1, file1.lastModified(), file1.getName());
CompareItem left =
new CompareItem(file1, file1.lastModified(), file1.getName());
CompareItem right =
new CompareItem(file2, file2.lastModified(), file2.getName());
return new DiffNode(Differencer.CHANGE, ancestor, left, right);
}
}
public class SampleHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
CompareInput input = new CompareInput();
CompareConfiguration compareConfiguration = input.getCompareConfiguration();
compareConfiguration.setLeftEditable(true);
compareConfiguration.setRightEditable(true);
CompareUI.openCompareEditor(input);
return null;
}
}