1.概述
节点效果如下,可以用于Petri网的节点表示等。
2.开发过程
2.1创建一个节点类
节点类必须继承SkinnableComponent,这样才能设置皮肤
代码如下
2.2 定义Skin类
这里定义了两个皮肤,代码如下
PlaceSkin.mxml
注:s
:Ellipse:表示画椭圆
s:stroke:表示画线条
s:fill:表示填充的颜色和透明度
s:Rect:表示画矩形,可以带圆角
TransitionSkin.mxml
2.3应用程序
代码如下
在Flex3中,我们要实现这两种节点,通常会采取继承的方式:
众所周知继承和类膨胀会带来一些问题,如果仅仅因为显示的不同而实现两个不同的组件类并不是一个很好的解决办法。
在Flex4中,我们完全可以只定义一个组件类来实现功能逻辑,而把显示交给Skin去处理:
显示和逻辑分离
spark组件都继承自SkinnableComponent,而SkinnableComponent继承子UIComponent并扩展了Skin相关的功能;同样Skin类也继承自UIComponent。
通过这样的方式,spark组件在原有的组件架构基础上,实现了显示和逻辑的分离。
节点效果如下,可以用于Petri网的节点表示等。

2.开发过程
2.1创建一个节点类
节点类必须继承SkinnableComponent,这样才能设置皮肤
代码如下
- package nodeexam
- {
- import spark.components.supportClasses.SkinnableComponent;
- public class Node extends SkinnableComponent {
- public function Node() {
- super();
- }
- }
- }
2.2 定义Skin类
这里定义了两个皮肤,代码如下
PlaceSkin.mxml
- <?xml version="1.0" encoding="utf-8"?>
- <s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009"
- xmlns:s="library://ns.adobe.com/flex/spark"
- xmlns:mx="library://ns.adobe.com/flex/mx"
- width="400" height="300">
- <s:Ellipse id="ellipse" top="0" right="0" bottom="0" left="0">
- <s:fill>
- <s:SolidColor color="0x77CC22" />
- </s:fill>
- <s:stroke>
- <s:SolidColorStroke color="0x131313" weight="2"/>
- </s:stroke>
- </s:Ellipse>
- </s:Skin>
s:stroke:表示画线条
s:fill:表示填充的颜色和透明度
s:Rect:表示画矩形,可以带圆角
TransitionSkin.mxml
- <?xml version="1.0" encoding="utf-8"?>
- <s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009"
- xmlns:s="library://ns.adobe.com/flex/spark"
- xmlns:mx="library://ns.adobe.com/flex/mx"
- width="400" height="300">
- <s:Rect id="rect" radiusX="4" radiusY="4" top="0" right="0"
- bottom="0" left="0">
- <s:fill>
- <s:SolidColor color="0x131313" />
- </s:fill>
- <s:stroke>
- <s:SolidColorStroke color="0x131313" weight="2"/>
- </s:stroke>
- </s:Rect>
- </s:Skin>
2.3应用程序
代码如下
- <?xml version="1.0" encoding="utf-8"?>
- <s:Application
- xmlns:fx="http://ns.adobe.com/mxml/2009"
- xmlns:s="library://ns.adobe.com/flex/spark"
- xmlns:mx="library://ns.adobe.com/flex/halo"
- xmlns:skinsample="nodeexam.*">
-
- <skinsample:Node skinClass="nodeexam.TransitionSkin" x="10" y="30" width="50" height="50"/>
- <skinsample:Node skinClass="nodeexam.PlaceSkin" x="80" y="30" width="50" height="50"/>
- </s:Application>