|
Posted on 2008-10-27 15:58 夢與橋 閱讀(1316) 評論(0) 編輯 收藏 所屬分類: jsp程序設計
1、JFreeChart組件,用于圖形的開發。
1)到 http://www.jfree.org/jfreechart/下載JFreeChart的zip文件,解壓后得到的目錄的lib子目錄中的所有jar包拷貝到Web應用的WEB-INF/lib目錄下,完成安裝。
2)用JFreeChart創建Web圖形需要經過3個步驟:
Œ創建一個包含要在Web圖形中顯示的數據的數據集對象。
?創建一個用于作圖的JFreeChart對象。
?向目標作圖。Web圖表的作圖目標為response.getOutputStream(),即response對象的輸出流。
3)創建一個簡單的餅形圖:
 <% @ 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" %>
<%
//第一步:創建一個包含要在Web圖形中顯示的數據的數據集對象
/*顯示數據系列,也可以從數據庫讀取數據,構建數據集對象*/
String interest[]=new String[]{"文學","相聲","編程","體育","音樂","歷史"};
/*數據系列對應的值*/
int interestValue[]={88,73,98,67,56,66};
/*餅形圖的數據對象集對象可以是實現了JFfreeChart組件中的PieDataset接口的類的實例,也可以使用JFreeChart組件中已有的已實現了此接口的DefaultPieDataset類,更方便和快捷。*/
DefaultPieDataset pieDataset = new DefaultPieDataset();
for(int i=0;i<interest.length;i++)
pieDataset.setValue(interest[i],interestValue[i]);
//第二步:創建一個用于作圖的JFreeChart對象
/*ChartFactory是一個工廠類,可用于創建JFreeChart對象。這里使用的方法是createPieChart()方法,參數作了簡單的設置。還有別的方法。*/
String titleString="我的愛好統計圖";//圖的標題
JFreeChart chart = ChartFactory.createPieChart(titleString,pieDataset,true,true, true);
//第三步:向目標作圖。
ChartUtilities.writeChartAsJPEG(response.getOutputStream(),chart,800,500);
%>
4)創建一個簡單的條形圖:
 <% @ 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創建條形圖需要用實現了CategoryDataset接口
*或IntervalXYDataset接口的類的實例來作為數據集對象,
*常用JFreeChart中自帶的已實現了CategoryDataset接口的DefaultCategoryDataset類。
*/
//第一步:創建一個包含要在Web圖形中顯示的數據的數據集對象
String dataName[]=new String[]{"文學","相聲","編程","體育","音樂","歷史"};//顯示數據系列
int dataValueCount[]={88,73,98,67,56,66};//數據系列對應的值
//------創建數據集,并設置值------
DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();
for(int i=0;i<dataName.length;i++)
categoryDataset.addValue(dataValueCount[i],dataName[i],dataName[i]);
//第二步:創建一個用于作圖的JFreeChart對象
String titleString="我的愛好統計圖";//圖的標題
/**
*createBarChart方法中的參數依次為圖形標題、分類軸標簽(默認為橫向)、
*數值軸標簽(默認為縱向)、數據集、圖形顯示方向、是否顯示圖例、是否有工具條、是否有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()方法來設置柱狀條的顏色,如
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允許修改類型軸的一些設置,如:
§第一條柱狀條與數值軸之間的空白間隔距。
§柱狀條之間的空白間距。
§最后一條柱狀條后空白距離。此三項的設置方法示例:
CategoryPlot plot=chart.getCategoryPlot();
CategoryAxis axis=plot.getDomainAxis();
axis.setLowerMargin(0.01);//百分這二
axis.setCategoryMargin(0.10);//百分之十
axis.setUpperMargin(0.02);//百分之二
5)創建線形圖:
<%@ 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創建線形圖使用的數據集可以是CategoryDataset接口
*或XYDataset的實現類的實例。
*/
//------數據線------
String dataLine1="物理";
String dataLine2="化學";
String dataLine3="數學";
//------數據列------
String dataCol1="1";
String dataCol2="2";
String dataCol3="3";
String dataCol4="4";
String dataCol5="5";
String dataCol6="6";
//------創建數據集,并設置值------
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);
//------創建線圖------
String titleString="XXXXXX學生成績線圖";//圖的標題
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:數據集相關的接口和類。
?org.jfree.chart.plot:繪圖相關的類和接口。
?org.jfree.chart.data.general:常用的數據集相關的接口和類。
7)開發中最為常用的幾個類或接口:
ŒJFreeChart類。這個類在org.jfree.chart包中,用于協調整個畫圖的處理過程。生成這個類通常使用ChartFactory類。它的主要方法有:public void draw(Graphics2D g2,Rectang2D area)此方法用于在圖形設備的特定區域畫圖。參數g2代表一個圖形,area為包容這個圖形的矩形容器。java中提供的圖形設備有:屏幕、打印機、圖形緩沖區。JFreeChart繪圖是由不同的java.awt.Graphics2D包中的抽象類實現的,只有利用它們,JFreeChart才能向不同的圖形設備輸出圖形。
?ChartFactory類。這是一個工廠類,即org.jfree.chart.ChartFactory,它提供了一些比較方便的創建圖形對象的方法。此類常用的方法有:public static JFreeChart createPieChart(String title,PieDataset dataset,boolean legend,boolean tooltips,boolean urls),此方法用于創建一個標準的餅圖。title是標題;dataset是創建餅形圖所使用的特定數據集(可為空);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圖片,這些方法都是表態是靜態的。
writeChartAsPNG(java.io.OutputStream out, JFreeChart chart, int width, int height) throws java.io.IOException
writeChartAsJPEG(java.io.OutputStream out, JFreeChart chart, int width, int height) throws java.io.IOException
writeChartAsJPEG(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 包中,這是一個默認情況下的使用的分類數據集接口。構造函數:public DefaultCategoryDataset()生成個空的數據集。
addValue(double value, java.lang.Comparable rowKey, java.lang.Comparable columnKey)
setValue(double value, java.lang.Comparable rowKey, java.lang.Comparable columnKey)
兩者功能相同,向數據中增加值,如果這個數據已存在則覆蓋它。
|