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

10年積累的成都網站設計、網站制作經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先做網站設計后付款的網站建設流程,更有金塔免費網站建設讓你可以放心的選擇與我們合作。
另一種方式就是將實時類實現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()方式傳進實時數據,那樣的話就可以將實時曲線繪制類封裝起來,而只需傳遞些參數即可,或者誰有更好的辦法?
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持創新互聯。
文章題目:JFreeChart實現實時曲線圖
網站路徑:http://www.yijiale78.com/article18/ghdedp.html
成都網站建設公司_創新互聯,為您提供品牌網站設計、ChatGPT、定制開發、小程序開發、域名注冊、App設計
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯