- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
GEF入门
HYPERLINK /blog/145628 GEF原理及实现系列(一、GEF概述)关键字: gef概述GEF(Graphical Editor Framework)是一个图形化编辑框架,它允许开发人员以图形化的方式展示和编辑模型,从而提升用户体验。本系列介绍GEF中的几个基本概念,包括如下部分:GEF概述模型(Model)视图(View)控制器(Control)请求和编辑策略(Request and EditPolicies)命令(commands)模型同步选项板(PaletteRoot)1.GEF概述????GEF最早是Eclipse的一个内部项目,后来逐渐转变为Eclipse的一个开源工具项目,Eclipse的不少其他子项目都需要它的支持。????GEF的优势是提供了标准的MVC(Model-View-Control)结构,开发人员可以利用GEF来完成以上这些功能,而不需要自己重新设计。与 其他一些MVC编辑框架相比,GEF的一个主要设计目标是尽量减少模型和视图之间的依赖,好处是可以根据需要选择任意模型和视图的组合,而不必受开发框架 的局限(不过实际上还是很少有脱离Draw2D的实现)。2.GEF工作原理????GEF 中模型和视图是两个完全没有联系的实体,两者都是通过控制器间接进行通信的。这样很好的解决了模型和视图之间的耦合,但是也增加了控制器的负担。GEF通 过请求和编辑策略及命令模式很好的解决了控制器的负担,使每一个部分保持最小的依赖关系。GEF的命令请求及响应流程如下:??? (1)GEF框架接受用户的操作,并把操作转换成相应的请求。??? (2)控制器接受请求并把请求交由相应的编辑策略管理器处理。??? (3)编辑策略管理器个根据请求的类型新建相应的命令处理请求。??? (4)GEF框架执行命令,命令负责对模型的修改。??? (5)模型属性修改后,命令负责对模型的修改。??? (6)监听器(控制器就是模型的监听器)监听到事件后处理相应的操作,并通知视图进行修改。??? (7)??? 视图更新显示界面,使之与模型同步。??? 创建GEF编辑器,首先Eclipse创建控制器(EditorPart)设置好控制器的输入(IEditorInput),另外控制器将初始化EditDomain、viewers和palette等,如下图:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??????????????????????????????????????????????????????? GEF结构图 HYPERLINK /blog/145632 GEF原理及实现系列(二、模型)GEF的模型只与控制器打交道,而不知道任何与视图有关的东西。1.模型的功能??? 在GEF框架中,模型(Model)是非常简单的一部分,用户可把模型理解成一个简单的可持久化的实体。但为了能让控制器知道模型的变化,应该把控制器作为事件监听者注册在模型中,当模型发生变化时,就触发相应的事件给控制器,后者负责通知各个视图进行更新。2.模型的实现??? 典型的模型对象会包含PropertyChangeSupport类型的成员变量,用来触发事件,通知监听器即控制器。一般来说,模型会实现一个基类,用来封装事件机制,主要包括添加监听器、删除监听器,以及模型属性改变触发的相应事件,代码如下:java 代码?package?com.example.model;????import?java.beans.PropertyChangeListener;??import?java.beans.PropertyChangeSupport;??import?java.io.Serializable;????public?abstract?class?Element?implements?Cloneable,?Serializable?{????????PropertyChangeSupport?listeners?=?new?PropertyChangeSupport(this);??????//添加监听器??????public?void?addPropertyChangeListener(PropertyChangeListener?l)?{??????????listeners.addPropertyChangeListener(l);??????}??????//触发属性改变的事件??????protected?void?firePropertyChange(String?prop,?Object?old,?Object?newValue)?{?
文档评论(0)