Flex 使用定时器绘制动态曲线时,ArrayCollection中有数据,但却画不出曲线(在线等)

m00z 2011-06-03 03:27:35
帮朋友做个东西,使用Flex绘制动态曲线,ArrayCollection中有数据,但曲线绘制不了
因为是第一次用flex,自己查不出原因,希望大家帮忙解决下,谢谢。
<?xml version="1.0"?>
<!-- Simple example to demonstrate the DateTimeAxis class. -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()">

<mx:Script>
<![CDATA[
import mx.charts.chartClasses.AxisLabelSet;
import mx.charts.chartClasses.IAxis;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.formatters.DateFormatter;
import mx.rpc.events.ResultEvent;

[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 var dateVar:String;
private var valueTestValue:Number;

private function init():void {
dataRequest.send();
dateFormat.formatString = "HH:NN:SS";
minDate = new Date();
var dx:Date = new Date();
dx.setMinutes(dx.getMinutes()+1, dx.getSeconds(), dx.getMilliseconds());
maxDate = dx;

testDatas = new ArrayCollection([{date: dateVar, valueTest: valueTestValue} ]);

timer = new Timer(1000);
timer.addEventListener(TimerEvent.TIMER, dataRequest.send);
timer.start();

}

private function mylabel(labelValue:Object, previousValue:Object, d:IAxis):String {
var str:String = dateFormat.format(labelValue);
return str;
}


private function dataHandler(event:ResultEvent):void{
var msg:String=event.result.toString();

msg = msg.replace('=', '|');
msg = msg.replace('&', '|');
var data:Array = msg.split('|');

dateVar = data[1];
valueTestValue = Number(data[3])+ Math.random()*50;

testDatas.addItem({date: dateVar, valueTest: valueTestValue});
}

]]>
</mx:Script>
<mx:HTTPService id="dataRequest" url="http://www.gold678.com/union/flash/QuoteZhj.asp" result="dataHandler(event);"></mx:HTTPService>


<mx:Panel title="DateTimeAxis Example" height="100%" width="100%">
<mx:LineChart id="mychart" height="100%" width="100%"
paddingRight="2" paddingLeft="3"
showDataTips="true" >

<mx:horizontalAxis>
<mx:DateTimeAxis dataUnits="seconds" interval="1" minimum="{minDate}" maximum="{maxDate}" labelFunction="mylabel" />
</mx:horizontalAxis>

<mx:verticalAxis>
<mx:LinearAxis baseAtZero="true" />
</mx:verticalAxis>

<mx:series>
<mx:LineSeries yField="valueTest" xField="date" displayName="Price" dataProvider="{this.testDatas}"/>
</mx:series>
</mx:LineChart>
</mx:Panel>
</mx:Application>
...全文
203 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
SWQQ- 2011-06-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 will2ni 的回复:]

引用 3 楼 shiwenqing 的回复:
我的比较简单,稍微修改下就达到你想要的效果了。
自动根据添加节点改变lineChart

非常感谢。用了你的。现在可以动态显示了。还有几个问题请教:
1.横轴刻度 怎么能够间隔一段显示
2.纵轴最小值 怎么设置为任意值
[/Quote]

1. 横轴刻度 间隔一段显示?什么意思 一会显示一会不显示横轴标记?
2. 纵轴最小值为什么要设置成任意值?这个简单啊手动设置个随机数填上就可以了
m00z 2011-06-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 shiwenqing 的回复:]
我的比较简单,稍微修改下就达到你想要的效果了。
自动根据添加节点改变lineChart
[/Quote]
非常感谢。用了你的。现在可以动态显示了。还有几个问题请教:
1.横轴刻度 怎么能够间隔一段显示
2.纵轴最小值 怎么设置为任意值
SWQQ- 2011-06-03
  • 打赏
  • 举报
回复
我的比较简单,稍微修改下就达到你想要的效果了。
自动根据添加节点改变lineChart
SWQQ- 2011-06-03
  • 打赏
  • 举报
回复
在 dataHandler 函数中进行数据绑定。
先清空数据源在绑定

写了个简单的Linechart是自动改变的


<?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" minWidth="955" minHeight="600" creationComplete="application1_creationCompleteHandler(event)">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.FlexEvent;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;

[Bindable]
private var i:int = 1;
[Bindable]
public var dataSources:ArrayCollection = new ArrayCollection();
private var tim:Timer = new Timer(1000);
protected function httpSwq_faultHandler(event:FaultEvent):void
{
// TODO Auto-generated method stub

}

protected function httpSwq_resultHandler(event:ResultEvent):void
{
i +=500;
dataSources = event.result.em.item;
var obj:Object = new Object();
obj.Month = 2011-11-08;
obj.Profit = 5000+i;
obj.Expenses = 5000+i;
dataSources.addItem(obj);
linechart.dataProvider = dataSources;

}

protected function application1_creationCompleteHandler(event:FlexEvent):void
{
tim.addEventListener(TimerEvent.TIMER,swqHander);
tim.start();

}

public function swqHander(event:TimerEvent):void
{
httpSwq.send();
}

]]>
</fx:Script>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
<s:HTTPService id="httpSwq" url="assets/test.xml" fault="httpSwq_faultHandler(event)" result="httpSwq_resultHandler(event)">

</s:HTTPService>
</fx:Declarations>


<mx:LineChart id="linechart" height="216" width="530"
paddingLeft="5" paddingRight="5"
showDataTips="true" fontSize="12" y="10">
<mx:horizontalAxis>
<mx:CategoryAxis categoryField="Month"/>
</mx:horizontalAxis>
<mx:series>
<mx:LineSeries yField="Profit" form="curve" displayName="金士顿4GU盘" />
<mx:LineSeries yField="Expenses" form="curve" displayName="希捷500移动硬盘" />
</mx:series>
</mx:LineChart>
</s:Application>






<?xml version="1.0" encoding="UTF-8"?>
<em>

<item>
<Month>2010-12-20</Month>
<Profit>60</Profit>

</item>

<item>
<Month>2011-02-25</Month>
<Profit>55</Profit>

</item>

<item>
<Month>2011-05-01</Month>
<Profit>49</Profit>

</item>

<item>
<Month>2010-11-08</Month>

<Expenses>478</Expenses>
</item>

<item>
<Month>2011-01-1</Month>

<Expenses>418</Expenses>
</item>

<item>
<Month>2011-04-23</Month>

<Expenses>398</Expenses>
</item>

</em>





m00z 2011-06-03
  • 打赏
  • 举报
回复
分数限制,现在只能给100分

4,327

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计 Flex
社区管理员
  • Flex
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧