1.生成圖形報表時一般使用制圖工廠ChartFatory類進(jìn)行創(chuàng)建娜遵,只有創(chuàng)建制圖對象jfreechart后才能生成實(shí)際圖片,然后可以設(shè)置圖片邊界兢交,字體等屬性
2.數(shù)據(jù)集合是用來裝載繪圖表所需要的數(shù)據(jù)集
核心對象---dataset接口
3.通過數(shù)據(jù)集合生成的數(shù)據(jù)圖表通過繪圖區(qū)對象進(jìn)行屬性設(shè)置种玛,(背景色曹洽,透明度等)由plot類定義程储,plot有三個子類蹭沛、
3--1.pieplot類:用來繪制餅形圖
3--2,categoryplot類:支持折線圖章鲤,區(qū)域圖等
3--3摊灭,xyplot類:可以具有多個數(shù)據(jù)集合,
4.坐標(biāo)軸對象:axis
4.1:categoryaxis類:對分類軸進(jìn)行設(shè)置咏窿,
4.2:valueaxis類斟或;對數(shù)據(jù)軸進(jìn)行設(shè)置
4.2.1:numberaxis類:對數(shù)值類型數(shù)據(jù)軸進(jìn)行設(shè)置
4.2.2:dateaxis類:對日期軸進(jìn)行設(shè)置
5.abstactRenderer圖片渲染對象:
6.制圖過程:配置jfreechart素征,創(chuàng)建數(shù)據(jù)集合和jfreechart實(shí)例以及設(shè)置圖標(biāo)相關(guān)屬性
6.1獲取圖片:課生成.jpeg,.png格式圖片集嵌,一般由jfreechart組件進(jìn)行管理來生成圖片,
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)建時序圖對象
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();
//縱坐標(biāo)設(shè)定
ValueAxis valueaxis = xyplot.getDomainAxis();
//自動設(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);
}
});
}
}
https://github.com/qingyibaimao/JFreeChart.git
嗯嗯加點(diǎn)東西御毅,這個東西寫出來時的一個文檔
使用jfreechart技術(shù)實(shí)現(xiàn)數(shù)據(jù)的動態(tài)圖表
1.主頁面:
2.首先介紹下jfreechart根欧,jfreechart是java的一個類包,主要負(fù)責(zé)實(shí)現(xiàn)柱狀圖端蛆,折線圖凤粗,餅圖的動態(tài)圖,從而使數(shù)據(jù)可視化今豆,便于更好更直觀的查看數(shù)據(jù)
3.jfreechart技術(shù)實(shí)現(xiàn):首先配置一個jfreechart自帶類DisplayChart:該類用于將數(shù)據(jù)繪成圖片從而展現(xiàn)出來:(注:該類是就freechart包自帶類嫌拣,只需在web.xml中配置url從而可以訪問即可,不要再自己建一個DisplayChart類呆躲,否則會顯示這個類一直報錯异逐,我再這一點(diǎn)整整苦惱了兩天)
嘿嘿嘿其實(shí)就是一個servlet配置,再次說明插掂,不要再自己建DisplayChart類灰瞻,這個jfreechart的jar包里面有
嗯,該主角了辅甥,本來以為高大上的以為很牛逼酝润,搞清楚之后核心就是兩個方面,一個是創(chuàng)建數(shù)據(jù)集合璃弄,也就是獲取你需要制圖的數(shù)據(jù)要销,可以你自己手動添加,也可以連接數(shù)據(jù)庫獲取數(shù)據(jù)庫值夏块,當(dāng)然也可以再引用其他包自動獲取數(shù)據(jù)蕉陋,必須我后來找的一個實(shí)時獲取本機(jī)cpu捐凭,內(nèi)存,緩沖區(qū)凳鬓,交換區(qū)的信息茁肠,和一個獲取java虛擬機(jī)信息的方法,當(dāng)然也可以和嵌入式結(jié)合缩举,往外面各個地方放點(diǎn)傳感器啊然后將傳感器獲取的數(shù)據(jù)動態(tài)的傳入進(jìn)來做成一個動態(tài)折線圖垦梆,那么就6了,當(dāng)然我后來寫的時候又一次突然想起來電腦的任務(wù)管理器里面仅孩,可以動態(tài)追蹤C(jī)PU使用率啊什么托猩,頓時感覺好牛逼,可是我再網(wǎng)上巴拉了好久辽慕,很遺憾沒找到相關(guān)的類京腥,好了回歸正題
剛說到核心之一的創(chuàng)建數(shù)據(jù)集合,數(shù)據(jù)有了溅蛉,那就剩下制圖了公浪,jfreechart里面包裝了制作各種圖的方法,只需要引用就行船侧, 當(dāng)然對這些圖的美化也是各種各樣
舉個栗子吧:
第一個jdbc餅圖欠气,額就是我暑假留校這一段時間的消費(fèi)情況嗎,把數(shù)據(jù)寫到了數(shù)據(jù)圖里面镜撩,好了看代碼:
額预柒,這一塊其實(shí)就是連接數(shù)據(jù)庫獲取數(shù)據(jù),函數(shù)里面沒啥說的袁梗,就是注意要實(shí)現(xiàn)PieDataset對象宜鸯,引用了這個對象就可以把數(shù)據(jù)返回給jfreechart內(nèi)部,從而在繪圖的時候才能引用這個數(shù)據(jù)
然后遮怜,這一塊就是繪圖啦淋袖,首先實(shí)例JFreeChart組件,想畫圖就全靠這個了奈泪,因此這也是該技術(shù)的一個核心類組件适贸,這一塊每一句后面都添加了注釋是干啥的,不過涝桅,只寫這些是畫不出一個圖的拜姿,這個步驟只是把這個圖需要的數(shù)據(jù)整到一塊,并說明是畫成一個什么樣的圖以及對這個圖細(xì)節(jié)的修改
最后,開始畫圖了
對冯遂,看的沒錯蕊肥,剛剛寫的那兩部分,一個獲取數(shù)據(jù),一個創(chuàng)建了一個制圖對象壁却,但是制圖這個活還是交給jfreechart的一個ServletUtilities類的一個saveChartAsJPEG()方法實(shí)現(xiàn)的批狱,在改方法中引入制圖對象,圖的長和寬以及一個HttpSession對象展东,然后到這里圖片就生成了赔硫,然后圖片有了,可是他在哪盐肃?
這就要用到一直強(qiáng)調(diào)的不用自己建類的DisplayChart爪膊,通過getContextPath()+"/servlet/DisplayChart?filename="+filename
至于后面的輸出問題,怪我是個直男咯一點(diǎn)點(diǎn)css的東西都不想加砸王,就默默做個安靜的后臺碼農(nóng)吧
好了繼續(xù)來個時序圖
這個推盛,就說下數(shù)據(jù)獲取和圖對象的制作吧
是的,獲取隨機(jī)數(shù)啦
然后還是獲取jfreechart對象然后對圖片進(jìn)行渲染處理了谦铃,各個不同圖的區(qū)別就在于一個制圖對象的不同耘成,每個圖有相對應(yīng)的方法去處理相應(yīng)的對象,而圖片制作和獲取圖片的方法是一模一樣的
然后你以為結(jié)束了驹闰?
不瘪菌,還有一個獲取本機(jī)電腦信息的類啊:sigar包
這個包疮方,可以獲取很多東西控嗜,
cpu信息
每塊CPU的使用信息
內(nèi)存和交換區(qū)信息
硬盤信息
以及我自己也不知到的是什么東西的東西
這些是總結(jié)官方文檔里的方法寫的茧彤,總結(jié)一下骡显,電腦砸了吧,可以換新的了曾掂,2333
就大致說下獲取CPU惫谤,內(nèi)存,交換區(qū)的方法吧
先看下cpu使用信息吧珠洗,還是挺不錯得溜歪,夠用了
至于內(nèi)存的話
4G真的不夠用啊,感覺8G最低標(biāo)配啊许蓖,攢錢買吧
看如何獲取CPU信息吧蝴猪,是的就這3個步驟,實(shí)例化sigar膊爪,獲取里面的cpu對象自阱,然后使用各種方法了,就是那么簡單米酬,內(nèi)存和其他的也是一樣的
獲取交換區(qū)的
獲取內(nèi)存信息
額沛豌,有點(diǎn)少,可是赃额,沒辦法加派,結(jié)束了叫确,另附下github地址里面有完整代碼
https://github.com/qingyibaimao/JFreeChart/releases/tag/JFreechart
代碼截圖沒插進(jìn)來,已經(jīng)1點(diǎn)了該睡覺了有點(diǎn)懶就不加了芍锦。代碼可以去github里看
大家晚安竹勉,明天繼續(xù)努力,學(xué)習(xí)練習(xí)做項(xiàng)目娄琉,早日賺錢給大哥買小院子饶米,嗯,就是這樣车胡,Bye