[原创]FLEX HSilder 数据筛选 设备管理系统 附程序

这是 设备管理系统 中的一小部分,主要展示的是用hslider 实现数据的筛选,以及用move 实现组件的移动。

 主要功能有这么几个

   1,用combobox实现,下拉类表

   2,关键字的模糊搜索。

   3,自定义事件类。

   4,用HSLIDER实现数据的筛选

   5,用move实现组件的移动

   6.  简单的登录框

   7. httpService 加载外部 xml

 

 下面主要说明一下,筛选移动的想法,有其他的问题,望大家交流,程序在附件,如果xml 加载不了要更改一下flash 的信任域.zip的为工程,直接导入就行

 

(效果如下图)

 移动筛选

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

一.解决组件的布局,下面红色的是 Canvas 画布,好处是用的绝对坐标,方便后面用move移动。

 

二.选定数据源,关键代码如下

private function createcovetdisplay():void{
        coverdisplays=new Array();  //定义一个新的数组用于存放组件的引用      
         var cx:int=0;
         var cy:int=0;
         var rx:int;
         var ry:int;//定义四个整形变量,用于计算绝对位置
         for(var i:int=0;i<equipments1.length;i++)//equipments1储存的是数据源
         {
           var coverdis:coverdisplay = new coverdisplay();//coverdisplay 为要展示的组件
                coverdisplays[i] = coverdis; //把组件的引用,给数组中方便以后的查找
                coverdisplays[i].showInAutomationHierarchy = true;
                coverdis.coverdata=equipments1[i];//给数据
                ry=i/5;
                cy=10+ry*130;
                coverdis.y=cy;
                coverdis.x=-100;
                canvas1.addChild(coverdis);//加到画布中增加组件
                coverdis.addEventListener(coversevent.SHOW,goodsdetails);//coversevent,为自定义事件在下面说明
                rx=i%5;
                if(rx==0) cx=16;
                if(rx==1) cx=192;
                if(rx==2) cx=368;
                if(rx==3) cx=544;
                if(rx==4) cx=720;          
                var move:Move= new Move(coverdis);
                            move.xTo =cx;
                            move.duration=2000;
                            move.play();   
                
         }
        }

   上面的代码为初始化,就是说确定的组件在容器中的位置。因为向画布中添加东西要确定位置,即:x,y 所以要进行计算。

   方法是

      1通过除法的商 和余数的方法, 例如 一排要4个就要/4 商是几,就是在第几行,余数是几就在第几列。

      2由于数组时从0开始的,故余数为0是第一列,1为第二列,例如数组a[]长度是5,最高的位是a[4] 4/4商1余0,所以在第二行第一列。

      3根据画布容器的大小计算xy的位置,也就是根据长和宽。计算位置的对应关系。

      4用 Move 移动组件使移到相应的位置。

  需要注意的几个问题是:

       找到每个组件的id ,由于用for循环所以每个组件的id是一样的,其实不然,我们每生成一个组件,都把它引用在一个数组中,每个组件的内容是不一样的

   所以要用的时候只要在数组中寻找相应的属性就行。

       需要做的就是,在组件中派发一个时间,里面要有相应的参数,说明我是谁,

   如   click="dispatchEvent(new coversevent(coversevent.SHOW,coverdata))" 在组件中派发了这么一个事件。

   当然这是一个自定义事件 ,在src 中创建一个ActionScript Class 代码如下。

  

package //注意包的位置
{
	import flash.events.Event;
	
	public class coversevent extends Event //继承event 类
	{   
		public static const SHOW:String = "show";//定义事件类型
		public var coverdata:Object;// 传递的参数,注意如果属性是对象的话,需要重写clone()函数
		
		public function coversevent(type:String, coverdata:Object)
		{
                                super(type);
                                 this.coverdata= coverdata;
                                 }
		
		override public function clone():Event   //重写clone 函数
                                {
                               return new coversevent(type,coverdata);
                                }
        
	}
}

   为什么要这样做,as 3的事件机制我们简单的说就是,监听和接受,但是event 里没有能传递参数的属性。要想传递参数,就要自定义事件类型。

   这样在事件派发的时候就能够传递想要的数据。

 

 

 三,有Hslider 实现数据的筛选

    hslider 的说明

<mx:HSlider  id="slider" x="93" y="29" width="581"
		 minimum="0" 
                                 maximum="1000" 
                                 values="[0,1000]" 
                                 labels="[0,500,1000]" 
                                 thumbCount="2" 
                                 showTrackHighlight="true" 
                                 snapInterval="1" 
                                 tickInterval="100" 
                                 liveDragging="true" 
                                 change="hsliderchange(event)"/>

   应该能看明白什么意思 change 属性只是激活一个函数,实际上没有筛选,

    equipments1.filterFunction=sliderFilterFunc;  filterFunction 为筛选属性,它是布尔型,前面 equipments1的类型为ArrayCollection,所以要设计函数

 

private function sliderFilterFunc(item:Object):Boolean { 
                var minSlider:uint = slider.values[0]; 
                var maxSlider:uint = slider.values[1]; 
                if ((item.price >= minSlider) && 
                            (item.price <= maxSlider)) { 
                    return true; 
                } else { 
                    return false; 
                } 
            } 

    完成对价格属性的筛选

 

四,实现对筛选后的移动

    其实已经很简单了,方法是,要知道筛选后增加了什么,删除了什么?在一次滑动中,显然只可能是增加,或删除,不可能是同时增加删除。

    那么需要有两个数组分别储存原有的数据,和增加或删除的数据,用分支语句分两种情况增加或删除,然后把剩下的没变化的组件移到新的位置上。

 

 

 

 程序在附件,rar 的 如果xml 加载不了要更改一下flash 的信任域.zip的为工程,直接导入就行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值