Flex绘图类的动态关联实现
来源:互联网 发布:阿里云服务器进程监控 编辑:程序博客网 时间:2024/04/29 00:38
要求效果
1、点击绘图工具栏的不同按钮,右边的绘图面板会用不同的工具进行绘制
2、选择拾色器的不同颜色,会使右边的绘图工具会出不同颜色的图形
实现要素
1、系统中设置一个环境类Env,它包含一些private的成员,和一些public的getter、setter方法。它主要记录用户当前设置的颜色、线宽、当前所选的绘图工具是哪个等信息。
2、系统中设置一个画板类DrawPanel(继承自Sprite),把它add到UIComponent中,再把该UIComponentadd到画布Canvas中。我们在DrawPanel的构造函数中绘制一个跟Cnavas大小一致的矩形,以便把Sprite“撑开”。
3、在左边的每个按钮添加一个Click事件,这个事件函数就是Env.setCurTool方法,它以每个按钮对应的绘图工具名称为参数,修改Env的当前绘图工具属性curTool。
4、最关键的是这一步,在DrawPanel类中实现 根据用户当前所选的绘图工具而动态的把事件(如鼠标按下)分发到相应的具体绘图类。
动态关联的实现
绘图类的动态关联是通过一种类似于java的Class.forName(“className”)实现的,具体步骤如下:
1、 导入相关系统类
2、 导入自定义的绘图类draw.*
3、 在DrawPanel中定义一个Object类型的成员变量shape
4、 分发鼠标按下事件
4.1声明n个绘图类对象(但不要实例化!)
4.2 var CurDrawTool:Class =getDefinitionByName("draw."+Env.getCurTool()) as Class;
4.3 shape = new CurDrawTool();
4.4 shape.onMouseDown(this);
5、 分发鼠标弹起事件
5.1 shape.onMouseUp(this);
注意事项
声明n个绘图类对象的做法是迫不得已的,因为如果在程序上下文中没有使用这个类的话,import语句并不会真正的导入类,或者说,不会在发布swf的时候被编译进去,只用在代码中使用到的类才会被编译进去。所以在var CurDrawTool:Class =getDefinitionByName("draw."+Env.getCurTool()) as Class;这条语句之前声明那n个绘图类变量(不用实例化,那样会浪费系统资源),否则会报ReferenceError:Error #1065。
其实如果getDefinitionByName的参数是系统类,比如说flash.display.Sprite的话,就不用再声明该类的一个变量了,因为这些内部类是Flash Player本身自带的,它永远找得到。
代码如下:
- Flex绘图类的动态关联实现
- Flex 实现B/S绘图
- Android动态绘图实现
- ClearQuest的动态关联
- javascript实现动态关联菜单
- Runtime实现动态关联对象
- FLEX里的动态Event类:DynamicEvent
- flex中的动态实现remoteobject
- Flex 实现动态加载图片
- Matlab 的动态曲线绘图
- VC实现波形不闪烁动态绘图
- VC实现波形不闪烁动态绘图
- VC实现波形不闪烁动态绘图
- SurfaceView与Timer实现动态绘图
- flex (actionscript)用 swf 实现 动态类库(dll)
- Flex中鼠标框选绘图,及解决绘图被Flex组件遮挡的问题
- 动态绘图
- Hibernate高级实体关联映射之多值的实体关联(实体类实现三重关联)
- ORACLE TRIGGER ON DDL
- oracl锁机制解析
- ORACLE 用户级数据表结构监测
- 不是男女朋友的朋友
- 读腾讯告离职员工有感
- Flex绘图类的动态关联实现
- XPath 语法
- Information System
- 漂
- 为什么使用Tomcat时修改Action中的代码要重启Tomcat呢?
- svn 使用记录
- Effective C#之Item 41:Prefer DataSets to Custom Structures
- 2008级全校学生模拟测试安排
- Effective C#之Item 42:Utilize Attributes to Simplify Reflection