JFreeChart实现实时曲线图
原创
©著作权归作者所有:来自51CTO博客作者wx63046db09e68a的原创作品,请联系作者获取转载授权,否则将追究法律责任
最近要用到实时曲线图,在网上大概找了一下,有两种实现方式,一种就是JFreeChart的官方实例MemoryUsageDemo.java.通过一个实现java.Swing.Timer的内部类,在其监听器中将实时数据添加进TimeSeries,由于Timer是会实时执行的,所以这个方法倒是没有什么问题,可以参考代码。
另一种方式就是将实时类实现Runnable接口,在其run()方法中,通过无限循环将实时数据添加进TimeSeries,下面是较简单的实现代码:
java 代码
1. //RealTimeChart .java
2. import
3. import
4. import
5. import
6. import
7. import
8. import
9. import
10.
11. public class RealTimeChart extends ChartPanel implements
12. {
13. private static
14. private long value=0;
15.
16. public
17. {
18. super(createChart(chartContent,title,yaxisName));
19. }
20.
21. private static
22. //创建时序图对象
23. new TimeSeries(chartContent,Millisecond.class);
24. new
25. "时间(秒)",yaxisName,timeseriescollection,true,true,false);
26. XYPlot xyplot = jfreechart.getXYPlot();
27. //纵坐标设定
28. ValueAxis valueaxis = xyplot.getDomainAxis();
29. //自动设置数据轴数据范围
30. true);
31. //数据轴固定数据范围 30s
32. valueaxis.setFixedAutoRange(30000D);
33.
34. valueaxis = xyplot.getRangeAxis();
35. //valueaxis.setRange(0.0D,200D);
36.
37. return
38. }
39.
40. public void
41. {
42. while(true)
43. {
44. try
45. {
46. new
47. 300);
48. }
49. catch
50. }
51. }
52.
53. private long
54. {
55. 20+80));
56. return (long)(Math.random()*20+80);
57. }
58. }
59.
60. //Test.java
61. import
62. import
63. import
64. import
65.
66. public class
67. {
68.
69. /**
70. * @param args
71. */
72. public static void
73. {
74. new JFrame("Test Chart");
75. new RealTimeChart("Random Data","随机数","数值");
76. new
77. frame.pack();
78. true);
79. new
80. new
81. {
82. public void
83. {
84. 0);
85. }
86.
87. });
88. }
89. }
这两中方法都有一个问题,就是每实现一个图就要重新写一次,因为实时数据无法通过参数传进来,在想有没有可能通过setXXX()方式传进实时数据,那样的话就可以将实时曲线绘制类封装起来,而只需传递些参数即可(或者谁有更好的办法??)。