关于 rcp 中Texteidtor 控件的使用注意事项

来源:互联网 发布:hadoop用什么数据库 编辑:程序博客网 时间:2024/06/05 12:29
问题描述:rcp应用程序打开了多个texteditor,对texteditor 中的docment进行注解处理。发现每次只有最后一个被打开的文档注解被显示,其他的文档都不显示。


部分程序:


对于我开发的rcp 程序,其中扩展了texteditor控件,同时扩展了documentProviders,如下:
<extension
         point="org.eclipse.ui.editors.documentProviders">
      <provider 
            class="com.zsmart.zcct.ui.editor.input.TextDocumentProvider"
            id="editors.PersonDocumentProvider"
            inputTypes="com.zsmart.zcct.ui.editor.input.ZCCTTextInput">
      </provider>
   </extension>
对于文档进行注解的方法被定义在TextDocumentProvider类中,此类中同时包含如下的成员变量:


private Document document;
private AnnotationModel embededAnnotation;
设置注解的方法中直接使用了TextDocumentProvider类对象本身的程序变量document和embededAnnotation


产生问题的原因,我本以为每一个texteditor会持有一个TextDocumentProvider类对象,此时我只要获取这个对象即可对所在的文本设置注解了。
结果一直不对,仔细的看了一下获取TextDocumentProvider对象与document对象、embededAnnotation对象方法的却别,代码如下:
TextDocumentProvider textdocprod =(TextDocumentProvider)((TextEditor)editor_tmpe).getDocumentProvider();
((TextEditor)editor_tmpe).getDocumentProvider().getDocument(editor_tmpe.getEditorInput())
((TextEditor)editor_tmpe).getDocumentProvider().getAnnotationModel(editor_tmpe.getEditorInput())


从上面可以看出,在获取TextDocumentProvider对象时不需要关联是哪个EditorInput,而对于下面两个对象,都是需要关联EditorInput对象的。


此处可以得出,其实多个texteditor只是持有一个TextDocumentProvider对象,而每一个texteditor都是持有一个embededAnnotation和document对象。


没有来得及看源码,如果有什么错误欢迎指正。
原创粉丝点击