现在的位置: 首页 > 综合 > 正文

Flex4 DateField自定义的日期选择控件,可选择时分秒

2014年09月05日 ⁄ 综合 ⁄ 共 6441字 ⁄ 字号 评论关闭

YJQDateField.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:HGroup xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx"
    horizontalAlign="left"
    width="176" height="22">
 <fx:Declarations>
  <!-- 将非可视元素(例如服务、值对象)放在此处 --> 
 </fx:Declarations>
 <fx:Script>
  <![CDATA[
   import mx.controls.DateField;
   import mx.core.FlexGlobals;
   import mx.core.INavigatorContent;
   import mx.formatters.DateFormatter;
   import mx.managers.PopUpManager;
   
   [Bindable]
   /**
    * 控件是否可以直接输入日期
    */
   public var editable:Boolean;
   
   [Bindable]
   /**
    * 日期格式  YYYY MM DD HH NN SS
    */
   public var formatString:String ="YYYY-MM-DD HH:NN:SS";
   
   [Bindable]
   private var _date:Date = new Date();
   
   private var _year:int=0,_month:int=0,_day:int=0,_hour:int=0,_minute:int=0,_second:int=0;
   
   /**
    * 设置显示日期字符串
    */
   public function set text(value:String):void
   {
    _date=DateFormatter.parseDateString(value);    
   }
   
   /**
    * 设置日期
    */
   public function set date(value:Date):void
   {
    _year = value.fullYear;
    _month = value.month;
    _day =value.day;
    _minute=value.minutes;
    _hour=value.hours;
    _second=value.seconds; 
    _date = value; 
   }
   
   /**
    * 获取控件时间
    */
   public function get date():Date
   {
    return _date;
   }
   
   /**
    * 获取Chooser日期
    */
   public function  onGetDate(y:int,mo:int,d:int,h:int,mi:int,s:int):void
   {
    this._year=y;
    this._month = mo;
    this._day = d;
    this._hour = h;
    this._minute = mi;
    this._second = s;
    _date = new Date(_year,_month,_day,_hour,_minute,_second);
    _inSelected = false;
   }   
   
   private var _inSelected:Boolean = false;
   
   /**
    * 选择年月日
    */
   protected function chooseDate_LBtn_clickHandler(event:MouseEvent):void
   {
    // TODO Auto-generated method stub
    if(_inSelected == true)
     return ;
    var dateChooser:YJQChooseDate = new YJQChooseDate();     
    dateChooser.setDate(date.fullYear,date.month,date.date,date.hours,date.minutes,date.seconds);    
    dateChooser.onReturnTime = onGetDate;
    dateChooser.cancelHandler = function():void
    {
     _inSelected = false;
    }
    dateChooser.x = event.stageX;
    dateChooser.y = event.stageY;
    PopUpManager.addPopUp(dateChooser,FlexGlobals.topLevelApplication as DisplayObject);
    _inSelected = true;
   }  
   
   private  function DateToString(d:Date,format:String):String
   {
    //YYYY-MM-DD HH:NN:SS
    var str:String = format;
    str=str.replace("YYYY",d.fullYear);
    str = str.replace("MM",d.month+1);
    str=str.replace("DD",d.date);
    str=str.replace("HH",d.hours);
    str=str.replace("NN",d.minutes);
    str=str.replace("SS",d.seconds);
    return str;
   }
   
   override public function toString():String
   {
    return DateToString(_date,formatString);
   }
  ]]>
 </fx:Script>
 <s:TextInput id="date_input"  text="{DateToString(_date,formatString)}"  height="100%" width="100%" /> 
 <mx:LinkButton label=">>" id="chooseDate_LBtn" click="chooseDate_LBtn_clickHandler(event)" />
 
 
</s:HGroup>

YJQChooseDate.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:BorderContainer 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="200" maxWidth="200"
    minHeight="260" maxHeight="260"      
    width="200" height="260">
 <fx:Declarations>
  <!-- 将非可视元素(例如服务、值对象)放在此处 -->
 </fx:Declarations>
 <fx:Script>
  <![CDATA[
   import mx.events.FlexEvent;
   import mx.managers.PopUpManager;
   /**
    * year month day  hour  minute second
    */
   public var onReturnTime:Function;
   
   [Bindable]
   private var _hour:int = 0;
   
   [Bindable]
   private var _minute:int =0;
   
   [Bindable]
   private var _second:int =0;
   
   private var _year:int,_month:int,_day:int;
   
   /**
    * 设置日期
    */
   public function setDate(year:int,month:int,day:int ,hour:int,minute:int,second:int):void
   {
    _year=year;
    _month=month;
    _day=day;
    _hour = hour;
    _minute=minute;
    _second=second;
   }
   /**
    * 输入小时是否合理
    */
   protected function hour_focusOutHandler(event:FocusEvent):void
   {
    if(isNaN(Number(hour.text)))
    {
     hour.text=_hour.toString();
     return;
    }
    _hour = int(hour.text);
    if(_hour<0)
     _hour=0;
    else if(_hour>23)
     _hour=23;
    hour.text = _hour.toString();    
   }
   /**
    * 输入分钟是否合理
    */
   protected function minute_focusOutHandler(event:FocusEvent):void
   {
    if(isNaN(Number(minute.text)))
    {
     minute.text=_minute.toString();
     return;
    }
    _minute = int(minute.text);
    if(_minute<0)
     _minute=0;
    else if(_minute>59)
     _minute=59;
    minute.text = _minute.toString(); 
   }
   /**
    * 输入秒是否合理
    */
   protected function second_focusOutHandler(event:FocusEvent):void
   {
    if(isNaN(Number(second.text)))
    {
     second.text=_second.toString();
     return;
    }
    _second = int(second.text);
    if(_second<0)
     _second=0;
    else if(_second>59)
     _second=59;
    second.text = _second.toString(); 
   }
   /**
    * 双击代表选择
    */
   protected function vgroup1_doubleClickHandler(event:MouseEvent):void
   {
    ok_clickHandler(null);
   }
   /**
    * 返回日期
    */
   protected function ok_clickHandler(event:MouseEvent):void
   {
    // TODO Auto-generated method stub
    var date:Date = dateChosser.selectedDate;    
    onReturnTime(date.fullYear,date.month,date.day,_hour,_minute,_second);
    try
    {
     PopUpManager.removePopUp(this);
    }
    catch(error:Error)
    {
     this.parent.removeChild(this);
    }
   }
   public var cancelHandler:Function;
   
   /**
    * 取消日期选择
    */
   protected function cancel_clickHandler(event:MouseEvent):void
   {
    try
    {
     PopUpManager.removePopUp(this);
    }
    catch(error:Error)
    {
     this.parent.removeChild(this);
    }
    cancelHandler();
   }

   /**
    * DateChooser加载完成后执行
    */
   protected function dateChosser_creationCompleteHandler(event:FlexEvent):void
   {
    // TODO Auto-generated method stub
    dateChosser.selectedDate .setFullYear(_year,_month,_day);    
   }
  ]]>
 </fx:Script>
 <s:VGroup width="100%" height="100%" >
  <mx:DateChooser width="100%" id="dateChosser"   >
   
  </mx:DateChooser>
  <s:HGroup paddingTop="0" paddingLeft="10" width="100%" horizontalAlign="left">
   <s:TextInput id="hour"  width="23" text="{this._hour.toString()}"  focusOut="hour_focusOutHandler(event)" />
   <s:Label paddingTop="4" text="时:"   />
   
   <s:TextInput id="minute"  width="21" text="{this._minute.toString()}"  focusOut="minute_focusOutHandler(event)"/>
   <s:Label paddingTop="4" text="分:"    />
   
   <s:TextInput id="second"  width="22" text="{this._second.toString()}"  focusOut="second_focusOutHandler(event)"/>
   <s:Label paddingTop="4" text="秒:" />
  </s:HGroup>
  <s:HGroup width="100%" horizontalCenter="true" >
   <s:Button label="确定" id="ok" click="ok_clickHandler(event)" />
   <mx:Spacer width="100%" />
   <s:Button label="取消" id="cancel" click="cancel_clickHandler(event)" />
  </s:HGroup>
 </s:VGroup>
 
 
</s:BorderContainer>

测试文件

<?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" 
      creationComplete="application1_creationCompleteHandler(event)"
      xmlns:supportClasses="com.esri.ags.skins.supportClasses.*" 
      minWidth="955" minHeight="600" xmlns:YJQDateField="YJQDateField.*">
 <s:layout>
  <supportClasses:AttachmentLayout/>
 </s:layout>
 <fx:Script>
  <![CDATA[
   import mx.controls.Alert;
   import mx.events.FlexEvent;
   import mx.formatters.DateFormatter;
   protected function application1_creationCompleteHandler(event:FlexEvent):void
   {
    // TODO Auto-generated method stub
    var date:Date = DateFormatter.parseDateString("2011-08-06 14:21:25");
   }
  ]]>
 </fx:Script>
 <fx:Declarations>
  <!-- 将非可视元素(例如服务、值对象)放在此处 -->
 </fx:Declarations>
 <YJQDateField:YJQDateField />
</s:Application>

抱歉!评论已关闭.