GEF入门.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

138****7331 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档