快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

澳门威尼24848网址:EMF介绍系列(七、.Edit初步)



EMF除了天生模型部分的接口和实现类(不妨称作“核心模型”)以外,还天生一个名称以.Edit结尾的项目,包孕一些与核心模型和编辑器关系都十分慎密的代码。这部分代码颠最后精心设计,可重用的程度是相称的高。它们不仅在EMF天生的编辑器项目里大年夜量被用到,我们自己在扩展编辑器的时刻也应该充分使用。

在线市廛的例子里,com.my.shop.edit项目里包孕一个ItemProviderAdapterFactory类和一组 ItemProviderAdapter的子类,后者是和核心模型的接口逐一对应的,例如核心模型的Shop、Catego澳门威尼24848网址ry和Product分手对应 ShopItemProvider、CategoryItemProvider和ProductItemProvider。这篇帖子主要先容一下这些 ItemProvider,而关于ItemProviderAdapterFactory的内容将在今后的帖子里专门先容,着实顾名思义, ItemProviderAdapterFactory的感化主要便是天生ItemProvider。事实上在构造EMF利用法度榜样时,我们常常要改动 ItemProvider里的代码,而ItemProviderAdapterFactory则很少篡改。

图1 EMF天生的.Edit项目

留意:.Edit项目里ItemProviderAdapter的子类名称里省略了Adapter这个单词,例如 CategoryItemProvider而非CategoryItemProviderAdapter,你心里应该清楚它是一个Adapter,由于它确凿实现了Adapter接口。EMF里别的专门有一个ItemProvider类是为非Adapter类型筹备的,在这篇里说的 ItemProvider不是指它,而是指XXXItemProvider,也便是ItemProviderAdapter的子类。

留意:EMF里的Adapter接口和Eclipse Runtime的IAdaptable接口虽然名称相似,但并不是同一个观点(关于IAdaptable请拜见前面的翻译帖子), E澳门威尼24848网址MF里的Adapter等同于 监听 器(Listener、Observer)的感化,它 监听的工具是EMF的Notifier,在一个Notifier 上可以注册多个Adapter。另一方面,ItemProviderAdapterFactory则很像IAdaptable,它们都能够起到动态转换类型的感化,只不过前者一样平常只用于Notifier到Adapter的转换,后者则没有什么限定,此外转换措施的名称也不合,前者是adapt(),后者为 getAdapter()。

从图1中不丢脸出,ItemProvider构成了.Edit项目的主要部分,这些ItemProvider具有以下几个感化。

一、实现了JFace中ContentProvider和LabelProvider的功能

JFace查看器(Viewer)是对swt中控件的一种包装,例如TableViewer是对Table的包装,TreeViewer是对Tree的包装,等等,经由过程这种要领可以将控件与显示在控件中的数据在必然程度上分离,从而方便数据显示的更新。相称多的Eclipse利用法度榜样都是经由过程JFace查看器显示数据的,与查看器关联的ContentProvider和LabelProvider分手节制查看器中显示的哪些数据以及每条数据的显示要领。

以TreeViewer的ContentProvider为例,在JFace里应该实现ITreeContentProvider接口,这个接口定义了getParent()、hasChildren()和getChildren()这三个措施;在EMF里有 I澳门威尼24848网址TreeItemContentProvider接口与之对应,这个接口同样具有这三个措施,.Edit部分的每个ItemProvider都实现了这个接口,由于EMF已经完全知道我们的模型布局,以是这三个措施在ItemProviderAdapter类里已经实现好了。不过 ITreeItemContentProvider终究不能直接交给JFace的TreeViewe澳门威尼24848网址r来应澳门威尼24848网址用,以是EMF供给了一个 AdapterFactoryContentProvider来做适配事情,你可以在编辑器的代码里看到若何应用它。

LabelProvider也是类似的,它主要节制显示的翰墨和图标。EMF天生的ItemProvider缺省没有实现 ITableItemLabelProvider,以是假如要应用TableViewer,要改动代码以实现 ITableItemLabelProvider接口和额外的措施,详细请参考在线市廛例子中的ProductItemProvider。从 JFace的角度来说,ItemProvider相称于集成了各类查看器的ContentProvider和LabelProvider的代码,是一个通用的“ContentLabelProvider”。是以使用它,开拓职员在改变查看器的时刻只必要改动很少的代码,而不像传统要领那样每换一个查看器还要写新的ContentProvider和LabelProvider。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: