时间控件需求描述:
通过前边时间跨度类型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>