`

Properties修改模型后更新视图

阅读更多

本文是在 http://winseclone.iteye.com/blog/1774307 基础上,实现模型属性值改变后更新视图。

 

在Eclipse-articles propertyviewsample.zip的例子中adaptableObject是一个View(ButtonElement封装了Button),模型属性值改变后会通过ButtonElementProperties.firePropertyChanged(String, Object)更新Button(视图)。

	protected void firePropertyChanged(String propName, Object value) {
		Button ctl = element.getControl();
		
		if (ctl == null) {
			// the GUIView is probably hidden in this case
			return;
		}
		
		if (propName.equals(PROPERTY_FONT)) {
			ctl.setFont(new Font (ctl.getDisplay(),new FontData((String)value)) );
			return;
		}
		if (propName.equals(PROPERTY_TEXT)) {
			ctl.setText((String)value);
			return;
		}
		
	}

 

 上例中的方式,会导致代码臃肿,且灵活性不高。

EMF采用观察者模式(listener)方式来提高代码的灵活性。EMF使用到org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider类来实现。

 

首先,通过eAdapters()注册到模型对象 [r1] 。AdapterFactoryContentProvider中包括了Viewer视图实例,同时实现了INotifyChangedListener。

 

其次,当模型属性改变时,通过模型的eAdapters()获得监听器,通知监听者更新视图TreeViewer。

 

通知监听器,更新视图:

 

 

++ ItemPropertySource适配了Properties视图需要的IPropertySource对象

org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider.getPropertySource(Object)

    |-org.eclipse.emf.edit.ui.provider.PropertySource.PropertySource(Object, IItemPropertySource)

 

参考:

r1:EMF监听实现:

http://www.vogella.com/articles/EclipseEMFNotification/article.html

http://wiki.eclipse.org/EMF/Recipes#Notification_Framework_Recipes

http://yiliner.iteye.com/blog/213846 (ContentAdapter会监听孩子的变化, 添加到notifier的时刻会递归添加到其孩子)

resource.eAdapters().add(contentAdapter); 
  • 大小: 46.8 KB
分享到:
评论

相关推荐

    五张图带你搞懂JavaWeb中管理员登录与对信息的CURD

    现在的web项目都基本使用MVC开发模式,即模型视图控制器。 M:Model,模型-JavaBean 完成具体的业务操作,如:查询数据库,封装对象. V:View,视图-JSP 展示数据 C:Controller,控制器-Servlet 获取用户的输入 ...

    Altium Designer Beta 19.0.10完整版安装包+安装教程+和谐文件

    25312 提高了面板的打开速度,例如“属性”和“视图配置”面板。 26036 ...在Interactive Routing Properties面板中添加了完全标记的Via侧视图。 27871 为独立区域实现了Arc Approximation属性。此属性...

    Eclipse权威开发指南2.pdf

    7.4.6 怎样通过程序更改JDT模型..... 195 7.5 接下来我们学习哪些内容...... 197 第8章 Eclipse体系结构概述 199 8.1 历史和现状...... 200 8.2 体系结构的最高优先级: 可扩展性与集成...... 201 8.3 Eclipse...

    Eclipse权威开发指南3.pdf

    7.4.6 怎样通过程序更改JDT模型..... 195 7.5 接下来我们学习哪些内容...... 197 第8章 Eclipse体系结构概述 199 8.1 历史和现状...... 200 8.2 体系结构的最高优先级: 可扩展性与集成...... 201 8.3...

    Eclipse权威开发指南1.pdf

    7.4.6 怎样通过程序更改JDT模型..... 195 7.5 接下来我们学习哪些内容...... 197 第8章 Eclipse体系结构概述 199 8.1 历史和现状...... 200 8.2 体系结构的最高优先级: 可扩展性与集成...... 201 8.3...

    《JSP简明教程》课件

    JavaBeans是一个十分完整的组件模型,它能够支持标准组件技术中的各种特性:属性(properties)、事件(events)、方法(method)和持续性(persistence),这和“对象”是十分相似的。设计一个JavaBeans分为以下几...

    TortoiseSVN和TortoiseMerge的中文帮助文档(chm格式)

    4.5. 用来自别人的修改更新你的工作副本 4.6. 解决冲突 4.6.1. 文件冲突 4.6.2. 属性冲突 4.6.3. 树冲突 4.6.3.1. 本地删除,当更新时有更改进入 4.6.3.2. 本地更改,当更新时有删除进入 4.6.3.3. 本地删除,当更新...

    SVN操作手册中文版网页格式

    4.5. 用来自别人的修改更新你的工作副本 4.6. 解决冲突 4.6.1. File Conflicts 4.6.2. Tree Conflicts 4.6.2.1. Local delete, incoming edit upon update 4.6.2.2. Local edit, incoming delete upon update ...

    ZendFramework中文文档

    7.13.1. 从 1.0.x 到 1.5.0 或更新的版本的移植 7.13.2. 从 0.9.3 到 1.0.0RC1 或更新的版本的移植 7.13.3. 从 0.9.2 移植到 0.9.3 或更新的版本 7.13.4. 从 0.6.0 移植到 0.8.0 或更新的版本 7.13.5. 从 0.2.0 ...

    SP编辑器「SP Editor」-crx插件

    用于创建和更新文件(js,css)的谷歌浏览器扩展程序,向网站注入文件,修改网页/列表属性包值(添加,编辑,删除,索引)以及创建webhook订阅,从发布页面编辑/添加/删除web部件以及从Chrome开发人员工具运行SP2013...

    CAD快捷键文档

    ADC, *ADCENTER(设计中心“Ctrl+2”) CH, MO *PROPERTIES(修改特性“Ctrl+1”) MA, *MATCHPROP(属性匹配) AP,* APPLOAD 加载程序AUTO LISP|ADS|ARX PE, *PEDIT(多段线编辑) MLE,*Mledit 编辑多线 HE,*...

    Eclipse_Swt_Jface_核心应用_部分19

    8.5.4 文本修改事件:VerifyEvent和ModifyEvent的区别 143 8.6 无类型的事件 144 8.6.1 注册无类型事件监听器 144 8.6.2 无类型事件程序示例 145 8.7 本章小结 146 第3篇 SWT高级篇 第9章 SWT高级控件 ...

    Maven权威指南 很精典的学习教程,比ANT更好用

    Interpolation of Properties in Dependency Output Location 12.5.4.3. Including and Excluding Dependencies by Scope 12.5.4.4. Fine Tuning: Dependency Includes and Excludes 12.5.4.5. Transitive ...

    CuteFTP9简易汉化版

    如果检测到更改,修改后的文件或者文件夹上传到一个预定义的服务器。非常适合发布网站从登台服务器变为现场服务器。 自定义Commands-Create组常用的命令序列并将它们分配给一个快速访问的快捷键。如果需要,将直接FTP...

    超级有影响力霸气的Java面试题大全文档

     对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。  Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless ...

    java 面试题 总结

    对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。 Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session ...

    2.ASP.NET.2.0.高级编程(第4版) [1/7]

    2.2.1 文档窗口中的视图 20 2.2.2 标记导航器 21 .2.2.3 页面标签 22 2.2.4 代码改变状态的通知 23 2.2.5 错误通知和辅助 23 2.3 工具箱 25 2.4 Solution Explorer 26 2.5 Server Explorer 28 2.6 ...

    asp.net知识库

    HttpModule 实现 ASP.Net (*.aspx) 中文简繁体的自动转换,不用修改原有的任何代码,直接部署即可! 服务器自定义开发二之客户端脚本回发 Web开发: 使用URL重写WEB主题切换 如何在Asp.Net1.1中实现页面模板(所谓的...

    spring_MVC源码

    -- 对模型视图名称的解析,即在模型视图名称添加前后缀 --> 17. 18. p:prefix="/WEB-INF/view/" p:suffix=".jsp" /> 19. 20. 21. class="org.springframework.web.multipart.commons....

Global site tag (gtag.js) - Google Analytics