JFreeChart实现实时曲线图

来源:互联网 发布:新概念英语所有软件 编辑:程序博客网 时间:2024/06/05 17:40

最近要用到实时曲线图,在网上大概找了一下,有两种实现方式,一种就是JFreeChart的官方实例MemoryUsageDemo.java.通过一个实现java.Swing.Timer的内部类,在其监听器中将实时数据添加进TimeSeries,由于Timer是会实时执行的,所以这个方法倒是没有什么问题,可以参考代码。
      另一种方式就是将实时类实现Runnable接口,在其run()方法中,通过无限循环将实时数据添加进TimeSeries,下面是较简单的实现代码:

java 代码
 
  1. //RealTimeChart .java  
  2. import org.jfree.chart.ChartFactory;  
  3. import org.jfree.chart.ChartPanel;  
  4. import org.jfree.chart.JFreeChart;  
  5. import org.jfree.chart.axis.ValueAxis;  
  6. import org.jfree.chart.plot.XYPlot;  
  7. import org.jfree.data.time.Millisecond;  
  8. import org.jfree.data.time.TimeSeries;  
  9. import org.jfree.data.time.TimeSeriesCollection;  
  10.   
  11. public class RealTimeChart extends ChartPanel implements Runnable  
  12. {  
  13.     private static TimeSeries timeSeries;  
  14.     private long value=0;  
  15.       
  16.     public RealTimeChart(String chartContent,String title,String yaxisName)  
  17.     {  
  18.         super(createChart(chartContent,title,yaxisName));  
  19.     }  
  20.       
  21.     private static JFreeChart createChart(String chartContent,String title,String yaxisName){  
  22.         //创建时序图对象  
  23.         timeSeries = new TimeSeries(chartContent,Millisecond.class);  
  24.         TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(timeSeries);  
  25.         JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(title,"时间(秒)",yaxisName,timeseriescollection,true,true,false);  
  26.         XYPlot xyplot = jfreechart.getXYPlot();  
  27.         //纵坐标设定  
  28.         ValueAxis valueaxis = xyplot.getDomainAxis();  
  29.         //自动设置数据轴数据范围  
  30.         valueaxis.setAutoRange(true);  
  31.         //数据轴固定数据范围 30s  
  32.         valueaxis.setFixedAutoRange(30000D);  
  33.   
  34.         valueaxis = xyplot.getRangeAxis();  
  35.         //valueaxis.setRange(0.0D,200D);  
  36.   
  37.         return jfreechart;  
  38.       }  
  39.   
  40.     public void run()  
  41.     {  
  42.         while(true)  
  43.         {  
  44.         try  
  45.         {  
  46.             timeSeries.add(new Millisecond(), randomNum());  
  47.             Thread.sleep(300);  
  48.         }  
  49.         catch (InterruptedException e)  {   }  
  50.         }         
  51.     }  
  52.       
  53.     private long randomNum()  
  54.     {     
  55.         System.out.println((Math.random()*20+80));        
  56.         return (long)(Math.random()*20+80);  
  57.     }  
  58. }  
  59.   
  60. //Test.java  
  61. import java.awt.BorderLayout;  
  62. import java.awt.event.WindowAdapter;  
  63. import java.awt.event.WindowEvent;  
  64. import javax.swing.JFrame;  
  65.   
  66. public class Test  
  67. {  
  68.   
  69.     /** 
  70.      * @param args 
  71.      */  
  72.     public static void main(String[] args)  
  73.     {  
  74.     JFrame frame=new JFrame("Test Chart");  
  75.     RealTimeChart rtcp=new RealTimeChart("Random Data","随机数","数值");  
  76.     frame.getContentPane().add(rtcp,new BorderLayout().CENTER);  
  77.     frame.pack();  
  78.     frame.setVisible(true);  
  79.     (new Thread(rtcp)).start();  
  80.     frame.addWindowListener(new WindowAdapter()   
  81.     {  
  82.         public void windowClosing(WindowEvent windowevent)  
  83.         {  
  84.             System.exit(0);  
  85.         }  
  86.   
  87.     });  
  88.     }  


          这两中方法都有一个问题,就是每实现一个图就要重新写一次,因为实时数据无法通过参数传进来,在想有没有可能通过setXXX()方式传进实时数据,那样的话就可以将实时曲线绘制类封装起来,而只需传递些参数即可(或者谁有更好的办法??)。

 

Copy:

http://favey.iteye.com/blog/112244

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 梦见让狐狸咬了怎么办 1岁宝宝不吃辅食怎么办 母乳不够宝宝不吃奶粉怎么办 吃母乳的宝宝不吃奶粉怎么办 宝宝吃母乳不吃奶粉怎么办 1岁婴儿不吃辅食怎么办 不喝奶瓶的宝宝怎么办 母乳不足宝宝不吃奶粉怎么办 4岁宝宝注意力不集中怎么办 孩子上课不专心听讲怎么办 小孩上课不认真听讲怎么办 一年级孩子上课不认真听讲怎么办 打了孩子很自责怎么办 4岁宝宝讲话结巴怎么办 网销客户不说话怎么办 两岁宝宝不说话怎么办? 4岁儿童说话结巴怎么办 3岁宝宝说话结巴怎么办 6岁儿童舌头短怎么办 5岁宝宝说话结巴怎么办 两岁宝宝说话晚怎么办 6岁儿童说话结巴怎么办 2岁宝宝呕吐拉稀怎么办 2岁宝宝突然呕吐怎么办 2岁宝宝呕吐发烧怎么办 2岁宝宝呕吐厉害怎么办 1岁宝宝半夜呕吐怎么办 2岁半宝宝呕吐怎么办 2岁宝宝半夜呕吐怎么办 两岁宝宝一直吐怎么办 原画师老了以后怎么办 孩子不想上学怎么办怎么去说服 嫉妒别人比我好怎么办 三岁宝宝爱打人怎么办 1岁宝宝喜欢打人怎么办 ps图层解锁不了怎么办 沈腾结婚马丽怎么办 延长甲没有纸托怎么办 高考第一志愿没录取怎么办 电子画颜料干了怎么办 数字画颜料干了怎么办