国产探花免费观看_亚洲丰满少妇自慰呻吟_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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 中山市| 米泉市| 湟中县| 昭通市| 荥阳市| 中山市| 桃源县| 宁河县| 怀宁县| 寻乌县| 南召县| 宁南县| 洮南市| 凤冈县| 萝北县| 特克斯县| 阿勒泰市| 镇雄县| 防城港市| 咸丰县| 新宾| 抚顺县| 德安县| 保定市| 牟定县| 南召县| 南城县| 仲巴县| 云阳县| 鹤山市| 鄂托克前旗| 晋江市| 江陵县| 读书| 江源县| 高邮市| 磐石市| 宝鸡市| 瑞昌市| 定结县| 鸡西市|