快速业务通道

为SWT应用程序配备内容助理 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
符串分段,分别将单独的段包括在新的样式标签内。

显示额外信息

CompletionProposal() 构造函数的前四个参数与它们在 computeStructureProposals() 方法中一样具有相同的含义(替换字符串、插入点、被替换的文本的长度,以及相对于插入点的光标位置)。第五个参数(在本例中我们将 null 传递给它)接受一个图像实例。这个图像将显示在弹出窗口中相应条目的左侧。第六个参数接受出现在建议选择窗口中的画面说明文字。第七个参数用于 IContextInformation 实例,我们很快就会讨论它。最后,第八个参数接受附加信息窗口中的文本,当某条建议被选定时,这段文本就应该显示出来。然而,仅只是为这个参数提供一个值,并不足以实际获得这样的信息窗口。我们必须相应地配置内容助理。同样地,这是在类 XMLConfiguration 中完成的。我们只需向方法 getContentAssistant() 添加如清单 12 所示的行。

清单 12. 向 getContentAssistant 添加行

assistant.setInformationControlCreator(getInformationControlCreator(sourceViewer));

这里发生了什么呢?首先,我们从当前源代码查看器配置中获得了一个 IInformationControlCreator 类型的实例。这个实例是一个负责创建类 DefaultInformationControl 的实例的工厂,所创建的实例将负责管理信息窗口。然后我们告诉内容助理关于这个工厂的信息。内容助理最终将在某个自动完成建议被选定时,使用这个工厂来创建一个新的信息控制实例。

为SWT应用程序配备内容助理(6)

时间:2011-02-09 IBM Berthold Daum

格式化信息文本

默认情况下,这个信息控制实例将以纯文本的形式提供附加的信息文本。然而,添加一些美妙的文本表示形式是可以做到的。例如,我们可能希望以粗体打印所有标签。为此,我们需要相应地配置 IInformationControlCreator 创建的 DefaultInformationControl 实例。实现这点的惟一办法是使用一个不同的 IInformationControlCreator ,而这可以通过重写 XMLConfiguration 方法 getInformationControlCreator() 来完成。

这个方法在 SourceViewerConfiguration 类中的标准实现如清单 13 所示。

清单 13. getInformationControlCreator

public IInformationControlCreator getInformationControlCreator     (ISourceViewer sourceViewer) {    return new IInformationControlCreator() {     public IInformationControl createInformationControl(Shell parent) {       return new DefaultInformationControl(parent);     }    }; }

我们通过向 DefaultInformationControl() 构造函数添加一个 DefaultInformationControl.IInformationPresenter 类型的文本展示器(presenter),从而修改 DefaultInformationControl 实例的创建,如清单 14 所示。

清单 14. 添加文本展示器

return new DefaultInformationControl(parent, presenter);

最后剩下的事情就是实现这个文本展示器,如清单 15 所示。

清单 15. 文本展示器

private static final DefaultInformationControl.IInformationPresenter    presenter = new DefaultInformationControl.IInformationPresenter() {     public String updatePresentation(Display display, String infoText,       TextPresentation presentation, int maxWidth, int maxHeight) {       int start = -1;       // Loop over all characters of information text       for (int i = 0; i < infoText.length(); i++) {        switch (infoText.charAt(i)) {          case ''<'' :           /

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号