JFreeChart實(shí)現(xiàn)實(shí)時(shí)曲線圖
最近要用到實(shí)時(shí)曲線圖,在網(wǎng)上大概找了一下,有兩種實(shí)現(xiàn)方式,一種就是JFreeChart的官方實(shí)例MemoryUsageDemo.java.通過(guò)一個(gè)實(shí)現(xiàn)java.Swing.Timer的內(nèi)部類,在其監(jiān)聽器中將實(shí)時(shí)數(shù)據(jù)添加進(jìn)TimeSeries,由于Timer是會(huì)實(shí)時(shí)執(zhí)行的,所以這個(gè)方法倒是沒(méi)有什么問(wèn)題,可以參考代碼。
另一種方式就是將實(shí)時(shí)類實(shí)現(xiàn)Runnable接口,在其run()方法中,通過(guò)無(wú)限循環(huán)將實(shí)時(shí)數(shù)據(jù)添加進(jìn)TimeSeries,下面是較簡(jiǎn)單的實(shí)現(xiàn)代碼:
//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){ //創(chuàng)建時(shí)序圖對(duì)象 timeSeries = new TimeSeries(chartContent,Millisecond.class); TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(timeSeries); JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(title,"時(shí)間(秒)",yaxisName,timeseriescollection,true,true,false); XYPlot xyplot = jfreechart.getXYPlot(); //縱坐標(biāo)設(shè)定 ValueAxis valueaxis = xyplot.getDomainAxis(); //自動(dòng)設(shè)置數(shù)據(jù)軸數(shù)據(jù)范圍 valueaxis.setAutoRange(true); //數(shù)據(jù)軸固定數(shù)據(jù)范圍 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","隨機(jī)數(shù)","數(shù)值"); 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); } }); } }
這兩中方法都有一個(gè)問(wèn)題,就是每實(shí)現(xiàn)一個(gè)圖就要重新寫一次,因?yàn)閷?shí)時(shí)數(shù)據(jù)無(wú)法通過(guò)參數(shù)傳進(jìn)來(lái),在想有沒(méi)有可能通過(guò)setXXX()方式傳進(jìn)實(shí)時(shí)數(shù)據(jù),那樣的話就可以將實(shí)時(shí)曲線繪制類封裝起來(lái),而只需傳遞些參數(shù)即可,或者誰(shuí)有更好的辦法?
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java獲得一個(gè)數(shù)組的指定長(zhǎng)度排列組合算法示例
這篇文章主要介紹了Java獲得一個(gè)數(shù)組的指定長(zhǎng)度排列組合算法,結(jié)合實(shí)例形式分析了java排列組合相關(guān)數(shù)組遍歷、運(yùn)算操作技巧,需要的朋友可以參考下2019-06-06SpringMVC中Model和ModelAndView的EL表達(dá)式取值方法
下面小編就為大家分享一篇SpringMVC中Model和ModelAndView的EL表達(dá)式取值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03Hibernate迫切連接和普通連接的區(qū)別實(shí)例詳解
這篇文章主要介紹了Hibernate迫切連接和普通連接的區(qū)別實(shí)例詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12Jenkins環(huán)境搭建之下載與安裝過(guò)程
Jenkins是一個(gè)功能強(qiáng)大的應(yīng)用程序,允許持續(xù)集成和持續(xù)交付項(xiàng)目,集成Jenkins可以用于一些測(cè)試和部署技術(shù),對(duì)Jenkins環(huán)境搭建之下載與安裝過(guò)程感興趣的朋友跟隨小編一起看看吧2021-12-12Java數(shù)據(jù)結(jié)構(gòu)之鏈表詳解
本篇文章我們將講解一種新型的數(shù)據(jù)結(jié)構(gòu)—鏈表,鏈表是一種使用廣泛的通用數(shù)據(jù)結(jié)構(gòu),它可以用來(lái)作為實(shí)現(xiàn)棧,隊(duì)列等數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ).文中有非常詳細(xì)的介紹,需要的朋友可以參考下2021-05-05Java實(shí)現(xiàn)一鍵生成表controller,service,mapper文件
這篇文章主要為大家詳細(xì)介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)一鍵生成表controller,service,mapper文件,文中的示例代碼講解詳細(xì),需要的可以收藏一下2023-05-05MyBatis如何調(diào)用存儲(chǔ)過(guò)程與存儲(chǔ)函數(shù)
這篇文章主要介紹了MyBatis如何調(diào)用存儲(chǔ)過(guò)程與存儲(chǔ)函數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11