为了保证数据和展现的同步,必须要有一种消息通知机制,当模型被修改时通知相应的视图进行更新,下面将介绍如何实现这种消息机制。
1.模型同步的功能
模型是GEF中实体,当模型的属性被修改后,控制器会监听到模型属性改变的事件,然后通知视图进行更新,模型和视图之间没有直接的联系,如下图:
要通过事件的通知机制获得模型同步的步骤如下:
(1)模型中包含注册监听器的机制,本文范例是通过PropertyChangeSupport和PropertyChangeListener机制添加模型监听器。
(2)把控制器注册为模型监听器,在此通过控制器实现PropertyChangeListener接口,并把自己添加到模型的监听器即可。
(3)当模型触发属性改变的事件后,控制器监听到事件并相应的更新视图。
另外,并不是模型的所有属性的改变都必须通知控制器,一般情况下,当模型的属性更改后要引起视图的更新时,必须触发事件通知控制器,因为模型和视图之间没有 任何的关联。
2.模型同步的实现
典型的模型对象会包含PropertyChangeSupport类型的成员变量,用来触发事件,通知监听器即控制器。当模型的属性被修改后,控制器将更 新视图的显示。例如,某个节点的名字修改后,将要触发相应的事件,通知控制器,如在前面提到的Node类中有如下片段:
java 代码
- public void setName(String name) {
- if (this.name.equals(name)) {
- return;
- }
- this.name = name;
-
- firePropertyChange(PROP_NAME, null, name);
- }
当模型的名字改变后,将通过firePropertyChange方法触发模型名字被修改的事件,其中第一个参数为事件类型唯一标识,表示模型的什么属性被改变,第二个参数为改变钱的值,第三个参数为改变后的新值。
模型触发事件后,控制器将监听到模型属性修改的事件,通知事件的类型,即firePropertyChange方法的第一个参数判断是哪一个属性被修改,然后执行相应的操作。下面是NodePart中相应的操作代码:
//监听模型属性改变
java 代码
- public void propertyChange(PropertyChangeEvent evt) {
- if (evt.getPropertyName().equals(Node.PROP_LOCATION))
-
- refreshVisuals();
- else if (evt.getPropertyName().equals(Node.PROP_NAME))
- refreshVisuals();
- else if (evt.getPropertyName().equals(Node.PROP_INPUTS))
-
- refreshTargetConnections();
- else if (evt.getPropertyName().equals(Node.PROP_OUTPUTS))
- refreshSourceConnections();
- }
当控制器监听到模型的改变事件后,将会通过视图的更新,从而实现了模型数据和视图显示的同步。
分享到:
相关推荐
eclipse gef原理的详细介绍PPT,很有参考价值。GEF是实现MVC模式的经典架构。
gef原理的详细介绍PPT+大量程序实例介绍+程序源码,很有参考价值。
GEF入门必读 GEF入门系列 GEF-whole-upload 感谢八进制
GEF 入门系列 GEF
GEF入门系列,八进制 的GEF入门系列教程, 由社区经作者授权后整理而成GEF(Graphical Editor Framework)是一个图形化编辑框架,它允许开发人员以图形化的方式展示和编辑模型,从而提升用户体验。这样的应用程序有很...
GEF教程及demo源码
图形编辑框架,是Eclipse旗下的强有力的Tool Project。利用GEF可以轻松实现类似于Visual Editor的可视化图形编辑应用程序,即以图形化的方式展示和编辑模型。
gef 绘图折线的实现方法。 gef API chm 格式
GEF理解之第三部分,学习gef必备文档资料啊,值得下载
GEF理解之第一部分,学习gef必备文档资料啊,值得下载
在GEF中property view 页面的实现!介绍了其实现的步骤方法!还结合了实例进行讲解!
GEF教程及demo源码
由于工作的需要,最近开始研究GEF(Graphical Editor Framework)这个框架,它可以用来给用户提供图形化编辑模型的功能,从而提升用户体验,典型的应用如图形化的流程设计器、UML类图编辑器等等。
Eclipse插件开发:GEF入门系列宝典
emf介绍系列和gef入门介绍打包,适合新人快速掌握。
RCP与GEF的课件,简单的介绍了RCP和GEF中的各组件的功能,已经工作流程
Eclipse插件开发--gef开发指南与入门系列宝典打包下载。
通过简单易懂的方式,介绍了Eclipse GEF 框架原理。对GEF开发有极大的好处/
实现gef模型连线间锚点的定位实现鼠标位置定位,就是鼠标在哪里,他的锚点就会在哪里!
基于GEF框架的SVG制作工具设计与实现