用flex模拟了个实时装置监控曲线图
用flex模拟了个实时设备监控曲线图
用flex模拟了个实时设备监控曲线图,最近在弄报表这块,用到flex里面图表控件。
代码如下:
<?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="init()"> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> </fx:Declarations> <fx:Script> <![CDATA[ import mx.charts.chartClasses.AxisLabelSet; import mx.formatters.DateFormatter; import mx.charts.chartClasses.IAxis; import mx.collections.ArrayCollection; [Bindable] public var testDatas:ArrayCollection; [Bindable] private var maxDate:Date; [Bindable] private var minDate:Date; private var timer:Timer; private var dateFormat:DateFormatter = new DateFormatter(); private var dateVar:Date; private function init():void { dateFormat.formatString = "HH:NN:SS"; minDate = new Date(); var dx:Date = new Date(); dx.setTime(minDate.getTime()); dx.setMinutes(dx.getMinutes()+1, dx.getSeconds(), dx.getMilliseconds()); maxDate = dx; dateVar = new Date(); dateVar.setTime(minDate.getTime()); testDatas = new ArrayCollection([{date: dateVar, valueTest: 43.71} ]); timer = new Timer(1000); timer.addEventListener(TimerEvent.TIMER, getDatas) timer.start(); } private function mylabel(labelValue:Object, previousValue:Object, d:IAxis):String { var str:String = dateFormat.format(labelValue); return str; } private function getDatas(et:Event):void { var valueTestValue:int = Math.random()*50; var dm:Date = new Date(); dm.setTime(dateVar.getTime()+1000); dateVar = dm; if (dateVar.getTime()>maxDate.getTime()) { maxDate = dateVar; var dx:Date = new Date(); dx.setTime(dateVar.getTime()); dx.setMinutes(dateVar.getMinutes()-1, dateVar.getSeconds(), dateVar.getMilliseconds()); minDate = dx; } testDatas.addItem({date: dateVar, value: valueTestValue}); } ]]> </fx:Script> <s:Panel title="设备实时曲线图" width="100%" height="100%"> <mx:LineChart id="mychart" height="100%" width="100%" paddingRight="5" paddingLeft="5" showDataTips="true"> <mx:horizontalAxis> <mx:DateTimeAxis dataUnits="seconds" interval="5" minimum="{minDate}" maximum="{maxDate}" labelFunction="mylabel"/> </mx:horizontalAxis> <mx:verticalAxis> <mx:LinearAxis baseAtZero="true" /> </mx:verticalAxis> <mx:series> <mx:LineSeries yField="value" xField="date" form="curve" displayName="测试" dataProvider="{this.testDatas}"/> </mx:series> </mx:LineChart> </s:Panel> </s:Application>