jsp程序設(shè)計:Web圖表開發(fā)之JFreeChart組件
Posted on 2008-10-27 15:58 夢與橋 閱讀(1319) 評論(0) 編輯 收藏 所屬分類: jsp程序設(shè)計1、JFreeChart組件,用于圖形的開發(fā)。
1)到http://www.jfree.org/jfreechart/下載JFreeChart的zip文件,解壓后得到的目錄的lib子目錄中的所有jar包拷貝到Web應(yīng)用的WEB-INF/lib目錄下,完成安裝。
2)用JFreeChart創(chuàng)建Web圖形需要經(jīng)過3個步驟:
Œ創(chuàng)建一個包含要在Web圖形中顯示的數(shù)據(jù)的數(shù)據(jù)集對象。
?創(chuàng)建一個用于作圖的JFreeChart對象。
?向目標作圖。Web圖表的作圖目標為response.getOutputStream(),即response對象的輸出流。
3)創(chuàng)建一個簡單的餅形圖:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="org.jfree.chart.JFreeChart,org.jfree.chart.ChartUtilities,
org.jfree.chart.ChartFactory,org.jfree.data.general.DefaultPieDataset" %>
<%
//第一步:創(chuàng)建一個包含要在Web圖形中顯示的數(shù)據(jù)的數(shù)據(jù)集對象
/*顯示數(shù)據(jù)系列,也可以從數(shù)據(jù)庫讀取數(shù)據(jù),構(gòu)建數(shù)據(jù)集對象*/
String interest[]=new String[]{"文學(xué)","相聲","編程","體育","音樂","歷史"};
/*數(shù)據(jù)系列對應(yīng)的值*/
int interestValue[]={88,73,98,67,56,66};
/*餅形圖的數(shù)據(jù)對象集對象可以是實現(xiàn)了JFfreeChart組件中的PieDataset接口的類的實例,也可以使用JFreeChart組件中已有的已實現(xiàn)了此接口的DefaultPieDataset類,更方便和快捷。*/
DefaultPieDataset pieDataset = new DefaultPieDataset();
for(int i=0;i<interest.length;i++)
pieDataset.setValue(interest[i],interestValue[i]);
//第二步:創(chuàng)建一個用于作圖的JFreeChart對象
/*ChartFactory是一個工廠類,可用于創(chuàng)建JFreeChart對象。這里使用的方法是createPieChart()方法,參數(shù)作了簡單的設(shè)置。還有別的方法。*/
String titleString="我的愛好統(tǒng)計圖";//圖的標題
JFreeChart chart = ChartFactory.createPieChart(titleString,pieDataset,true,true, true);
//第三步:向目標作圖。
ChartUtilities.writeChartAsJPEG(response.getOutputStream(),chart,800,500);
%>
4)創(chuàng)建一個簡單的條形圖:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="org.jfree.chart.JFreeChart,org.jfree.chart.ChartUtilities,
org.jfree.chart.ChartFactory,
org.jfree.chart.plot.PlotOrientation,
org.jfree.data.category.DefaultCategoryDataset"%>
<%
/**
*用JFreeChart創(chuàng)建條形圖需要用實現(xiàn)了CategoryDataset接口
*或IntervalXYDataset接口的類的實例來作為數(shù)據(jù)集對象,
*常用JFreeChart中自帶的已實現(xiàn)了CategoryDataset接口的DefaultCategoryDataset類。
*/
//第一步:創(chuàng)建一個包含要在Web圖形中顯示的數(shù)據(jù)的數(shù)據(jù)集對象
String dataName[]=new String[]{"文學(xué)","相聲","編程","體育","音樂","歷史"};//顯示數(shù)據(jù)系列
int dataValueCount[]={88,73,98,67,56,66};//數(shù)據(jù)系列對應(yīng)的值
//------創(chuàng)建數(shù)據(jù)集,并設(shè)置值------
DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();
for(int i=0;i<dataName.length;i++)
categoryDataset.addValue(dataValueCount[i],dataName[i],dataName[i]);
//第二步:創(chuàng)建一個用于作圖的JFreeChart對象
String titleString="我的愛好統(tǒng)計圖";//圖的標題
/**
*createBarChart方法中的參數(shù)依次為圖形標題、分類軸標簽(默認為橫向)、
*數(shù)值軸標簽(默認為縱向)、數(shù)據(jù)集、圖形顯示方向、是否顯示圖例、是否有工具條、是否有URL
*/
JFreeChart chart = ChartFactory.createBarChart(titleString,"愛好","愛它幾分",
categoryDataset,PlotOrientation.VERTICAL,true,true,false);
//第三步:向目標作圖。
ChartUtilities.writeChartAsJPEG(response.getOutputStream(),chart,500,300);
%>
注:條形圖的顯示也可以作一些定制性的修改,常用的修改方法:
Œ修改圖形的背景顏色:chart.setBackgroundPaint(new Color(#BBBBDD));
?修改圖形的柱狀條顏色。需要使用setCategoryPlot()方法,它非JFreeChart類所有,需要先用JFreeChart類的實例的getCategoryPlot()方法得到一個CategoryPlot對象,再用CategoryPlot對象的getRenderer()方法得到一個BarRenderer對象,用此對象的setSeriesPaint()方法來設(shè)置柱狀條的顏色,如
CategoryPlot plot=chart.getCategoryPlot();
BarRenderer renderer=(BarRenderer)plot.getRenderer();
renderer.setSeriesPaint(0,Color.red);
renderer.setSeriesPaint(1,Color.yellow);
renderer.setSeriesPaint(2,Color.green);
?柱狀條的間距。JFreeChart允許修改類型軸的一些設(shè)置,如:
§第一條柱狀條與數(shù)值軸之間的空白間隔距。
§柱狀條之間的空白間距。
§最后一條柱狀條后空白距離。此三項的設(shè)置方法示例:
CategoryPlot plot=chart.getCategoryPlot();
CategoryAxis axis=plot.getDomainAxis();
axis.setLowerMargin(0.01);//百分這二
axis.setCategoryMargin(0.10);//百分之十
axis.setUpperMargin(0.02);//百分之二
5)創(chuàng)建線形圖:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="org.jfree.chart.JFreeChart,org.jfree.chart.ChartUtilities,
org.jfree.chart.ChartFactory,
org.jfree.chart.plot.PlotOrientation,
org.jfree.data.category.DefaultCategoryDataset"%>
<%
/**
*JFreeChart創(chuàng)建線形圖使用的數(shù)據(jù)集可以是CategoryDataset接口
*或XYDataset的實現(xiàn)類的實例。
*/
//------數(shù)據(jù)線------
String dataLine1="物理";
String dataLine2="化學(xué)";
String dataLine3="數(shù)學(xué)";
//------數(shù)據(jù)列------
String dataCol1="1";
String dataCol2="2";
String dataCol3="3";
String dataCol4="4";
String dataCol5="5";
String dataCol6="6";
//------創(chuàng)建數(shù)據(jù)集,并設(shè)置值------
DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();
categoryDataset.addValue(60,dataLine1,dataCol1);
categoryDataset.addValue(70,dataLine1,dataCol2);
categoryDataset.addValue(83,dataLine1,dataCol3);
categoryDataset.addValue(90,dataLine1,dataCol4);
categoryDataset.addValue(92,dataLine1,dataCol5);
categoryDataset.addValue(85,dataLine1,dataCol6);
categoryDataset.addValue(63,dataLine2,dataCol1);
categoryDataset.addValue(45,dataLine2,dataCol2);
categoryDataset.addValue(67,dataLine2,dataCol3);
categoryDataset.addValue(76,dataLine2,dataCol4);
categoryDataset.addValue(90,dataLine2,dataCol5);
categoryDataset.addValue(87,dataLine2,dataCol6);
categoryDataset.addValue(50,dataLine3,dataCol1);
categoryDataset.addValue(76,dataLine3,dataCol2);
categoryDataset.addValue(84,dataLine3,dataCol3);
categoryDataset.addValue(96,dataLine3,dataCol4);
categoryDataset.addValue(88,dataLine3,dataCol5);
categoryDataset.addValue(80,dataLine3,dataCol6);
//------創(chuàng)建線圖------
String titleString="XXXXXX學(xué)生成績線圖";//圖的標題
JFreeChart chart = ChartFactory.createLineChart(titleString,"第幾次考試","成績",
categoryDataset,PlotOrientation.VERTICAL,true,true,false);
ChartUtilities.writeChartAsJPEG(response.getOutputStream(),chart,500,300);
%>
6)JFreeChart中常用的幾個包:
Œorg.jfree.chart:這個包包含了JFreeChart最為重要的也是為常用的幾個類和接口。
?org.jfree.chart.data:數(shù)據(jù)集相關(guān)的接口和類。
?org.jfree.chart.plot:繪圖相關(guān)的類和接口。
?org.jfree.chart.data.general:常用的數(shù)據(jù)集相關(guān)的接口和類。
7)開發(fā)中最為常用的幾個類或接口:
ŒJFreeChart類。這個類在org.jfree.chart包中,用于協(xié)調(diào)整個畫圖的處理過程。生成這個類通常使用ChartFactory類。它的主要方法有:public void draw(Graphics2D g2,Rectang2D area)此方法用于在圖形設(shè)備的特定區(qū)域畫圖。參數(shù)g2代表一個圖形,area為包容這個圖形的矩形容器。java中提供的圖形設(shè)備有:屏幕、打印機、圖形緩沖區(qū)。JFreeChart繪圖是由不同的java.awt.Graphics2D包中的抽象類實現(xiàn)的,只有利用它們,JFreeChart才能向不同的圖形設(shè)備輸出圖形。
?ChartFactory類。這是一個工廠類,即org.jfree.chart.ChartFactory,它提供了一些比較方便的創(chuàng)建圖形對象的方法。此類常用的方法有:public static JFreeChart createPieChart(String title,PieDataset dataset,boolean legend,boolean tooltips,boolean urls),此方法用于創(chuàng)建一個標準的餅圖。title是標題;dataset是創(chuàng)建餅形圖所使用的特定數(shù)據(jù)集(可為空);legend表示是否為一個圖例;tooltips用于配置圖形是否生成提示信息;urls配置圖形是否生成URL。public static JFreeChart createBarChart(String title,String categoryAxisLabel,String tvalueAxisLabbel,CategoryDataset dataset,PlotOrientation orientation,boolean legend,boolean tooltips,boolean urls)此方法用于生成條形圖。public static JFreeChart createLineChart(String title,String categoryAxisLabel,String valueAxisLabel,CategoryDataset dataset,PlotOrientation orientation,boolean legend,boolean tooltips,boolean urls),其中categoryAxisLabel指出橫向軸(分類軸)的提示字符串,valueAxisLabel指出橫向軸(值軸)的提示字符串,orientation指出條形圖為橫向還是豎向。
?ChartUtilities類。它在org.jfree.chart包中,能過可從chart對象生成PNG格式或JPEG格式的圖片,也可生成帶有點擊范圍的HTML圖片,這些方法都是表態(tài)是靜態(tài)的。
?PlotOrientaion類,它在包中,用于表示圖形的顯示方向,主要有兩屬性:public static final PlotOrientation HORIZONTAL(橫向)與public static final PlotOrientation VERTICAL(縱向)。
DefaultCategoryDataset接口,它在org.jfree.data.category 包中,這是一個默認情況下的使用的分類數(shù)據(jù)集接口。構(gòu)造函數(shù):public DefaultCategoryDataset()生成個空的數(shù)據(jù)集。
兩者功能相同,向數(shù)據(jù)中增加值,如果這個數(shù)據(jù)已存在則覆蓋它。
1)到http://www.jfree.org/jfreechart/下載JFreeChart的zip文件,解壓后得到的目錄的lib子目錄中的所有jar包拷貝到Web應(yīng)用的WEB-INF/lib目錄下,完成安裝。
2)用JFreeChart創(chuàng)建Web圖形需要經(jīng)過3個步驟:
Œ創(chuàng)建一個包含要在Web圖形中顯示的數(shù)據(jù)的數(shù)據(jù)集對象。
?創(chuàng)建一個用于作圖的JFreeChart對象。
?向目標作圖。Web圖表的作圖目標為response.getOutputStream(),即response對象的輸出流。
3)創(chuàng)建一個簡單的餅形圖:

















































Œ修改圖形的背景顏色:chart.setBackgroundPaint(new Color(#BBBBDD));
?修改圖形的柱狀條顏色。需要使用setCategoryPlot()方法,它非JFreeChart類所有,需要先用JFreeChart類的實例的getCategoryPlot()方法得到一個CategoryPlot對象,再用CategoryPlot對象的getRenderer()方法得到一個BarRenderer對象,用此對象的setSeriesPaint()方法來設(shè)置柱狀條的顏色,如





§第一條柱狀條與數(shù)值軸之間的空白間隔距。
§柱狀條之間的空白間距。
§最后一條柱狀條后空白距離。此三項的設(shè)置方法示例:




















































Œorg.jfree.chart:這個包包含了JFreeChart最為重要的也是為常用的幾個類和接口。
?org.jfree.chart.data:數(shù)據(jù)集相關(guān)的接口和類。
?org.jfree.chart.plot:繪圖相關(guān)的類和接口。
?org.jfree.chart.data.general:常用的數(shù)據(jù)集相關(guān)的接口和類。
7)開發(fā)中最為常用的幾個類或接口:
ŒJFreeChart類。這個類在org.jfree.chart包中,用于協(xié)調(diào)整個畫圖的處理過程。生成這個類通常使用ChartFactory類。它的主要方法有:public void draw(Graphics2D g2,Rectang2D area)此方法用于在圖形設(shè)備的特定區(qū)域畫圖。參數(shù)g2代表一個圖形,area為包容這個圖形的矩形容器。java中提供的圖形設(shè)備有:屏幕、打印機、圖形緩沖區(qū)。JFreeChart繪圖是由不同的java.awt.Graphics2D包中的抽象類實現(xiàn)的,只有利用它們,JFreeChart才能向不同的圖形設(shè)備輸出圖形。
?ChartFactory類。這是一個工廠類,即org.jfree.chart.ChartFactory,它提供了一些比較方便的創(chuàng)建圖形對象的方法。此類常用的方法有:public static JFreeChart createPieChart(String title,PieDataset dataset,boolean legend,boolean tooltips,boolean urls),此方法用于創(chuàng)建一個標準的餅圖。title是標題;dataset是創(chuàng)建餅形圖所使用的特定數(shù)據(jù)集(可為空);legend表示是否為一個圖例;tooltips用于配置圖形是否生成提示信息;urls配置圖形是否生成URL。public static JFreeChart createBarChart(String title,String categoryAxisLabel,String tvalueAxisLabbel,CategoryDataset dataset,PlotOrientation orientation,boolean legend,boolean tooltips,boolean urls)此方法用于生成條形圖。public static JFreeChart createLineChart(String title,String categoryAxisLabel,String valueAxisLabel,CategoryDataset dataset,PlotOrientation orientation,boolean legend,boolean tooltips,boolean urls),其中categoryAxisLabel指出橫向軸(分類軸)的提示字符串,valueAxisLabel指出橫向軸(值軸)的提示字符串,orientation指出條形圖為橫向還是豎向。
?ChartUtilities類。它在org.jfree.chart包中,能過可從chart對象生成PNG格式或JPEG格式的圖片,也可生成帶有點擊范圍的HTML圖片,這些方法都是表態(tài)是靜態(tài)的。
writeChartAsPNG(java.io.OutputStream out, JFreeChart chart, int width, int height)
throws java.io.IOExceptionwriteChartAsJPEG(java.io.OutputStream out, JFreeChart chart, int width, int height)
throws java.io.IOExceptionwriteChartAsJPEG(java.io.OutputStream out, JFreeChart chart, int width, int height, ChartRenderingInfo info)
throws java.io.IOException?PlotOrientaion類,它在包中,用于表示圖形的顯示方向,主要有兩屬性:public static final PlotOrientation HORIZONTAL(橫向)與public static final PlotOrientation VERTICAL(縱向)。
DefaultCategoryDataset接口,它在org.jfree.data.category 包中,這是一個默認情況下的使用的分類數(shù)據(jù)集接口。構(gòu)造函數(shù):public DefaultCategoryDataset()生成個空的數(shù)據(jù)集。
addValue(double value, java.lang.Comparable rowKey, java.lang.Comparable columnKey)
setValue(double value, java.lang.Comparable rowKey, java.lang.Comparable columnKey)
兩者功能相同,向數(shù)據(jù)中增加值,如果這個數(shù)據(jù)已存在則覆蓋它。