Flex变态的时间控件超级麻烦

时间控件需求描述:

通过前边时间跨度类型combobox的选择,动态改变textinput弹出的页面,当选择年的时候弹出只有年份的选择,当选择月份的时候显示年和月份的组合如下图:


好麻烦用了一个appliction应用组件,两个MXML,两个监听as文件,才显示出来。

大家有好的办法,可以联系我,我这个太麻烦了,个人感觉。

转载一个别人的:


通过NumericStepper自定义时间控件相对简单,在选择时间的时候可能会麻烦但是代码简单,我做了一点修改。

<?xml version="1.0" encoding="utf-8"?>
<s:Group 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="30" creationComplete="group1_creationCompleteHandler(event)">
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
	<s:layout> 
		<s:TileLayout  paddingLeft="5" />
	</s:layout>
	<s:HGroup>
		<mx:Label text="统计时段"/>
		<s:ComboBox  id="cbox_time" dataProvider="{_datetype}" labelField="value" width="40" change="cbox_time_changeHandler(event)">
		</s:ComboBox>
		<mx:TextInput x="0" y="0" width="100" height="25" editable="{initeditable}" id="returnTime_start" text="{initvalue}" click="open(event)"/>
		<mx:Button x="102" y="2" icon="@Embed(source='mx/controls/DateChooser.png')" fontWeight="normal" width="22" click="open(event)" height="22"/>
		<mx:TextInput x="0" y="0" width="100" height="25" editable="{initeditable_end}" id="returnTime_end" text="{initvalue_end}" click="open_end(event)"/>
		<mx:Button x="102" y="2" icon="@Embed(source='mx/controls/DateChooser.png')" fontWeight="normal" width="22" click="open_end(event)" height="22"/>
	</s:HGroup>
	<fx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			import mx.containers.HBox;
			import mx.containers.TitleWindow;
			import mx.controls.Alert;
			import mx.controls.Button;
			import mx.controls.Label;
			import mx.controls.NumericStepper;
			import mx.controls.Text;
			import mx.controls.TileList;
			import mx.core.IFlexDisplayObject;
			import mx.events.CloseEvent;
			import mx.events.FlexEvent;
			import mx.events.ListEvent;
			import mx.events.NumericStepperEvent;
			import mx.managers.PopUpManager;
			
			import spark.events.IndexChangeEvent;
		
		[Bindable]
		private var initvalue: String;
		
		[Bindable]
		private var initvalue_end: String;
		[Bindable]
		private var initeditable:Boolean;
		[Bindable]
		private var initeditable_end:Boolean;
		public var resultTime:Text;
		public var resultTime_end:Text;
		//168
		//年
		private var y_width:Number = 100;
		//年月
		private var ym_width:Number = 168;
		//年月日
		private var ymd_width:Number = 268;
		
		private var pop:Object;
		private var pop_end:Object;
		private var isOpen:Boolean = false;
		private var isOpen_end:Boolean = false;
		private var nowTime_start:Date = new Date();
		private var nowTime_end:Date = new Date();
		//时段标志
		private var dateflag:String;
		
			//统计时段combobox下拉值
			[Bindable]
			private var _datetype:ArrayCollection= new ArrayCollection([
				{value:"年",key:"year"},
				{value:"月",key:"month"},
				{value:"日",key:"day"}
				
			]);
		private function open(event:MouseEvent):void{
		resultTime = new Text();
		if(!isOpen)
		{
		pop = PopUpManager.createPopUp(this, TitleWindow, false); 
		pop.showCloseButton = true;
		pop.addEventListener(CloseEvent.CLOSE,closeHandler);
		pop.move(event.stageX+event.target.width-event.localX+5,event.stageY-event.localY);
		//pop.title = nowTime.fullYear.toString() + " 年 " + (nowTime.month+1) + " 月";
		pop.title = "日期选择";
		pop.setStyle("fontSize",12);
		
		
		var yearChangeHandler:Function = function(evt:NumericStepperEvent):void{
		nowTime_start.setFullYear(evt.value,nowTime_start.month,nowTime_start.date);
		PopUpManager.removePopUp(pop as IFlexDisplayObject);
		isOpen = false;
		open(event);
		}
		
		var monthChangeHandler:Function = function(evt:NumericStepperEvent):void{
		nowTime_start.setFullYear(nowTime_start.fullYear,evt.value-1,nowTime_start.date);
		PopUpManager.removePopUp(pop as IFlexDisplayObject);
		isOpen = false;
		open(event);
		}
			
		var dayChangeHandler:Function = function(evt:NumericStepperEvent):void{
			nowTime_start.setFullYear(nowTime_start.fullYear,nowTime_start.month,evt.value-1);
			PopUpManager.removePopUp(pop as IFlexDisplayObject);
			isOpen = false;
			open(event);
		}
		//开始时间
		var testHandler:Function = function(event:ListEvent):void{
		resultTime.text = nowTime_start.fullYear + "-" + (nowTime_start.month+1);
		returnTime_start.text =  resultTime.text;
		}
		//确定之后提交时间
		var onSubBtn_Click:Function = function(event:MouseEvent):void
		{
		if(dateflag=='year'){
			resultTime.text = nowTime_start.fullYear.toString() ;
			returnTime_start.text =  resultTime.text;
		}else if(dateflag=='month'){
			resultTime.text = nowTime_start.fullYear + "-" + (nowTime_start.month+1);
			returnTime_start.text =  resultTime.text;
		}else{
			resultTime.text = nowTime_start.fullYear + "-" + (nowTime_start.month+1)+ "-" +(nowTime_start.date+1) ;
			returnTime_start.text =  resultTime.text;
		}

		PopUpManager.removePopUp(pop as IFlexDisplayObject);
		isOpen = false;
		
		}
		
		
		
		//年
		var year:NumericStepper = new NumericStepper();
		year.setStyle("fontSize",10);
		year.stepSize = 1;
		year.minimum = 1999;
		year.maximum = 2999;
		year.width = 60;
		year.height = 20;
		year.value = nowTime_start.fullYear;
		year.addEventListener(NumericStepperEvent.CHANGE,yearChangeHandler);
		
		var y_label:Label = new Label();
		y_label.text = "年";
		y_label.setStyle("textAlign","center");
		y_label.width = 15;
		//月
		var month:NumericStepper = new NumericStepper();
		month.setStyle("fontSize",10);
		month.stepSize = 1;
		month.minimum = 0;
		month.maximum = 13;
		month.width = 50;
		month.height = 20;
		month.value = nowTime_start.month+1;
		month.addEventListener(NumericStepperEvent.CHANGE,monthChangeHandler);
		
		var m_label:Label = new Label();
		m_label.text = "月";
		m_label.setStyle("textAlign","center");
		m_label.width = 15;
		//日
		var day:NumericStepper = new NumericStepper();
		day.setStyle("fontSize",10);
		day.stepSize = 1;
		day.minimum = 1;
		day.maximum = 31;
		day.width = 50;
		day.height = 20;
		day.value = nowTime_start.date+1;
		day.addEventListener(NumericStepperEvent.CHANGE,dayChangeHandler);
		
		var d_label:Label = new Label();
		d_label.text = "日";
		d_label.setStyle("textAlign","center");
		d_label.width = 15;
		
		//
		var hBoxTop:HBox = new HBox();
		if(dateflag=='year'){
			hBoxTop.width = y_width;
			hBoxTop.addChild(year);
			hBoxTop.addChild(y_label);
		}else if(dateflag=='month'){
			hBoxTop.width = ym_width;
			hBoxTop.addChild(year);
			hBoxTop.addChild(y_label);
			hBoxTop.addChild(month);
			hBoxTop.addChild(m_label);
		}else{
			hBoxTop.width = ymd_width;
			hBoxTop.addChild(year);
			hBoxTop.addChild(y_label);
			hBoxTop.addChild(month);
			hBoxTop.addChild(m_label);
			hBoxTop.addChild(day);
			hBoxTop.addChild(d_label);
		}
		

		
		
		pop.addChild(hBoxTop);
		var subBtn:Button = new Button();
		subBtn.addEventListener(MouseEvent.CLICK,onSubBtn_Click);
		subBtn.label = "确定";
		pop.addChild(subBtn);
		isOpen = true;
		}
		else{
		PopUpManager.removePopUp(pop as IFlexDisplayObject);
		isOpen = false;
		}
		}
		
		private function closeHandler(event:CloseEvent):void{
		PopUpManager.removePopUp(event.target as IFlexDisplayObject);
		isOpen = false;
		}
		
		public function set text(str:String):void{
		initvalue = str ;
		}
		public function get text():String{
		return returnTime_start.text ;
		}
		
		public function set editable(str:Boolean):void{
		initeditable = str;
		}
		public function get editable(): Boolean{
		return returnTime_start.editable;
		}
			
			/**
			 * 
			 * 
			 * 
			 * */
			 
			private function open_end(event:MouseEvent):void{
				resultTime_end = new Text();
				if(!isOpen_end)
				{
					pop_end = PopUpManager.createPopUp(this, TitleWindow, false); 
					pop_end.showCloseButton = true;
					pop_end.addEventListener(CloseEvent.CLOSE,closeHandlerend);
					pop_end.move(event.stageX+event.target.width-event.localX+5,event.stageY-event.localY);
					//pop.title = nowTime.fullYear.toString() + " 年 " + (nowTime.month+1) + " 月";
					pop_end.title = "日期选择";
					pop_end.setStyle("fontSize",12);
					
					
					var yearChangeHandler_end:Function = function(evt:NumericStepperEvent):void{
						nowTime_end.setFullYear(evt.value,nowTime_end.month,nowTime_end.date);
						PopUpManager.removePopUp(pop_end as IFlexDisplayObject);
						isOpen_end = false;
						open_end(event);
					}
					
					var monthChangeHandler_end:Function = function(evt:NumericStepperEvent):void{
						nowTime_end.setFullYear(nowTime_end.fullYear,evt.value-1,nowTime_end.date);
						PopUpManager.removePopUp(pop_end as IFlexDisplayObject);
						isOpen_end = false;
						open_end(event);
					}
					
					var dayChangeHandler_end:Function = function(evt:NumericStepperEvent):void{
						nowTime_end.setFullYear(nowTime_end.fullYear,nowTime_end.month,evt.value-1);
						PopUpManager.removePopUp(pop_end as IFlexDisplayObject);
						isOpen_end = false;
						open_end(event);
					}
					//结束时间
					var testHandler_end:Function = function(event:ListEvent):void{
						resultTime_end.text = nowTime_end.fullYear + "-" + (nowTime_end.month+1);
						returnTime_end.text =  resultTime_end.text;
					}
					var onSubBtn_Click_end:Function = function(event:MouseEvent):void
					{
						if(dateflag=='year'){
							resultTime_end.text = nowTime_end.fullYear.toString();
							returnTime_end.text =  resultTime_end.text;
						}else if(dateflag=='month'){
							resultTime_end.text = nowTime_end.fullYear + "-" + (nowTime_end.month+1);
							returnTime_end.text =  resultTime_end.text;
						}else{
							resultTime_end.text = nowTime_end.fullYear + "-" + (nowTime_end.month+1) + "-" +(nowTime_end.date+1);
							returnTime_end.text =  resultTime_end.text;
						}
//						resultTime_end.text = nowTime_end.fullYear + "-" + (nowTime_end.month+1) + "-" +(nowTime_end.date+1);
//						returnTime_end.text =  resultTime_end.text;
						
						
						PopUpManager.removePopUp(pop_end as IFlexDisplayObject);
						isOpen_end = false;
						
					}
					
					//年
					var year:NumericStepper = new NumericStepper();
					year.setStyle("fontSize",10);
					year.stepSize = 1;
					year.minimum = 1999;
					year.maximum = 2999;
					year.width = 60;
					year.height = 20;
					year.value = nowTime_end.fullYear;
					year.addEventListener(NumericStepperEvent.CHANGE,yearChangeHandler_end);
					
					var y_label:Label = new Label();
					y_label.text = "年";
					y_label.setStyle("textAlign","center");
					y_label.width = 15;
					//月
					var month:NumericStepper = new NumericStepper();
					month.setStyle("fontSize",10);
					month.stepSize = 1;
					month.minimum = 0;
					month.maximum = 13;
					month.width = 50;
					month.height = 20;
					month.value = nowTime_end.month+1;
					month.addEventListener(NumericStepperEvent.CHANGE,monthChangeHandler_end);
					
					var m_label:Label = new Label();
					m_label.text = "月";
					m_label.setStyle("textAlign","center");
					m_label.width = 15;
					//日
					var day:NumericStepper = new NumericStepper();
					day.setStyle("fontSize",10);
					day.stepSize = 1;
					day.minimum = 1;
					day.maximum = 31;
					day.width = 50;
					day.height = 20;
					day.value = nowTime_end.date+1;
					day.addEventListener(NumericStepperEvent.CHANGE,dayChangeHandler_end);
					
					var d_label:Label = new Label();
					d_label.text = "日";
					d_label.setStyle("textAlign","center");
					d_label.width = 15;
					
					//
					var hBoxTop_end:HBox = new HBox();
					if(dateflag=='year'){
						hBoxTop_end.width = y_width;
						hBoxTop_end.addChild(year);
						hBoxTop_end.addChild(y_label);
					}else if(dateflag=='month'){
						hBoxTop_end.width = ym_width;
						hBoxTop_end.addChild(year);
						hBoxTop_end.addChild(y_label);
						hBoxTop_end.addChild(month);
						hBoxTop_end.addChild(m_label);
					}else{
						hBoxTop_end.width = ymd_width;
						hBoxTop_end.addChild(year);
						hBoxTop_end.addChild(y_label);
						hBoxTop_end.addChild(month);
						hBoxTop_end.addChild(m_label);
						hBoxTop_end.addChild(day);
						hBoxTop_end.addChild(d_label);
					}
					
					
					pop_end.addChild(hBoxTop_end);
					var subBtn:Button = new Button();
					subBtn.addEventListener(MouseEvent.CLICK,onSubBtn_Click_end);
					subBtn.label = "确定";
					pop_end.addChild(subBtn);
					isOpen_end = true;
				}
				else{
					PopUpManager.removePopUp(pop_end as IFlexDisplayObject);
					isOpen_end = false;
				}
			}
			
			private function closeHandlerend(event:CloseEvent):void{
				PopUpManager.removePopUp(event.target as IFlexDisplayObject);
				isOpen_end = false;
			}
			
			public function set text_end(str:String):void{
				initvalue_end = str ;
			}
			public function get text_end():String{
				return returnTime_end.text ;
			}
			
			public function set editable_end(str:Boolean):void{
				initeditable_end = str;
			}
			public function get editable_end(): Boolean{
				return returnTime_end.editable;
			}
			//当统计时段发生变化时记录统计标志年月日
			protected function cbox_time_changeHandler(event:IndexChangeEvent):void
			{
				if(cbox_time.selectedIndex==0){
					dateflag='year';
				}else if(cbox_time.selectedIndex==1){
					dateflag='month';
				}else {
					dateflag='day';
				}
				//trace(dateflag);
				//清空时间控件值
				returnTime_start.text='';
				returnTime_end.text='';
			}
			
			protected function group1_creationCompleteHandler(event:FlexEvent):void
			{
				// TODO Auto-generated method stub
				cbox_time.selectedIndex=0;
				dateflag='year';
			}
			
		]]>
	</fx:Script>
</s:Group>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值