加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex4 动态生成,LineChart,AreaChart,ColumnChart,PieChart

发布时间:2020-12-15 01:36:41 所属栏目:百科 来源:网络整理
导读:?? /** ?? * ==========初始化LineChart=========== ?? * @param app 是主程序入口:dynamicStackedChart ?? * @param id 设置id:String ?? * @param tipStr 用户自定义的笔触提示信息:String ?? * @param xml 数据集:String ?? * @param title 竖向标题

?? /** ?? * ==========初始化LineChart=========== ?? * @param app 是主程序入口:dynamicStackedChart ?? * @param id 设置id:String ?? * @param tipStr 用户自定义的笔触提示信息:String ?? * @param xml 数据集:String ?? * @param title 竖向标题:String ?? * @param vtitle 横向标题:String ?? * @param x x轴显示信息:String ?? * */ ?? public function createLinkChart(app:dynamicStackedChart,id:String,tipStr:String,xml:String,title:String,vtitle:String,x:String):void{ ??? /**初始化LineChart*/ ??? lineChartTip=tipStr; ??? var lineChart:LineChart=new LineChart(); ??? lineChart.id=id; ??? lineChart.percentWidth=100; ??? lineChart.setStyle("textAlign","center"); ??? lineChart.dataTipFunction=fxLineChartTips; ??? lineChart.showDataTips=true; ??? lineChart.height=250; ?? ??? /** ??? * 点击Item事件 ??? * */ ??? lineChart.addEventListener(ChartItemEvent.ITEM_CLICK,???? function chartClick(evt:ChartItemEvent):void{lineChartItemClick(evt,app,tipStr,lineChart);}); ?? ??? var lineAxis:LinearAxis=new LinearAxis(); ??? lineChart.verticalAxis=lineAxis; ??? var lineVTitle:CategoryAxis=new CategoryAxis(); ??? lineChart.horizontalAxis=lineVTitle; ?? ??? /**设置标题和设置Legend显示数据*/ ??? lineAxis.title=title; ??? lineVTitle.title=vtitle; ??? lineVTitle.categoryField="@"+x; //Legend ?? ??? /**LineChart设置背景网格*/ ??? lineChartbackgroundElements(lineChart); ?? ??? lineChartLoadData(lineChart,xml,title,vtitle,x); ?? ??? /**LineChart的Legend 数据*/ ??? var lineLegend:Legend=new Legend(); ??? lineLegend.dataProvider=lineChart; ??? lineLegend.height=28; ??? app.myBox.addChild(lineChart); ??? app.myBox.addChild(lineLegend); ?? } ?? /**LineChart 设置背景网格*/ ?? private function lineChartbackgroundElements(lineChart:LineChart):void{ ? ??? //??? var gl:GridLines=new GridLines(); ??? //??? gl.setStyle("horizontalTickAligned",true); ??? //??? gl.setStyle("verticalTickAligned",true); ??? //?? ??? //??? var hr:HorizontalList; ??? //??? lineChart.backgroundElements=[hr]; ?? } ?? /** ?? * LineChart 加载数据 ?? * 2010年6月17日13:37 ?? * 页面加载LineChart数据 ?? * @param app 主程序入口类型stackedChart ?? * @param xml 存放数据源 String ?? * @param title 竖向标题 String ?? * @param vtitle 横向标题 String ?? * @param x x轴显示数据 String ?? * */ ?? private function lineChartLoadData(lineChart:LineChart,x:String):void{ ??? var xmls:XML=new XML(xml); ??? // 绑定数据 ??? lineChart.dataProvider=xmls.children(); ??? // 动态添加lineSeries ??? var xmlName:XMLList=xmls.children() as XMLList; ??? // 获取XML中元素名称 ??? var arr:Array=new Array(); ??? for(var a:int=1;a<xmlName[0].attributes().length();a++) ??? { ???? arr.push(xmlName.attributes()[a].name().toString().replace(/^s*|s*$/g,"").split(" ").join("")); ??? } ? ??? var arrSeries:Array=new Array(); ??? var colorArr:Array=getRandomColor(arr.length); ??? for(var i:Number=0;i<arr.length;i++) ??? { ???? var lineSeries:LineSeries = new LineSeries(); ???? lineSeries.id = i as String; ???? lineSeries.yField="@"+arr[i]; ???? lineSeries.displayName=arr[i]; ???? var fa2:Fade=new Fade(); ???? fa2.duration=2000; ???? fa2.alphaFrom=0.0; ???? fa2.alphaTo=1.0; ???? lineSeries.setStyle("showDataEffect",fa2); ???? lineSeries.filters=[_DropShadowFilter]; ???? lineSeries.setStyle("itemRenderer",new ClassFactory(CircleItemRenderer)); ???? var storkt:SolidColorStroke=new SolidColorStroke(); ???? //随机生成颜色colorArr[i] ???? storkt.color=colorArr[i]; ???? storkt.weight=1; ???? lineSeries.setStyle("lineStroke",storkt); ???? arrSeries.push(lineSeries); ??? } ??? lineChart.series = arrSeries; ?? } ? ?? /** ?? * 2010年6月17日13:37 ?? * LineChart提示信息 ?? * @param hitdata 存放鼠标笔触点显示数据 HitData ?? * */ ?? private function fxLineChartTips(hitdata:HitData):String{ ?? ??? var show:String=new String(""); ??? var curObj:Object=hitdata.item; ??? var xml:XML=new XML(curObj); ??? var curSeries:LineSeries = LineSeries(hitdata.chartItem.element); // 获得当前的BarSeries ?? ??? /**提示信息*/ ??? var arrs:Array=(lineChartTip.split(";")); ?? ??? for(var a:int=0;a<arrs.length;a++){ ???? var arr1:Array=arrs[a].toString().split("="); ???? if(a==0) ???? { ????? show=show+arr1[1]+":"+xml.attribute(arr1[0])+"n"; ???? }else if(a!=arrs.length-1){ ????? if(arr1[0]==curSeries.displayName.toString()) ????? { ?????? show=show+arr1[1]+":"+arr1[0]+"n"; ????? } ???? }else{ ????? show=show+arr1[1]+":"+xml.attribute(curSeries.displayName).toString(); ???? } ??? ??? } ??? return show; ?? } ?? /** ?? * 2010年6月17日13:37 ?? * 页面加载ColumnChart数据 ?? * @param app 主程序入口类型stackedChart ?? * @param xml 数据源 String ?? * @param title 竖向标题 String ?? * @param vtitle 横向标题 String ?? * @param x x轴显示数据 String ?? * ?? * */ ?? public function fxColumnChartLoader(app:dynamicStackedChart,colChart:ColumnChart,x:String):void{ ??? /**字符创格式XML转换成XML格式*/ ??? var xmlData:XML=new XML(xml); ?? ??? /**XML格式转换成XMLList*/ ??? var xmlName:XMLList=xmlData.children() as XMLList; ?? ??? /** ??? * 获取XML中每条数据的元素<day dval='12日' val="23" val2="33"/> ??? * 格式必须是这个格式,第一个元素必须是描述字符串 ??? * 从第二个开始为要显示的数据 ??? * 下面是从第一个元素也就是排除第一个元素 ??? * dval,而是从第二个元素val ??? * 开始获取要显示的数据必须是数字 ??? * */ ??? var arr:Array=new Array(); ??? for(var a:int=0;a<xmlName[0].attributes().length();a++) ??? { ???? arr.push(xmlName.attributes()[a].name().toString().replace(/^s*|s*$/g,"").split(" ").join("")); ??? } ?? ??? /** ??? * 动态添加ColumnSeries(柱子) ??? * */ ??? var arrcSeries:Array=new Array(); ??? for(var f:Number=1;f<arr.length;f++) ??? { ???? var columnSeries:ColumnSeries = new ColumnSeries(); ???? /**设定id*/ ???? columnSeries.id = f as String; ???? /**设定x轴显示数据*/ ???? columnSeries.xField="@"+x; ???? /**设定y轴显示数据*/ ???? columnSeries.yField="@"+arr[f]; ???? /**设置每个column展现效果*/ ???? columnSeries.setStyle("showDataEffect",app.upColumn2); ???? /** ???? * 设置columnSeries的显示名称(displayName) ???? * */ ???? columnSeries.displayName=arr[f]; ??? ???? arrcSeries.push(columnSeries); ??? ???? /**设置提示信息显示样式*/ ???? columnSeries.setStyle("labelPosition","outside"); ??? } ?? ??? /**将ColumnSeries添加到ColumnChart的Series集合中去*/ ??? colChart.series=arrcSeries; ??? /** ??? * 渲染加载ColumnChart ??? * 固定格式的xml格式 ??? **/ ??? colChart.dataProvider=xmlData.children(); ?? } ?? /** ?? * 2010年6月17日13:37 ?? * ColumnChart提示信息 ?? * @param hitdata 存放鼠标笔触点显示数据 HitData ?? * */ ?? public function fxColumnChartShowDataTip(hitdata:HitData):String{ ?? ??? var show:String=new String(""); ??? /**获取提示光点的所有信息*/ ??? var curObj:Object=hitdata.item; ??? /**将获取的数据转换成xml*/ ??? var xml:XML=new XML(curObj); ??? /**获取提示列的对象*/ ??? var curSeries:ColumnSeries = ColumnSeries(hitdata.chartItem.element); // 获得当前的ColumnSeries ?? ??? /**用户自定义格式的提示信息*/ ??? var arrs:Array=(columnChartTip.split(";")); ?? ??? for(var a:int=0;a<arrs.length;a++){ ???? var arr1:Array=arrs[a].toString().split("="); ???? if(a==0) ???? { ????? /**show存放用户自定义格式的提示信息的最终数据*/ ????? show=show+arr1[1]+":"+xml.attribute(arr1[0])+"n"; ???? }else if(a!=arrs.length-1){ ????? if(arr1[0]==curSeries.displayName.toString()) ????? { ?????? show=show+arr1[1]+":"+arr1[0]+"n"; ????? } ???? }else{ ????? show=show+arr1[1]+":"+xml.attribute(curSeries.displayName).toString(); ???? } ??? ??? } ??? return show; ?? } ?? /** ?? * 初始化数据报表 ?? * */ ?? public function createAdvancedDataGrid(app:dynamicStackedChart,headerText:String):void{ ? ??? var advgrid:AdvancedDataGrid=new AdvancedDataGrid(); ??? advgrid.id=id; ??? advgrid.designViewDataType="flat"; ??? advgrid.setStyle("textAlign","center"); ??? advgrid.percentWidth=100; ??? advgrid.height=250; ??? advgrid.addEventListener(AdvancedDataGridEvent.HEADER_RELEASE,advancedDataGridSort); ??? advgrid.addEventListener(MouseEvent.CLICK,function clickadvgrideClick():void{advgrideItemClick(advgrid,app);}); ??? /** ??? * 加载数据 ??? * */ ??? fxAdvancedDataGridLoader(advgrid,headerText); ??? app.myBox.addChild(advgrid); ?? } ?? /** ?? * ================================AdvancedDataGrid======================================== ?? * 2010年6月17日13:37 ?? * 页面加载AdvancedDataGrid数据 ?? * @param app 主程序入口类型stackedChart ?? * @param xml 存放数据源 String ?? * @param headerText AdvancedDataGrid标题 String ?? * */ ?? public function fxAdvancedDataGridLoader(advgrid:AdvancedDataGrid,headerText:String):void{ ??? var xmld:XML=new XML(xml); ?? ??? var xmlName:XMLList=xmld.children() as XMLList; ??? // 获取XML中元素名称 ??? var arr:Array=new Array(); ??? for(var a:int=0;a<xmlName[0].attributes().length();a++) ??? { ???? arr.push(xmlName.attributes()[a].name().toString().replace(/^s*|s*$/g,"").split(" ").join("")); ??? } ?? ??? advgrid.dataProvider=xmld.children(); ??? var adcHeaderText:AdvancedDataGridColumnGroup=new AdvancedDataGridColumnGroup(); ??? adcHeaderText.headerText=headerText; ??? var arrs:Array=new Array(); ??? for(var i:int=0;i<arr.length;i++) ??? { ???? var adc:AdvancedDataGridColumn=new AdvancedDataGridColumn(); ???? adc.dataField="@"+arr[i]; ???? adc.headerText=arr[i]; ???? arrs.push(adc); ??? } ??? adcHeaderText.children=arrs; ??? var arrHeader:Array=new Array(); ??? arrHeader.push(adcHeaderText); ??? advgrid.groupedColumns=arrHeader; ?? } ?? /** ?? * 点击AdvancedDataGrid列头上的排序按钮 ?? */ ?? public function advancedDataGridSort(evt:AdvancedDataGridEvent):void {?? ??? var column:AdvancedDataGridColumn = AdvancedDataGridColumn(evt.currentTarget.columns[evt.columnIndex]);?? ??? var columnName:String=column.dataField;?? ??? column.sortCompareFunction=function(obj1:Object,obj2:Object):int{?? ???? return superSort(obj1,obj2,columnName);?? ??? };?? ?? }?? ?? /** ?? * 根据不同的数据类型选择不同的排序方式 优先级是数字、日期、字符串 ?? */ ?? private function superSort(obj1:Object,obj2:Object,columnName:String):int{?? ??? //验证数据类型 Numbe Date String?? ??? if(!isNaN(obj1[columnName])){?? ???? return number_sortCompareFunc(obj1,columnName);?? ??? }?? ??? if(strIsDate(obj1[columnName])){?? ???? var inputFormat:String=getInputFormat(obj1[columnName]);?? ???? return date_sortCompareFunc(obj1,columnName,inputFormat);?? ??? }?? ??? return string_sortCompareFunc(obj1,columnName);?? ?? }?? ?? /** ?? * 日期的排序 ?? */ ?? private function date_sortCompareFunc(obj1:Object,columnName:String,inputFormat:String):int {?? ??? var date1:Date =DateField.stringToDate(obj1[columnName],inputFormat);?? ??? var date2:Date =DateField.stringToDate(obj2[columnName],inputFormat);?? ??? return ObjectUtil.dateCompare(date1,date2);?? ?? }?? ?? /** ?? * 字符串的排序 ?? */ ?? private function string_sortCompareFunc(obj1:Object,columnName:String):int{?? ??? var str1:String=obj1[columnName];?? ??? var str2:String=obj2[columnName];?? ??? return ObjectUtil.stringCompare(str1,str2,false);?? ?? }?? ?? /** ?? * 数字的排序 ?? */ ?? private function number_sortCompareFunc(obj1:Object,columnName:String):int{?? ??? var num1:Number=Number(obj1[columnName]);?? ??? var num2:Number=Number(obj2[columnName]);?? ??? return ObjectUtil.numericCompare(num1,num2);?? ?? }?? ?? /** ?? * 验证一个字符串是否是日期格式 ?? */ ?? private function strIsDate(str:String):Boolean{?? ??? var inputFormat:String=getInputFormat(str);?? ??? //如果找不到日期表示符号则直接返回false?? ??? if(inputFormat==null){?? ???? return false;?? ??? }?? ??? var date:Date=DateField.stringToDate(str,inputFormat);?? ??? //如果是日期date不为null?? ??? if(date!=null){?? ???? return true;?? ??? }else{?? ???? return false;?? ??? }?? ?? }?? ?? /** ?? * 得到日期的格式 ?? * 判断的顺序为 2009-11-12 2009/11/12 2009.11.12 ?? */ ?? private function getInputFormat(str:String):String{?? ??? if(str.indexOf("-")!=-1){?? ???? return "YYYY-MM-DD";?? ??? }?? ??? if(str.indexOf("/")!=-1){?? ???? return "YYYY/MM/DD";?? ??? }?? ??? if(str.indexOf(".")!=-1){?? ???? return "YYYY.MM.DD";?? ??? }?? ??? return null;?? ?? } ? ? ?? /** ?? * 随机产生指定数量颜色的方法 ?? * 产生一个集合每个颜色不相同 ?? * @param num 指定产生多少个颜色Number ?? * @return 指定数量的颜色集合Array(uint) ?? * */ ?? private function getRandomColor(num:Number):Array{ ?? ??? var arrColor:Array=new Array(); ?? ??? arrColor.push(uint(Math.random()*0xffffff)); ?? ??? for(var i:Number=0;i<10000;i++){ ???? /**标记是否产生元素与arrColor中元素系统,达到每次产生不同的元素*/ ???? var sign:Boolean=false; ??? ???? var q:uint=uint(Math.random()*0xffffff); ??? ???? for(var j:Number=0;j<arrColor.length;j++){ ????? if(arrColor[j]==q) ????? { ?????? sign=true; ????? } ???? } ???? if(sign==false) ???? { ????? arrColor.push(q+10); ???? } ???? if(arrColor.length==num) ???? { ????? break; ???? } ??? } ??? return arrColor; ?? } ?? /** ?? * LineChart点击事件 ?? * */ ?? public function lineChartItemClick(evt:ChartItemEvent,app:dynamicStackedChart,lineChart:LineChart):void{ ??? var psi:LineSeriesItem= evt.hitData.chartItem as LineSeriesItem; ????? var tipArr:Array=tipStr.split(";"); ??? var nameArr:Array=new Array(); ??? for(var a:int=0;a<tipArr.length;a++){ ???? nameArr[a]=((tipArr[a]).split("="))[0]; ??? } ??? var xmlObj:XML=new XML(psi.item); ??? var str:String=new String(""); ??? for(var b:int=0;b<nameArr.length;b++){ ?? ???? if(xmlObj.attribute(nameArr[b]).toString()!=""&&xmlObj.attribute(nameArr[b])!=null){ ?????? str+=nameArr[b]+"="+xmlObj.attribute(nameArr[b])+";"; ???? } ??? ??? } ??? app.jsItemClick("id="+lineChart.id+";"+str); ??? //Alert.show(str,"点击LineChart的Item"); ?? } ?? /** ?? * PieChart点击事件 ?? * */ ?? public function pieChartItemClick(evt:ChartItemEvent,pieChart:PieChart):void{ ??? var psi:PieSeriesItem= evt.hitData.chartItem as PieSeriesItem; ??? var tipArr:Array=tipStr.split(";"); ??? var nameArr:Array=new Array(); ??? for(var a:int=0;a<tipArr.length;a++){ ???? nameArr[a]=((tipArr[a]).split("="))[0]; ??? } ??? var xmlObj:XML=new XML(psi.item); ??? var str:String=new String(""); ??? for(var b:int=0;b<nameArr.length;b++){ ??? ???? if(xmlObj.attribute(nameArr[b]).toString()!=""&&xmlObj.attribute(nameArr[b])!=null){ ????? str+=nameArr[b]+"="+xmlObj.attribute(nameArr[b])+";"; ???? } ??? ??? } ??? app.jsItemClick("id="+pieChart.id+";"+str); //??? Alert.show(str,"点击LineChart的Item"); ?? } ?? /** ?? * AreaChart点击事件 ?? * */ ?? public function areaChartItemClick(evt:ChartItemEvent,areaChart:AreaChart):void{ ??? var psi:AreaSeriesItem= evt.hitData.chartItem as AreaSeriesItem; ??? var tipArr:Array=tipStr.split(";"); ??? var nameArr:Array=new Array(); ??? for(var a:int=0;a<tipArr.length;a++){ ???? nameArr[a]=((tipArr[a]).split("="))[0]; ??? } ??? var xmlObj:XML=new XML(psi.item); ??? var str:String=new String(""); ??? for(var b:int=0;b<nameArr.length;b++){ ??? ???? if(xmlObj.attribute(nameArr[b]).toString()!=""&&xmlObj.attribute(nameArr[b])!=null){ ????? str+=nameArr[b]+"="+xmlObj.attribute(nameArr[b])+";"; ???? } ??? ??? } ??? app.jsItemClick("id="+areaChart.id+";"+str); //??? Alert.show(str,"点击LineChart的Item"); ?? } ?? /** ?? * ColumnChart点击事件 ?? * */ ?? public function columnChartItemClick(evt:ChartItemEvent,colChart:ColumnChart):void{ ??? var psi:ColumnSeriesItem= evt.hitData.chartItem as ColumnSeriesItem; ??? var tipArr:Array=tipStr.split(";"); ??? var nameArr:Array=new Array(); ??? for(var a:int=0;a<tipArr.length;a++){ ???? nameArr[a]=((tipArr[a]).split("="))[0]; ??? } ??? var xmlObj:XML=new XML(psi.item); ??? var str:String=new String(""); ??? for(var b:int=0;b<nameArr.length;b++){ ??? ???? if(xmlObj.attribute(nameArr[b]).toString()!=""&&xmlObj.attribute(nameArr[b])!=null){ ????? str+=nameArr[b]+"="+xmlObj.attribute(nameArr[b])+";"; ???? } ??? ??? } ??? app.jsItemClick("id="+colChart.id+";"+str); //??? Alert.show(str,"点击LineChart的Item"); ?? } ?? /** ?? * AdvancedDataGrid点击事件 ?? * */ ?? public function advgrideItemClick(advgride:AdvancedDataGrid,app:dynamicStackedChart):void{ ??? var xmls:XML=advgride.selectedItem as XML; ??? var dataStr:String=new String(""); ??? for(var a:int=0;a<xmls.attributes().length();a++) ??? { ???? dataStr+=xmls.attributes()[a].name()+"="+xmls.attribute(xmls.attributes()[a].name())+";";??? ??? } ??? app.jsItemClick("id="+advgride.id+";"+dataStr); //??? Alert.show(dataStr,"advgrid"); ?? } } } ?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读