继上一篇视图界面搭好以后,开始着手视图界面控件点击实现跳转到对应编辑器指定行数的需求。刚开始看到这个需求的时候觉得很简单,应该直接调用封装好的gotoLine或者LinkToLine类似的方法就好,而我只要找到对应的这个方法就可以完美解决了。但是在实践中并不是很完美,作为新手,目前我对org.eclipse.ui中的扩展点也就上篇的几个比较熟悉,所以只能老老实实去Eclipse官网中的API文档寻找合适的扩展点。现总结如下,希望可以帮助到同在路上的伙伴,也希望有机会能一起学习讨论。
这边先介绍一下,如果想跳转到对应的行数,这边其实就是使光标移动到对应位置(光标是一个比较合适的关键字)。同时想实现该功能,首先需要着重先了解一下IEditorPart、ITextEditor、IDocument这三个点(比较推荐看Eclipse中的API查看)。
在了解以上三个点时,ITextEditor提供了一个selectAndReveal的方法,官网API具体解释如图所示:
这边贴一下相关代码:
IEditorReference[] editorReferences = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences();
if (editorReferences.length > 0) {
for(int i = 0;i<editorReferences.length;i++) {
IEditorPart tp = editorReferences[i].getEditor(true);
ITextEditor edt = (ITextEditor) tp.getAdapter(ITextEditor.class);
IDocumentProvider provider=edt.getDocumentProvider();
IDocument document=provider.getDocument(tp.getEditorInput());
if(i==1) {
//选择并显示指定的范围
//edt.selectAndReveal(10, 30);//10表示从偏移量10开始选择,长度为30
//改变光标位置到31行(无论当前编辑器可见不可见都有效)
edt.selectAndReveal(document.getLineOffset(30),0);
}
}
}
扩展几个个人觉得使用频率较高的点:
(1)获取编辑器的源码
String sourceStr = document.get().toString();
(2)替换相关代码
document.replace(int offset, int length, String replaceWord);
(3)获取当前编辑器名称
String titleStr = edt.getTitle();
(4)设置编辑器可见
目前实践了setFocus方法无效,看有些文章是使用了EditorPart的setActiveEditor(currentEditor)来将当前的编辑器设置成活动编辑器的(该方法是在IEditorPart中不存在的,API文档中也没有提及),多方实践后下面代码可以实现我想要的效果,如果有更好的方法,希望留言呀^-^
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showEditor(editorReferences[i]);