Eclipse plugin开发 —实现文本内容帮助
2013-02-28 08:38
274 查看
在http://blog.sina.com.cn/s/blog_40585f8d010009lw.html看到一篇文章,但是程序不完整,特此做一些修改:
大家在使用Eclipse编写Java代码的时候,一定被Java代码编辑器的强大功能所吸引:出色的错误提示,准确的内容帮助,文本的折叠等等。今天我以Eclipse插件中的XML Editor例子作为模板,为XML文本编辑器加入内容帮助(Content Assis)。
1.内容帮助简介
在目前流行的IDE中,内容提示帮助是必不可少的功能,可以说,如果没有了内容帮助,那IDE就不能称为IDE。有了内容帮助提示,能大大提高代码编写速度。
请看下图:当我们在Java编辑器中输入‘.’的时候,就会弹出一个菜单,里面列出了类所具有的方法以及属性,并且在我们继续输入字符的时候,弹出的内容会随着我们的输入进行过滤。
下面我们以Eclipse的XML Editor Example为例,介绍一下内容帮助如何实现的。
2.创建XML Editor
我们首先需要建立一个Plugin工程,然后在向导页中选择我们要生成的XML Editor例子:
点Finish完成,这时候我们的工程便生成了,并且向导还为我们生成了XML Editor所需要的一些类,以及为我们的Plugin.xml实现了org.eclipse.ui.editors扩展点:
3.简单的内容帮助
在我们生成的类中,有一个名为XMLConfiguration的类,该类对XML Editor进行了一些设置,包括如何去为不同的文本区域显示不同的颜色等,TextEditor所维护的SourceViewer就是通过它来进行设置的,但这不是我们所要讨论的范围,这里简单地介绍一下即可。
接下来我们需要复写XMLConfiguration的一个方法:getContentAssistant。这个方法便是告诉我们的编辑器,我们所具有的内容帮助是什么,在创建XML Editor的时候,默认是不为我们生成这方面代码的,所以我们需要自己复写:
public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
// 生成一个ContentAssistant
ContentAssistant assistant = new ContentAssistant();
// 设置帮组内容弹出响应时间
assistant.setAutoActivationDelay( 200 );
assistant.enableAutoActivation( true );
return assistant;
}
ContentAssistant并不是内容帮助的提供者,它只是维护我们的内容帮助,帮我们弹出菜单以及帮助内容信息等作用。
真正告诉ContentAssistant要显示那些帮助内容的,是IContentAssistProcessor接口类。让我们创建一个名为StrutsContentAssisProcessor的类,并让它实现IContentAssistProcessor接口:
public class StrutsContentAssisProcessor implements IContentAssistProcessor {
public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer,
int offset) {
return null;
}
public IContextInformation[] computeContextInformation(ITextViewer viewer,
int offset) {
return null;
}
public char[] getCompletionProposalAutoActivationCharacters() {
return null;
}
public char[] getContextInformationAutoActivationCharacters() {
return null;
}
public String getErrorMessage() {
return null;
}
public IContextInformationValidator getContextInformationValidator() {
return null;
}
}
大家注意下computeCompletionProposals方法,这个方法便是返回我们的具体内容帮助。所以我们需要为我们的编辑器创建所需要的内容帮助:CompletionProposal
先看一下这个类的构造函数各个参数的含义:
* @param replacementString :选择帮助信息后所要替代的文本内容
* @param replacementOffset :替代内容输入的位置
* @param replacementLength :替代文本覆盖原来文本的长度
* @param cursorPosition :完成内容帮助的文本替代后,光标所在位置
* @param image :帮助内容显示的图标
* @param displayString :帮助内容的显示字符串
* @param contextInformation :帮助内容的信息描述
* @param additionalProposalInfo :附加信息
在这几个参数中image 、contextInformation、additionalProposalInfo我们可以设置为空。现在让我们在computeCompletionProposals生成我们的帮助内容:
public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer,
int offset) {
ICompletionProposal[] proposals = new ICompletionProposal[2];
proposals[0] = new CompletionProposal("替换文本1", offset, 0, new String("替换文本1").length(), null, "帮组内容1", null,null) ;
proposals[1] = new CompletionProposal("替换文本2", offset, 0, new String("替换文本2").length(), null, "帮组内容2", null,null) ;
return proposals;
}
computeCompletionProposals输入的参数中 offset是指当内容帮助弹出的时候,文本编辑器光标所在位置。
大家都知道,帮助内容弹出的时候是需要一定条件的,也就是当我们输入了激活内容帮助的字符的时候,它便会弹出来。IContentAssistProcessor 的getCompletionProposalAutoActivationCharacters方法便是让我们返回激活帮助内容字符的,假设当我们输入了‘<’时,弹出帮助内容:
public char[] getCompletionProposalAutoActivationCharacters() {
return new String("<").toCharArray();
}
好了,我们的第一步已经完成了,接下来就是在ContentAssis对象中设置我们所要返回的内容帮助。
返回到XMLConfiguration的getContentAssistant方法:
public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
// 生成一个ContentAssistant
ContentAssistant assistant = new ContentAssistant();
// 设置帮组内容弹出响应时间
assistant.setAutoActivationDelay( 200 );
assistant.enableAutoActivation( true );
assistant.setContentAssistProcessor(new StrutsContentAssisProcessor(), IDocument.DEFAULT_CONTENT_TYPE);
return assistant;
}
大家在使用Eclipse编写Java代码的时候,一定被Java代码编辑器的强大功能所吸引:出色的错误提示,准确的内容帮助,文本的折叠等等。今天我以Eclipse插件中的XML Editor例子作为模板,为XML文本编辑器加入内容帮助(Content Assis)。
1.内容帮助简介
在目前流行的IDE中,内容提示帮助是必不可少的功能,可以说,如果没有了内容帮助,那IDE就不能称为IDE。有了内容帮助提示,能大大提高代码编写速度。
请看下图:当我们在Java编辑器中输入‘.’的时候,就会弹出一个菜单,里面列出了类所具有的方法以及属性,并且在我们继续输入字符的时候,弹出的内容会随着我们的输入进行过滤。
下面我们以Eclipse的XML Editor Example为例,介绍一下内容帮助如何实现的。
2.创建XML Editor
我们首先需要建立一个Plugin工程,然后在向导页中选择我们要生成的XML Editor例子:
点Finish完成,这时候我们的工程便生成了,并且向导还为我们生成了XML Editor所需要的一些类,以及为我们的Plugin.xml实现了org.eclipse.ui.editors扩展点:
3.简单的内容帮助
在我们生成的类中,有一个名为XMLConfiguration的类,该类对XML Editor进行了一些设置,包括如何去为不同的文本区域显示不同的颜色等,TextEditor所维护的SourceViewer就是通过它来进行设置的,但这不是我们所要讨论的范围,这里简单地介绍一下即可。
接下来我们需要复写XMLConfiguration的一个方法:getContentAssistant。这个方法便是告诉我们的编辑器,我们所具有的内容帮助是什么,在创建XML Editor的时候,默认是不为我们生成这方面代码的,所以我们需要自己复写:
public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
// 生成一个ContentAssistant
ContentAssistant assistant = new ContentAssistant();
// 设置帮组内容弹出响应时间
assistant.setAutoActivationDelay( 200 );
assistant.enableAutoActivation( true );
return assistant;
}
ContentAssistant并不是内容帮助的提供者,它只是维护我们的内容帮助,帮我们弹出菜单以及帮助内容信息等作用。
真正告诉ContentAssistant要显示那些帮助内容的,是IContentAssistProcessor接口类。让我们创建一个名为StrutsContentAssisProcessor的类,并让它实现IContentAssistProcessor接口:
public class StrutsContentAssisProcessor implements IContentAssistProcessor {
public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer,
int offset) {
return null;
}
public IContextInformation[] computeContextInformation(ITextViewer viewer,
int offset) {
return null;
}
public char[] getCompletionProposalAutoActivationCharacters() {
return null;
}
public char[] getContextInformationAutoActivationCharacters() {
return null;
}
public String getErrorMessage() {
return null;
}
public IContextInformationValidator getContextInformationValidator() {
return null;
}
}
大家注意下computeCompletionProposals方法,这个方法便是返回我们的具体内容帮助。所以我们需要为我们的编辑器创建所需要的内容帮助:CompletionProposal
先看一下这个类的构造函数各个参数的含义:
* @param replacementString :选择帮助信息后所要替代的文本内容
* @param replacementOffset :替代内容输入的位置
* @param replacementLength :替代文本覆盖原来文本的长度
* @param cursorPosition :完成内容帮助的文本替代后,光标所在位置
* @param image :帮助内容显示的图标
* @param displayString :帮助内容的显示字符串
* @param contextInformation :帮助内容的信息描述
* @param additionalProposalInfo :附加信息
在这几个参数中image 、contextInformation、additionalProposalInfo我们可以设置为空。现在让我们在computeCompletionProposals生成我们的帮助内容:
public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer,
int offset) {
ICompletionProposal[] proposals = new ICompletionProposal[2];
proposals[0] = new CompletionProposal("替换文本1", offset, 0, new String("替换文本1").length(), null, "帮组内容1", null,null) ;
proposals[1] = new CompletionProposal("替换文本2", offset, 0, new String("替换文本2").length(), null, "帮组内容2", null,null) ;
return proposals;
}
computeCompletionProposals输入的参数中 offset是指当内容帮助弹出的时候,文本编辑器光标所在位置。
大家都知道,帮助内容弹出的时候是需要一定条件的,也就是当我们输入了激活内容帮助的字符的时候,它便会弹出来。IContentAssistProcessor 的getCompletionProposalAutoActivationCharacters方法便是让我们返回激活帮助内容字符的,假设当我们输入了‘<’时,弹出帮助内容:
public char[] getCompletionProposalAutoActivationCharacters() {
return new String("<").toCharArray();
}
好了,我们的第一步已经完成了,接下来就是在ContentAssis对象中设置我们所要返回的内容帮助。
返回到XMLConfiguration的getContentAssistant方法:
public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
// 生成一个ContentAssistant
ContentAssistant assistant = new ContentAssistant();
// 设置帮组内容弹出响应时间
assistant.setAutoActivationDelay( 200 );
assistant.enableAutoActivation( true );
assistant.setContentAssistProcessor(new StrutsContentAssisProcessor(), IDocument.DEFAULT_CONTENT_TYPE);
return assistant;
}
相关文章推荐
- Eclipse plugin开发 —实现文本内容帮助
- Eclipse plugin开发 —实现语法高亮
- Java微信二次开发之17-再次使用百度翻译api超链接实现对文本内容翻译并推送
- Eclipse rcp 实现文本内容对比功能
- Android开发之文本内容自动朗读功能实现方法
- Eclipse plugin开发 —实现单行与多行注释
- Eclipse plugin开发 —实现语法高亮
- [Android开发]eclipse报错:发现了以元素 'd:skin' 开头的无效内容,此处不应含有子元素
- 基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
- Eclipse插件开发:实现控制台输出信息
- 【微信Java开发 --1---番外1】在windows下,使用JAVA执行多条DOS命令+文件夹/路径中有空格怎么解决【目的是实现内容穿透外网】
- PHP开发小技巧①⑥—提取富文本字符串中的文本内容
- Java微信二次开发之6-文本消息体内容换行的使用
- iOS开发怎样实现全系统的文本复制粘贴
- 搭建Hadoop2.7.2开发环境1(编译Eclipse中hadoop插件hadoop2x-eclipse-plugin)
- QScrollArea可以帮助我们实现让一个widget的内容带有滚动条(QWidget里内置QScrollArea,QScrollArea里再内置其它QWidget)
- eclipse + JBoss 5 + EJB3开发指南(8):实现Entity Bean的一对多(on
- js实现复制文本内容到剪切板
- Firefox plugin插件开发及冲击响应实现
- 实现Label文本内容中电话号码特殊颜色显示并点击电话号码能拨打