快速业务通道

EMF介绍系列(七、.Edit初步) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
ductItemProvider。从 JFace的角度来说,ItemProvider相当于集成了各种查看器的 ContentProvider和LabelProvider的代码,是一个通用的“ContentLabelProvider”。因此 利用它,开发人员在改变查看器的时候只需要修改很少的代码,而不像传统方式那样每换一 个查看器还要写新的ContentProvider和LabelProvider。

EMF介绍系列(七、.Edit初步)(2)

时间:2011-04-30 博客园 bjzhanghao

二、提供了关联对象的属性表

每个ItemProvider的getPropertyDescriptors()方法返回在属性视图里显示的属性列表, 列表里的每个元素是一个 ItemPropertyDescriptor对象,它决定了每个属性的标签、描述、 图标以及是否可编辑。EMF为生成的代码会帮我们把模型定义里的每个属性都显示在属性列表 里,如果希望隐藏某些属性,可以通过修改这个方法移除之。

以Product为例,ProductItemProvider的getPropertyDescriptors()方法里包含这样六条 语句,分别代表产品名称、价格、描述、是否有货、评价以及颜色这六个属性,如果你想让 颜色属性在属性列表里消失,只要删除最后一句即可。

addNamePropertyDescriptor(object); addPricePropertyDescriptor(object); addDescriptionPropertyDescriptor(object); addAvaiablePropertyDescriptor(object); addScorePropertyDescriptor(object); addBackgroundPropertyDescriptor(object);

三、生成编辑模型的各种命令

在ItemProviderAdapter基类里有很多createXXXCommand()方法,如果你用过GEF应该对这 些名称不陌生,因为在 EditPolicy里也有类似的方法。我们知道,为了实现Undo/Redo功能 ,对模型的每个改变都应该使用Command实现,然后把 Command保存在Command栈里,每个 Command对象保存Undo/Redo自己的信息。ItemProviderAdapter相当于一个生产这些Command 的工厂,用户对模型编辑的请求都将通过它转换为对应的Command,例如用户在属性视图里修 改了一个属性的值,当按下回车后,会调用该对象关联的ItemProvider类的 createSetCommand()方法生成一个SetCommand对象。

注意:在createCommand()方法里会调用getChildrenFeatures()方法,而在实现 ContentProvider的getChildren()时也需要这个方法,因此这个方法的返回结果同时影响 ItemProvider的这两项功能。

四、将模型的改变通知到负责显示模型的视图

在一个Eclipse应用程序里经常会有很多个查看器显示模型,无论用户怎样修改模型,要 让这些查看器里显示的内容总是当前的模型,最好的办法是让查看器能够响应模型的变化。 ItemProvider作为监听器可以很好的完成这个任务。

模型发生改变时,与被修改的对象相关联的ItemProvider的notifyChanged()方法被调用 ,事件立即被通知给 ItemProviderAdapterFactory,后者是整个模型的事件处理机构,所有 的ItemProvider都是通过 ItemProviderAdapterFactory创建并注册为监听器的,因此 ItemProviderAdapterFactory可以把事件通过 fireNotifyChanged()通知给所有这些监听器 的notifyChanged()方法去消化。图2展示了这个通知过程,此图来自《Eclipse Modeling Framework: A Developer''s Guide》第3.2.4节中的图3.10。

EMF介绍系列(七、.Edit初步) - 编程入门网

图2 ItemProvider的通知流程

最后,ItemProvider还有一个collectNewChildDescriptors()方法,这个方法决定了在编 辑器里,模型里对应的那个对象可以创建哪些子元素。例如在线商店模型里,Category对象 的子元素是Category和Product,那么用户在编辑器里右键点击一个 Category对象选择“New Child”时,就会出现“Category”和“Product”这两个选项。有些场合我们想隐藏其中一 些选项时,就可以修改这里的代码。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号