国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

JFreeChart實現實時曲線圖

2024-07-14 08:41:17
字體:
來源:轉載
供稿:網友

最近要用到實時曲線圖,在網上大概找了一下,有兩種實現方式,一種就是JFreeChart的官方實例MemoryUsageDemo.java.通過一個實現java.Swing.Timer的內部類,在其監聽器中將實時數據添加進TimeSeries,由于Timer是會實時執行的,所以這個方法倒是沒有什么問題,可以參考代碼。

另一種方式就是將實時類實現Runnable接口,在其run()方法中,通過無限循環將實時數據添加進TimeSeries,下面是較簡單的實現代碼: 

//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()方式傳進實時數據,那樣的話就可以將實時曲線繪制類封裝起來,而只需傳遞些參數即可,或者誰有更好的辦法?

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 仪征市| 涪陵区| 合作市| 武定县| 乌审旗| 青阳县| 隆昌县| 乌拉特中旗| 迁安市| 上饶市| 慈利县| 西平县| 甘肃省| 美姑县| 十堰市| 寻甸| 固原市| 宁南县| 张家港市| 福州市| 车险| 慈利县| 八宿县| 南通市| 水富县| 牡丹江市| 博乐市| 和龙市| 武邑县| 宜黄县| 富锦市| 明光市| 商城县| 永福县| 南丹县| 林口县| 岚皋县| 汤阴县| 巴林右旗| 玉树县| 梁平县|