TimeChooser.mxml
<?xml version="1.0" encoding="utf-8"?> <mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="165" height="25"> <mx:TextInput x="0" y="0" width="140" height="25" editable="{initeditable}" id="returnTime" text="{initvalue}"/> <mx:Button x="142" y="2" icon="@Embed(source=\'mx/controls/DateChooser.png\')" fontWeight="normal" width="22" click="open(event)" height="22"/> <mx:Script> <![CDATA[ import mx.events.NumericStepperEvent; import mx.controls.NumericStepper; import mx.events.ListEvent; import mx.controls.Label; import mx.containers.HBox; import mx.controls.TileList; import mx.core.IFlexDisplayObject; import mx.events.CloseEvent; import mx.controls.Button; import mx.controls.Alert; import mx.managers.PopUpManager; import mx.containers.TitleWindow; import mx.controls.Text; [Bindable] private var initvalue: String; [Bindable] private var initeditable:Boolean; public var resultTime:Text; private var m_width:Number = 168; private var pop:Object; private var isOpen:Boolean = false; private var nowTime:Date = new Date(); 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.setFullYear(evt.value,nowTime.month,nowTime.date); PopUpManager.removePopUp(pop as IFlexDisplayObject); isOpen = false; open(event); } var monthChangeHandler:Function = function(evt:NumericStepperEvent):void{ nowTime.setFullYear(nowTime.fullYear,evt.value-1,nowTime.date); PopUpManager.removePopUp(pop as IFlexDisplayObject); isOpen = false; open(event); } var minuteChangeHandler:Function = function(evt:NumericStepperEvent):void{ nowTime.setHours(nowTime.hours,evt.value,nowTime.seconds,nowTime.milliseconds); } var hourChangeHandler:Function = function(evt:NumericStepperEvent):void{ nowTime.setHours(evt.value,nowTime.minutes,nowTime.seconds,nowTime.milliseconds); } var testHandler:Function = function(event:ListEvent):void{ resultTime.text = nowTime.fullYear + "-" + (nowTime.month+1) + "-" + event.target.selectedItems + " " +hour.value + ":" + minute.value + ":" +nowTime.seconds; returnTime.text = resultTime.text; } var hBoxTop:HBox = new HBox(); hBoxTop.width = m_width; 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.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.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; hBoxTop.addChild(year); hBoxTop.addChild(y_label); hBoxTop.addChild(month); hBoxTop.addChild(m_label); pop.addChild(hBoxTop); var hBox:HBox = new HBox(); hBox.width = m_width; hBox.setStyle("horizontalGap",0); var weekName:Array = new Array("日","一","二","三","四","五","六"); for(var index:Number=0; index<weekName.length; index++){ var lab:Label = new Label(); lab.text = weekName[index]; lab.width = 24; lab.setStyle("textAlign","center"); lab.setStyle("fontSize",12); if(weekName[index]=="日"){ lab.setStyle("color","red"); } hBox.addChild(lab); } pop.addChild(hBox); var tmpDate:Date = new Date(nowTime.fullYear,nowTime.month+1,0); var sumDay:Number = tmpDate.date ; var firstDay:Date = new Date(nowTime.fullYear,nowTime.month,1); var wday:Number = firstDay.day ; var todayNum:Number = nowTime.date; var rowNum:uint = Math.ceil((sumDay+wday)/7); //Alert.show(Math.round((sumDay+day)/7).toString()); var tileList:TileList = new TileList(); tileList.setStyle("fontSize",10); tileList.columnCount=7; tileList.rowCount=rowNum; tileList.width = 7*25; tileList.height = rowNum * 25; var myDP:Array = new Array(); for(var i:Number=0; i<sumDay; i++){ myDP.push((i+1).toString()); } for(i=0; i<wday; i++){ myDP.unshift(null); } tileList.dataProvider = myDP; tileList.selectedIndex = wday+todayNum-1; tileList.addEventListener(ListEvent.ITEM_CLICK,testHandler); pop.addChild(tileList); var hBoxBottom:HBox = new HBox(); hBoxBottom.width = m_width; hBoxBottom.setStyle("horizontalAlign","right"); var hour:NumericStepper = new NumericStepper(); hour.setStyle("fontSize",10); hour.stepSize = 1; hour.minimum = 0; hour.maximum = 23; hour.width = 50; hour.height = 20; hour.value = new Date().hours; hour.setStyle("paddingRight",0); hour.addEventListener(NumericStepperEvent.CHANGE,hourChangeHandler); var h_label:Label = new Label(); h_label.text = "时"; h_label.setStyle("textAlign","center"); h_label.width = 15; var minute:NumericStepper = new NumericStepper(); minute.setStyle("fontSize",10); minute.stepSize = 1; minute.minimum = 0; minute.maximum = 59; minute.width = 50; minute.height = 20; minute.value = new Date().minutes; minute.addEventListener(NumericStepperEvent.CHANGE,minuteChangeHandler); var mi_label:Label = new Label(); mi_label.text = "分"; mi_label.setStyle("textAlign","center"); mi_label.width = 15; // var subBtn:Button = new Button(); // subBtn.width = 40; // subBtn.label = "确定"; hBoxBottom.addChild(hour); hBoxBottom.addChild(h_label); hBoxBottom.addChild(minute); hBoxBottom.addChild(mi_label); // hBoxBottom.addChild(subBtn); pop.addChild(hBoxBottom); 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.text ; } public function set editable(str:Boolean):void{ initeditable = str; } public function get editable(): Boolean{ return returnTime.editable; } ]]> </mx:Script> </mx:Module>
Test.mxml
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns="*"> <mx:Panel y="0" width="70%" height="100%" layout="absolute" id="mainPanel" title="测试" fontFamily="Arial" fontSize="12" horizontalCenter="0"> <TimeChooser x="20" y="20" text="2008-10-27 20:09:12" editable="false"></TimeChooser> </mx:Panel> </mx:Application>