2007-08-14
JFreeChart实现实时曲线图
关键字: jfreechart 实时曲线图 java
最近要用到实时曲线图,在网上大概找了一下,有两种实现方式,一种就是JFreeChart的官方实例MemoryUsageDemo.java.通过一个实现java.Swing.Timer的内部类,在其监听器中将实时数据添加进TimeSeries,由于Timer是会实时执行的,所以这个方法倒是没有什么问题,可以参考代码。
另一种方式就是将实时类实现Runnable接口,在其run()方法中,通过无限循环将实时数据添加进TimeSeries,下面是较简单的实现代码:
这两中方法都有一个问题,就是每实现一个图就要重新写一次,因为实时数据无法通过参数传进来,在想有没有可能通过setXXX()方式传进实时数据,那样的话就可以将实时曲线绘制类封装起来,而只需传递些参数即可(或者谁有更好的办法??)。
另一种方式就是将实时类实现Runnable接口,在其run()方法中,通过无限循环将实时数据添加进TimeSeries,下面是较简单的实现代码:
java 代码
- //RealTimeChart .java
- import org.jfree.chart.ChartFactory;
- import org.jfree.chart.ChartPanel;
- import org.jfree.chart.JFreeChart;
- import org.jfree.chart.axis.ValueAxis;
- import org.jfree.chart.plot.XYPlot;
- import org.jfree.data.time.Millisecond;
- import org.jfree.data.time.TimeSeries;
- import org.jfree.data.time.TimeSeriesCollection;
- public class RealTimeChart extends ChartPanel implements Runnable
- {
- private static TimeSeries timeSeries;
- private long value=0;
- public RealTimeChart(String chartContent,String title,String yaxisName)
- {
- super(createChart(chartContent,title,yaxisName));
- }
- private static JFreeChart createChart(String chartContent,String title,String yaxisName){
- //创建时序图对象
- timeSeries = new TimeSeries(chartContent,Millisecond.class);
- TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(timeSeries);
- JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(title,"时间(秒)",yaxisName,timeseriescollection,true,true,false);
- XYPlot xyplot = jfreechart.getXYPlot();
- //纵坐标设定
- ValueAxis valueaxis = xyplot.getDomainAxis();
- //自动设置数据轴数据范围
- valueaxis.setAutoRange(true);
- //数据轴固定数据范围 30s
- valueaxis.setFixedAutoRange(30000D);
- valueaxis = xyplot.getRangeAxis();
- //valueaxis.setRange(0.0D,200D);
- return jfreechart;
- }
- public void run()
- {
- while(true)
- {
- try
- {
- timeSeries.add(new Millisecond(), randomNum());
- Thread.sleep(300);
- }
- catch (InterruptedException e) { }
- }
- }
- private long randomNum()
- {
- System.out.println((Math.random()*20+80));
- return (long)(Math.random()*20+80);
- }
- }
- //Test.java
- import java.awt.BorderLayout;
- import java.awt.event.WindowAdapter;
- import java.awt.event.WindowEvent;
- import javax.swing.JFrame;
- public class Test
- {
- /**
- * @param args
- */
- public static void main(String[] args)
- {
- JFrame frame=new JFrame("Test Chart");
- RealTimeChart rtcp=new RealTimeChart("Random Data","随机数","数值");
- frame.getContentPane().add(rtcp,new BorderLayout().CENTER);
- frame.pack();
- frame.setVisible(true);
- (new Thread(rtcp)).start();
- frame.addWindowListener(new WindowAdapter()
- {
- public void windowClosing(WindowEvent windowevent)
- {
- System.exit(0);
- }
- });
- }
- }
这两中方法都有一个问题,就是每实现一个图就要重新写一次,因为实时数据无法通过参数传进来,在想有没有可能通过setXXX()方式传进实时数据,那样的话就可以将实时曲线绘制类封装起来,而只需传递些参数即可(或者谁有更好的办法??)。
评论
sutra
2008-08-02
用BlockingQueue辅助实现。
小甜甜弟弟
2008-06-25
不知道为什么 jfreechart不支持jboss服务器
laiseeme
2008-05-14
我也得研究研究applet了 类似统计图这样的把鼠标放上去显示当前数据的光是图片是没用的
jan-zhou
2008-05-13
magice 写道
robert02432004@126.com 写道
magice 写道
我这几天也正在研究JfreeChart,哈哈
但是我想问,LZ有没有试过通过什么办法把它嵌入到网页中?
不知道applet能不能做到
applet当然可以做到了,而且jfrre chart本来就是用于web开发的吧!但是我想问,LZ有没有试过通过什么办法把它嵌入到网页中?
不知道applet能不能做到
但是有点不好的就是web开发时只能输出静态图片,而图片是不能展示动态效果的(就像你给出的例子这种)
所以我就在想使用applet看行不行。
另外浏览器好像对applet的载入有安全限制,刚才我测试的时候,好像载入不到。。。
回楼主:jfreechart要实现实时的曲线图就只有这个方法了,实现代码简单,但是性能低,CPU占用高,每次更新会占用20%
applet装入jfreechart完全没有任何问题
解决方案一:直接完全用SWT开发,用JWS发布,就可避免applet
jan-zhou
2007-12-24
bcoffee 写道
applet可以显示动态web曲线,通过servlet传递数据就行了。但是,我的问题如下:
我想以秒为单位显示十分钟内的动态时间曲线图,但页面上只能从当前时间开始显示,慢慢向前走。而前十分钟的数据是一片空白。有什么方法可以先调用前十分钟的数据,然后让曲线接着向下走。
我想以秒为单位显示十分钟内的动态时间曲线图,但页面上只能从当前时间开始显示,慢慢向前走。而前十分钟的数据是一片空白。有什么方法可以先调用前十分钟的数据,然后让曲线接着向下走。
可以先查询出前十分钟的数据,添加到collection之后,再进行动态的数据添加。
bcoffee
2007-11-12
我知道了,我将时间轴数值范围设为固定的了,改成自动轴范围就可以
bcoffee
2007-11-12
applet可以显示动态web曲线,通过servlet传递数据就行了。但是,我的问题如下:
我想以秒为单位显示十分钟内的动态时间曲线图,但页面上只能从当前时间开始显示,慢慢向前走。而前十分钟的数据是一片空白。有什么方法可以先调用前十分钟的数据,然后让曲线接着向下走。
我想以秒为单位显示十分钟内的动态时间曲线图,但页面上只能从当前时间开始显示,慢慢向前走。而前十分钟的数据是一片空白。有什么方法可以先调用前十分钟的数据,然后让曲线接着向下走。
sojune
2007-10-25
我一般用的是ChartDirector
tiyi
2007-10-13
man 写道
当后台用ChartUtilities.writeChartAsJPEG(
response.getOutputStream(),
0.1f,
chart,
400,
300,
null
);
输出数据时,如果页面使用ajax,应怎校捕获呢?
或者说,我想用ajax技术显示生成的jfreechart 图片
response.getOutputStream(),
0.1f,
chart,
400,
300,
null
);
输出数据时,如果页面使用ajax,应怎校捕获呢?
或者说,我想用ajax技术显示生成的jfreechart 图片
Ajax是和语言平台关联不大。你只要确保JfreeChart输出图像(可利用Servlet)。
然后用Ajax定时的reload一张image的src即可(可在url后加时间标记来保障浏览器强制加载)。
cary
2007-10-13
可以用vml+ajax,毕竟刷图片数据量比较大。
man
2007-10-13
当后台用ChartUtilities.writeChartAsJPEG(
response.getOutputStream(),
0.1f,
chart,
400,
300,
null
);
输出数据时,如果页面使用ajax,应怎校捕获呢?
或者说,我想用ajax技术显示生成的jfreechart 图片
response.getOutputStream(),
0.1f,
chart,
400,
300,
null
);
输出数据时,如果页面使用ajax,应怎校捕获呢?
或者说,我想用ajax技术显示生成的jfreechart 图片
fallingstone
2007-09-26
网页上还是flex酷啊
qiuyu92088
2007-09-25
用applet可以实现在web页面上的实时曲线图,我已经试过,现在有个问题是怎么才能显示曲线的峰值啊,那位高手做过类似的例子啊
tvjody
2007-09-18
Flex3做这样的报表,很方便,而且给用户丰富的体验
cayenne
2007-09-01
我试过网页上用AJAX刷图片做成实时更新效果,但效率问题和实时效果还是要做权衡的。
magice
2007-08-31
robert02432004@126.com 写道
laiseeme 写道
jfreechart里面有个servlet类 你上网搜一下应该有很多例子
作为一个图片插入到网页中 但是要做到这种实时曲线那不行
没在网页中用过,不过ajax不就是用来干异步通信的吗?呵呵作为一个图片插入到网页中 但是要做到这种实时曲线那不行
实时曲线实际上是一个应用程序,而ajax简单来说是局部刷新,注意还是要刷新页面的,如果实时曲线使用ajax做,那么每秒至少刷新25次,事实上这是达不到的。
robert02432004@126.com
2007-08-31
laiseeme 写道
jfreechart里面有个servlet类 你上网搜一下应该有很多例子
作为一个图片插入到网页中 但是要做到这种实时曲线那不行
没在网页中用过,不过ajax不就是用来干异步通信的吗?呵呵作为一个图片插入到网页中 但是要做到这种实时曲线那不行
laiseeme
2007-08-31
jfreechart里面有个servlet类 你上网搜一下应该有很多例子
作为一个图片插入到网页中 但是要做到这种实时曲线那不行
作为一个图片插入到网页中 但是要做到这种实时曲线那不行
magice
2007-08-31
robert02432004@126.com 写道
magice 写道
我这几天也正在研究JfreeChart,哈哈
但是我想问,LZ有没有试过通过什么办法把它嵌入到网页中?
不知道applet能不能做到
applet当然可以做到了,而且jfrre chart本来就是用于web开发的吧!但是我想问,LZ有没有试过通过什么办法把它嵌入到网页中?
不知道applet能不能做到
但是有点不好的就是web开发时只能输出静态图片,而图片是不能展示动态效果的(就像你给出的例子这种)
所以我就在想使用applet看行不行。
另外浏览器好像对applet的载入有安全限制,刚才我测试的时候,好像载入不到。。。
robert02432004@126.com
2007-08-31
magice 写道
我这几天也正在研究JfreeChart,哈哈
但是我想问,LZ有没有试过通过什么办法把它嵌入到网页中?
不知道applet能不能做到
applet当然可以做到了,而且jfrre chart本来就是用于web开发的吧!但是我想问,LZ有没有试过通过什么办法把它嵌入到网页中?
不知道applet能不能做到
- 浏览: 13652 次
- 性别:

- 来自: 东莞

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
JFreeChart实现实时曲线图
用BlockingQueue辅助实现。
-- by sutra -
JFreeChart实现实时曲线图
不知道为什么 jfreechart不支持jboss服务器
-- by 小甜甜弟弟 -
JFreeChart实现实时曲线图
我也得研究研究applet了 类似统计图这样的把鼠标放上去显示当前数据的光是图 ...
-- by laiseeme -
JFreeChart实现实时曲线图
magice 写道robert02432004@126.com 写道magice ...
-- by jan-zhou -
netbeans 6.0 rc2 安装错 ...
能不能把下载地址告诉我,我找不到啊,我也白头发了,QQ:16211803
-- by ms16211803






评论排行榜