`

flex自定义日期控件算法实现

    博客分类:
  • flex
阅读更多

前段时间在一间小公司里做过一段时间,其中有一项是实现一个自定义的日期控件,原因是flex本身并没有项目需求上需要的现成的控件提供,于是上网搜索了一下,除了js的实现一大把外,as的都没有(有的话可以留言告诉我,。。),想继承flex的日期控件改造,似乎又觉得有点过于麻烦,于是自己根据日期的算法,写了个日期控件,以下是算法的简单实现:

 

package date
{
	import flash.events.Event;
	//create by minn qq:394286006 2010-12-11
	public class DateSelectEvent extends Event
	{
		public static var DATE_SELECT_CHANGE:String="dateSelectChange";
				
		private var _data:Object;
		
		public function DateSelectEvent(type:String,_d:Object, bubbles:Boolean=false, cancelable:Boolean=false)
		{
			super(type, bubbles, cancelable);
			this._data=_d;
		}
		
		public function set data(da:Object):void{
			this._data=da;
		}
		
		public function get data():Object{
			return this._data;
		}
	}
}

 

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox 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="190" verticalGap="0" fontSize="15" height="190" cornerRadius="5" creationComplete="completeHandler(event)" backgroundColor="#F5F2F2">
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			//create by minn qq:394286006 2010-12-11
			
			import mx.controls.Alert;
			import mx.controls.Button;
			import mx.events.FlexEvent;
			import mx.managers.PopUpManager;
			
			private var currentyear:String;
			private var currentmonth:String;
			private var currentday:String;
			
			private var selyear:String;
			private var selmonth:String;
			private var selday:String;
			
			private function TimeShow():void{
				var d:Date=new Date(); 
				currentyear=d.getFullYear().toString();
				currentmonth=(d.getMonth()+1).toString();
				currentday=d.getDate().toString();
				if(int(currentday)<10)
					currentday="0"+currentday;
				
			}
			
			private var hourses:Array=[];
			private var mins:Array=[];
			private var seconds:Array=[];
			private function completeHandler(evt:FlexEvent):void{
				TimeShow();
				year_id.text=currentyear;
				month_id.text=currentmonth;
				go2date(int(currentyear),int(currentmonth)-1);
			}
			private function go2date(curyear:Number,curmonth:Number):void{
				var curD:Date=new Date(curyear,curmonth,1);
				var curmaxday:Number=maxDay(curD);
				var row:Number=curmaxday/7;
				var firstdaycurmonth:Number=curD.getDay();
				var countday:int=1;
				for(var i:int=0;i<row;i++){
					var hb:HBox=new HBox();
					hb.height=18;
					hb.setStyle("horizontalGap",8);
					for(var j:int=0;j<7;j++){
						var b:DrawDate=new DrawDate();
						b.width=18;
						b.width=18				
						if(countday<=curmaxday){
							
							if(i==0)
							{
								if(j>=firstdaycurmonth){
									if(countday<10)
										b.text="0"+countday+'';	
									else{
										b.text=countday+'';	
									}
									countday++;
								}
							}else {
								if(countday<10)
									b.text="0"+countday+'';	
								else
									b.text=countday+'';
								countday++;
							}
						}
						
						hb.addChild(b);
					
					}
					day_id.addChild(hb);
				}
			}
			
			
			private function preyear_clickHandler():void{
				day_id.removeAllChildren();
				var m:int=int(month_id.text);
				var y:int=int(year_id.text);
				year_id.text=(y-1).toString();
				go2date(y-1,m);
				
			}
			
			private function nextyear_clickHandler():void{
				day_id.removeAllChildren();
				var m:int=int(month_id.text);
				var y:int=int(year_id.text);
				year_id.text=(y+1).toString();
				go2date(y+1,m);
			}
			private function premonth_clickHandler():void{
				day_id.removeAllChildren();
				var m:int=int(month_id.text);
				var y:int=int(year_id.text);
				if(m==1){
					m=12;
					y=y-1;
					year_id.text=y.toString();
					
				}
				month_id.text=(m-1).toString();
				go2date(y,m-1);
			}
			
			private function nextmonth_clickHandler():void{
				day_id.removeAllChildren();
				var m:int=int(month_id.text);
				var y:int=int(year_id.text);
				if(m==12){
					m=0;
					year_id.text=(y+1).toString();
				}
		
				   month_id.text=(m+1).toString();
				go2date(y,m);
			}
			
			private function maxDay(d:Date):Number{
				var temp:Number=0;
				var year:Number=d.getFullYear();
				var month:Number=d.getMonth()+1;
				if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
					temp= 31;
				}else if(month==4||month==6||month==9||month==11){
					temp= 30
				}else if(month==2){
					var dd:Date=new Date(year+"/2/29");
					if(dd.getMonth()==1)temp= 29;
					else temp= 28;
					
				}
				return temp;
			}
			
		]]>
	</fx:Script>
	<mx:HBox horizontalGap="0" paddingTop="8" paddingLeft="5" paddingRight="5" backgroundColor="#81B6F8" color="#FEFEFE">
		<mx:Label useHandCursor="true" buttonMode="true" click="preyear_clickHandler()" text="《《"/><s:Label id="year_id" text="2010" paddingTop="1" /><s:Label text="年"/><mx:Label  useHandCursor="true" text="》》" buttonMode="true" click="nextyear_clickHandler()"/>
		<mx:Spacer width="16"/><mx:Label  useHandCursor="true" text="《《" buttonMode="true" click="premonth_clickHandler()"/><s:Label id="month_id" text="12" paddingTop="1" width="16"/><s:Label text="月"/><mx:Label  text="》》" useHandCursor="true" buttonMode="true" click="nextmonth_clickHandler()"/>
		<mx:Spacer width="6"/>
	</mx:HBox>
	<mx:HBox paddingLeft="6" fontSize="18" width="100%" backgroundColor="#9ADFF9">
		<s:Label text="日"/><s:Label text="一"/><s:Label text="二"/><s:Label text="三"/><s:Label text="四"/><s:Label text="五"/><s:Label text="六"/>
	</mx:HBox>
	<mx:VBox paddingLeft="5" id="day_id"/>
</mx:VBox>

 

<?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/mx" minWidth="955" minHeight="600" xmlns:date="date.*">
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
	</fx:Declarations>
	<date:LocalDateChooser x="136" y="55" width="343" height="275">
	</date:LocalDateChooser>
</s:Application>

 

0
0
分享到:
评论

相关推荐

    Flex 热点地图控件

    在Flex中,热力地图的实现通常基于ActionScript 3,这是一种面向对象的编程语言,与Flash Player和Adobe AIR平台紧密集成。开发者需要理解ActionScript 3的基础知识,包括类、对象、事件处理和图形绘制等概念,以便...

    flex 4 chart 控件

    - Flex 4的Chart控件提供了丰富的样式和主题选项,可以自定义颜色、线条样式、填充效果等,以满足设计需求。 - 用户还可以定制图表的轴、网格线、图例、标题等元素的样式。 4. **交互性**: - 图表支持用户交互...

    flex 自动完成控件(类似google输入框)

    以上就是实现Flex中类似Google输入框的自动完成控件所需掌握的主要知识点。通过熟练应用这些技术,可以构建出高效且用户友好的自动完成组件。在实际项目中,还需要根据具体需求和业务逻辑进行适当的调整和扩展。

    flex 街景控件

    Flex街景控件是一种基于Adobe Flex技术实现的交互式街景浏览工具,它允许开发者通过一个360度的全景图像来创建虚拟的街景体验。在本文中,我们将深入探讨Flex街景控件的核心概念、开发过程以及如何在Flash Builder中...

    Flex 通过年月控制日历

    通过自定义组件和事件处理,我们可以实现年月控件、日历控件(阳历和阴历)、级联功能以及单击双击交互,从而满足用户在日期选择上的各种需求。对于Flex开发者来说,掌握这些技术将极大地提升他们的开发效率和应用...

    重绘ComBox控件实现换行 当文本达到一定长度时实现换行

    2. **自定义控件绘制**: 当标准的ComBox控件无法满足特定需求时,我们需要对控件进行重绘。在Windows编程中,可以通过处理`WM_PAINT`消息来实现自定义绘制。在这个消息的处理函数中,我们可以调用GDI(Graphics ...

    FlexCompress.Component.for.Delphi.7.v2.59.WinALL.Retail.Incl

    FlexCompress支持的压缩算法可能包括常见的如ZIP、RAR、7Z等,也可能包含自定义或专有的算法,以提供更高效的数据压缩效果。通过API接口,开发者可以在自己的程序中调用这些功能,实现文件的快速打包和解包,优化...

    用Flex写的照片旋转

    Flex提供了一系列内置组件,如Image控件,可以方便地用于显示图像,同时,通过自定义动作和事件处理,可以实现照片的旋转功能。用户可以通过拖动或者点击按钮来改变照片的角度,体验流畅的旋转效果。 在标签中,...

    arcgis-viewer-flex-3.7-src

    源代码中包含了这些功能的实现,有助于开发者理解和实现更复杂的地理分析算法。 7. **性能优化**:源代码还包含了性能优化的策略,例如缓存机制、异步加载和分块加载等,这可以帮助开发者在处理大量数据或高并发...

    flex 智能提示框

    综上所述,Flex智能提示框是通过结合Flex控件、ActionScript编程和数据绑定实现的,它为用户提供了一种高效的交互方式,提高了搜索和输入体验。在实际开发中,了解并掌握这些知识点有助于创建更加友好和智能的用户...

    Flex DataGrid 内嵌AutoCompleteDataGrid

    这可以通过在自定义CellEditor中添加一个下拉列表控件并填充匹配结果来实现。 5. **事件处理**:当用户从提示列表中选择一个条目或手动完成输入时,需要捕获相关事件并更新数据源,确保DataGrid显示最新的数据。 6...

    flex 电子地图 实例

    9. **互动功能**:例如,热区(热力图)、路线规划、测量距离等功能可以通过额外的组件和算法实现,提供丰富的用户体验。 10. **数据集成**:地图应用常常需要集成各种数据源,如GIS数据、人口统计信息、天气数据等...

    Flex的组件

    Flex是Adobe公司开发的一种基于ActionScript ...综上所述,高级checkboxTree的实现涉及Flex组件定制、数据绑定、事件处理、过滤算法等多个方面,通过这些知识的综合运用,可以创建出具有高效过滤和多选功能的树形组件。

    twaver-flex中文用户手册

    6. **布局算法**:讨论内置的各种自动布局算法,如力导向布局、树状布局、环形布局等,以及如何自定义布局策略。 7. **事件处理**:说明如何监听和响应图形元素及图表的事件,实现复杂的用户交互逻辑。 8. **动画...

    Flex自动完成源代码[类似Google搜索自动完成功能].zip

    这个压缩包“Flex自动完成源代码[类似Google搜索自动完成功能].zip”包含了一个实现自动完成功能的Flex组件,这在许多Web应用中都非常常见,如搜索引擎、表单输入等,能够提升用户体验,帮助用户快速找到或输入目标...

    jquery+flex+自动补全

    Flex提供了丰富的组件库,包括各种可自定义的输入控件,如文本输入框,非常适合构建具有高级交互功能的UI。 **自动补全实现原理** 1. **事件监听**:jQuery通过`keyup`或`input`事件监听用户在输入框中的输入行为...

    lb.rar_flex

    在LabVIEW中,"lb.vi"可能是一个自定义的虚拟仪器,用于实现中值滤波算法。LabVIEW是一款图形化编程环境,专为数据采集、测试测量和控制系统设计。在这个VI中,开发者可能已经封装了中值滤波的算法,并提供了一些...

    as2.0写得拓扑算法(gis开发人员可用)

    7. **Flex框架**:代码中大量使用了 Flex 框架的组件和事件,如 `Canvas`、`Image` 和 `Label`,这些都是Flex容器和控件的一部分,表明这个拓扑图是在Flash/Flex环境中创建的。 通过这个AS2.0的拓扑算法,GIS开发...

    TweenLite控件包(含部分付费插件)

    这个控件包以其高效、易用和功能全面而闻名,被广泛应用于创建复杂的视觉效果和流畅的用户界面动画。它允许开发者轻松地在AS3(ActionScript 3.0)环境中创建平滑的补间动画,无需深入理解底层的动画实现细节。 ...

    AdvancedDataGrid 对sdk3.5不支持,对3.2支持方案(合并单元格)

    在Flex开发中,AdvancedDataGrid组件是一个强大的数据网格控件,它提供了丰富的功能,如分组、排序、过滤以及自定义列渲染等。然而,针对Adobe Flex SDK 3.5版本,AdvancedDataGrid存在一些兼容性问题,这使得在该...

Global site tag (gtag.js) - Google Analytics