dateField添加时分秒显示(优化)

在网上找的,进行优化完善...

myChooseTime

package com.gps.view.component.nmsDateFiled
{
	import flash.events.Event;
	
	import mx.containers.HBox;
	import mx.containers.Panel;
	import mx.controls.ComboBox;
	import mx.controls.Label;
	import mx.formatters.DateFormatter; 

	public class myChooseTime extends Panel
	{
		public var nmsHour:ComboBox;
		public var nmsMinute:ComboBox;
		public var nmsSeconds:ComboBox;
		
		public var timesBox:HBox ;
		public var lblMinute:Label;
		public var lblSeconds:Label;
		
		private var chooseDate:Date;
		
		private var hDataSource:Array = ["00","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23"];
		private var msDataSource:Array = ["00","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59"];
		private var backGroundColor:Array = ["white","white","white","white"];
		
		public function myChooseTime()
		{
			super();
			this.width = 200;
			this.height = 25;
			this.setStyle("headerHeight", 0);  
			this.setStyle("borderStyle", "solid");  
			this.setStyle("borderThicknessLeft", 1);  
			this.setStyle("borderThicknessRight", 1);  
			this.setStyle("cornerRadius", 0);  
			
			
			
			timesBox=new HBox();  
			timesBox.setStyle("horizontalGap", "0");  
		    timesBox.setStyle("verticalGap", "0");  
			timesBox.setStyle("verticalAlign", "middle");  
			timesBox.setStyle("backgroundColor", "white");  
		    timesBox.setStyle("paddingLeft", "5");  
			timesBox.setStyle("paddingBottom", "2");  
			timesBox.setStyle("borderStyle", "none");  

		}
		
		protected override function childrenCreated():void
		{
			super.createChildren();  
			
		    if (!nmsHour)  
		    {  
			   nmsHour=new ComboBox();  
			   nmsHour.width=55;  
			   nmsHour.height=18;
			   nmsHour.dataProvider=hDataSource;  
			   nmsHour.setStyle("cornerRadius", "0");  
			   nmsHour.setStyle("fontSize", "10");  
			   nmsHour.setStyle("fillColors", backGroundColor);  
			   nmsHour.addEventListener("change", updateValue);  
			   nmsHour.editable = false;
	        }  
			  
			if (!lblMinute)  
			{  
		       lblMinute=new Label();  
			   lblMinute.width=10;  
			   lblMinute.text=":";  
	        }  
		 
		    if (!nmsMinute)  
			{  
			   nmsMinute=new ComboBox();  
			   nmsMinute.width=55;  
			   nmsMinute.height=18;  
			   nmsMinute.dataProvider=msDataSource;  
			   nmsMinute.setStyle("fontSize", "10");  
			   nmsMinute.setStyle("cornerRadius", "0");  
			   nmsMinute.setStyle("fillColors", backGroundColor);  
			   nmsMinute.addEventListener("change", updateValue);  
			   nmsMinute.editable = false;
	        }  
			  
		    if (!lblSeconds)  
		    { 
			   lblSeconds=new Label();  
			   lblSeconds.width=10;  
			   lblSeconds.text=":";  
		    }  
			 
		    if (!nmsSeconds)  
			{  
			   nmsSeconds=new ComboBox();  
			   nmsSeconds.width=55;  
			   nmsSeconds.height=18;  
			   nmsSeconds.setStyle("fontSize", "10");  
			   nmsSeconds.setStyle("cornerRadius", "0");  
		       nmsSeconds.setStyle("fillColors", backGroundColor);  
		       nmsSeconds.dataProvider=msDataSource; 
	           nmsSeconds.addEventListener("change", updateValue);  
			   nmsSeconds.editable = false;
		    }  
			  
			   timesBox.addChild(nmsHour);  
			   timesBox.addChild(lblMinute);  
			   timesBox.addChild(nmsMinute);  
			   timesBox.addChild(lblSeconds);  
			   timesBox.addChild(nmsSeconds);  
			 
			   this.addChild(timesBox);  
			   this.parent.addEventListener("change", updateValue);
               
			   setTimesValue();
		}
		
	    private function setTimesValue():void
		{
			var dateChooser:myDateChooser=this.parent as myDateChooser; 
			var dateField:myDateFiled=dateChooser.owner as myDateFiled;
			var timesStr:String = dateField.text;
//			var timeStr:String = timesStr.substring(timesStr.indexOf(" ")+1,timesStr.length);
//			var timeArray:Array = timeStr.split(':');
			var strDate:Date  = DateFormatter.parseDateString(timesStr);//格式化string到date
            nmsHour.selectedIndex = int(strDate.hours);
			nmsMinute.selectedIndex = int(strDate.minutes);                     
			nmsSeconds.selectedIndex = int(strDate.seconds);
			dateChooser.displayedYear = int(strDate.fullYear);
			dateChooser.displayedMonth = int(strDate.month);
			dateField.selectedDate = DateFormatter.parseDateString(timesStr.substring(0,timesStr.indexOf(" ")));
		}
		
		//当下拉时分秒下拉框的值改变的时候,动态修改日期控制的textinput的显示值   
	    private function updateValue(event:Event):void  
        {  
		   if (this.parent is myDateChooser)  
			{  
		        var dateChooser:myDateChooser=this.parent as myDateChooser;  
				var dateField:myDateFiled=dateChooser.owner as myDateFiled; 
			   //若没有选择日期则默认为已经选中的日期
				if(dateChooser.selectedDate == null){
				    var timesStr:String = dateField.text;
				    chooseDate  = DateFormatter.parseDateString(timesStr.substring(0,timesStr.indexOf(" ")));//格式化string到date
				}
				else
				{
				    chooseDate = dateChooser.selectedDate;
				}
			   if (dateChooser.owner is myDateFiled)  
	           {  
				   dateField.selectedDate =chooseDate;
			       dateField.labelFunction=formatDateTemp;  
			   }  
		   }  
	   }  
		
		//日期显示格式   
	    private function formatDateTemp(date:Date):String  
		{
		   if (date == null)  
		   {  
		       date=chooseDate;  
            }  
			
		   date.hours=(Number)(nmsHour.selectedItem);  
	       date.minutes=(Number)(nmsMinute.selectedItem);  
	       date.seconds=(Number)(nmsSeconds.selectedItem);  
			
	       var df:DateFormatter=new DateFormatter();  
           df.formatString="YYYY-MM-DD JJ:NN:SS";  
			
           var times:String=df.format(date);  
		   return times;  
	      }  


	}
}
package com.gps.view.component.nmsDateFiled
{
	import mx.controls.DateChooser;

	public class myDateChooser extends DateChooser
	{
		public var myTimes:myChooseTime;
		
		public function myDateChooser()
		{
			super();
			this.width = 200;
			this.height = 200;
			this.setStyle("fontSize", "12");
			this.yearNavigationEnabled = true;
			this.showToday = false;
			myTimes = new myChooseTime();
			myTimes.x = 0;
			myTimes.y = 200;
			
			
		}
		
		protected override function createChildren():void
		{
		   super.createChildren();
		   addChild(myTimes);
		}
	}
}

myDateFiled

package com.gps.view.component.nmsDateFiled
{
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;
	
	import mx.controls.DateField;
	import mx.core.ClassFactory;
	import mx.events.CalendarLayoutChangeEvent;
	import mx.formatters.DateFormatter;  

	public class myDateFiled extends DateField
	{
		public function myDateFiled()
		{
			super();
			this.formatString = "yyyy-mm-dd";
			this.dayNames = ["日","一","二","三","四","五","六"];
			this.monthNames = ["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"];
			this.dropdownFactory = new ClassFactory(myDateChooser);
			this.labelFunction=formatDate;  
		    this.editable=false;  
		    this.addEventListener(CalendarLayoutChangeEvent.CHANGE, showDateChooser);  
		    this.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown);  

//			this.addEventListener("change",setSelectedDate);
		}
		
		private function formatDate(currentDate:Date):String
		{
		    var dateFormatter:DateFormatter = new DateFormatter();
			dateFormatter.formatString = "YYYY-MM-DD JJ:NN:SS";
			currentDate = new Date();
			var timeStr:String = dateFormatter.format(currentDate);
			return timeStr;
		}
		
//		private function setSelectedDate():void
//		{
//		    this.selectedDate = DateFormatter.parseDateString(this.text.substring(0,this.text.indexOf(" ")))
//		}
		
		private function showDateChooser():void
		{
		   this.open();
//		   this.selectedDate = DateFormatter.parseDateString(this.text.substring(0,this.text.indexOf(" ")));
		}
		
		private function handleKeyDown(event:KeyboardEvent):void
		{
			if (event.keyCode == Keyboard.ENTER)  
			{         
		        var tempNmsDateChooser:myDateChooser=this.dropdown as myDateChooser;  
		        tempNmsDateChooser.myTimes.nmsHour.close();  
			    tempNmsDateChooser.myTimes.nmsMinute.close();  
		        tempNmsDateChooser.myTimes.nmsSeconds.close();  
			 }  

		}
	}
}

 

posted @ 2012-11-15 10:59  刀锋浪  阅读(575)  评论(0编辑  收藏  举报