快速业务通道

[Eclipse]GEF入门系列(十二、自定义Request) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

[Eclipse]GEF入门系列(十二、自定义Request)

时间:2011-04-19 cnblogs bjzhanghao

先简单回顾一下Request在GEF里的作用。Request是GEF里一个比较重要的角色,Tool将原 始的鼠标事件转换为EditPart可以识别的请求,Request则承载了这些请求信息。举例来说, 用户在调色板(Palette)里选择了创建节点工具(CreationTool),然后在画布区域按下鼠 标左键,这时产生在画布上的鼠标单击事件将被CreationTool转换为一个CreateRequest,它 里面包含了要创建的对象,坐标位置等信息。 EditPart上如果安装了能够处理 CreateRequest的EditPolicy,则相应的EditPolicy会根据这个 CreateRequest创建一个 Command,由后者实际执行创建新对象的必要操作。

GEF已经为我们提供了很多种类的Request,其中最常用的是CreateRequest及其子类 CreateConnectionRequest,其他比较常见的还有SelectionRequest,ChangeBoundsRequest 和 ReconnectRequest等等。要实现一个典型的图形化应用程序,例如UML类图编辑器,这些 预定义的Request基本够用了。然而各种稀奇古怪的需求我相信大家也见过不少,很多需求不 太符合约定俗成的使用习惯,因此实现起来更多依赖开发人员的编码,而不是开发框架带来 的便利。在这种时候,我们唯一的期望就是开发框架提供足够的扩展机制,以便让我们额外 编写的代码能和其他代码和平共处,幸好GEF是具有足够的扩展性的。有点跑题了,再回到 Request的问题上,为了说明什么情况下需要自定义 Request,我在前文“应用实例”里的示 例应用基础上假设一个新的需求:

在Palette里增加三个工具,作用分别是把选中节点的背景颜色改变为红色、绿色和蓝色 。

假如你用过Photoshop或类似软件,这个需求很像给节点上色的“油漆桶”或“上色工具 ”,当然在用户界面的背后,实际应用里这些颜色可能代表一个节点的重要程度,优先级或 是异常信息等等。现在,让我们通过创建一个自定义的Request来实现这个需求,还是以前文 中的示例项目为基础。

一、首先,原来的模型里节点(Node)类里没有反映颜色的成员变量,所以先要在Node类 里添加一个color属性,以及相应的 getter/setter方法,注意这个setter方法里要和其他成 员变量的setter方法一样传递模型改变的消息。仿照其他成员变量,还应该有一个静态字符 串变量,用来区分消息对应哪个属性。

final public static String PROP_COLOR = "COLOR"; protected RGB color = new RGB(255, 255, 255); public RGB getColor() {    return color; } public void setColor(RGB color) {    if (this.color.equals(color)) {      return;    }    this.color = color;    firePropertyChange(PROP_COLOR, null, color); }

二、然后,要让Node的color属性变化能够反映到图形上,因此要修改NodePart里的 propertyChanged()和 refreshVisuals()方法,在前者里增加对color属性的响应,在后者里 将NodeFigure的背景颜色设置为Node的color属性对应的颜色。(注意,Color对象是系统资 源对象,实际使用里需要缓存以避免系统资源耗尽,为节约篇幅起见,示例代码直接new Color()了)

public void propertyChange(PropertyChangeEvent evt) {    if (evt.getPropertyName().equals(Node.PROP_COLOR))//Response to color change      refreshVisuals(); } protected void refreshVisuals() {    ((NodeFigure) this.getFigure()).setBackgroundColor(new Color(null, node.getColor()));//TODO cache color instances }

[Eclipse]GEF入门系列(十二、自定义Request)(2)

时间:2011-04-19 cnblogs bjzhanghao

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