因為一個項目需要,於是在網上找了一個關於形成餅圖、直條圖等的JFreeChart。
1.JFreeChart的介紹
JFreeChart 是一個開源的 JAVA 項目,它主要用來開發各種各樣的圖表,這些圖表包括:餅圖、柱狀圖 ( 普通柱狀圖以及堆棧柱狀圖 ) 、線圖、地區圖、分布圖、混合圖、甘特圖以及一些儀錶盤等等。在這些不同式樣的圖表上可以滿足目前商業系統的要求。 JFreeChart 是一種基於 JAVA 語言的圖表開發技術。 JFreeChart 可用於 Servlet 、 JSP 、 Applet 、 Java Appication 環境中,通過 JDBC 可動態顯示任何資料庫資料,結合 Itext 可以輸出至 PDF 檔案。
註:需要的一些JFreeChart 包可以在http://sourceforge.net/project/showfiles.php(JFreeChart官方網站)免費下載到
2.下面是一個形成餅圖和直條圖的執行個體:
1>類中的寫法:
import java.awt.Color;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.sql.SQLException;
import java.io.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardPieToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import com.sun.rowset.CachedRowSetImpl;
public class Qshuju1 {
DB db=new DB();//連結資料庫的類
CachedRowSetImpl crs;
public DefaultPieDataset getdataset() {//從資料庫中取值,形成餅圖的資料群組
DefaultPieDataset data = new DefaultPieDataset();
try {
crs = new CachedRowSetImpl();
crs=db.dbquery("select * from T_tongjitu");
while(crs.next()){
String name=new String(((crs.getString("name")).trim()));
String shuliang=new String(((crs.getString("shuliang")).trim()));
Float sl=Float.parseFloat(shuliang);
data.setValue(name, sl);
System.out.println(name+"**********"+sl);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return data;
}
public DefaultCategoryDataset getdataCategory() {{//從資料庫中取值,形成直條圖的資料群組
DefaultCategoryDataset data=new DefaultCategoryDataset();
try {
crs = new CachedRowSetImpl();
crs=db.dbquery("select * from T_tongjitu");
while(crs.next()){
String name=new String(((crs.getString("name")).trim()));
String shuliang=new String(((crs.getString("shuliang")).trim()));
Float sl=Float.parseFloat(shuliang);
data.setValue(sl,name,"人員數量");
System.out.println(name+"**********"+sl);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return data;
}
public String getBingURL(HttpServletRequest request,HttpServletResponse response) {//形成一個餅圖
String filename = null;
try{
PiePlot3D plot=new PiePlot3D(getdataset()); // 產生一個3D餅圖
// plot.setURLGenerator( new StandardPieURLGenerator( " DegreedView.jsp " )); // 設定圖片連結
JFreeChart chart=new JFreeChart( "" ,JFreeChart.DEFAULT_TITLE_FONT, plot, true );
chart.setBackgroundPaint(java.awt.Color.white); // 可選,設定圖片背景色
chart.setTitle( " 程式員學曆情況調查表-By Alpha " ); // 可選,設定圖片標題
plot.setToolTipGenerator( new StandardPieToolTipGenerator());
StandardEntityCollection sec=new StandardEntityCollection();
ChartRenderingInfo info=new ChartRenderingInfo(sec);
// PrintWriter w = new PrintWriter(out); // 輸出MAP資訊
HttpSession session = request.getSession();
filename = ServletUtilities.saveChartAsPNG(chart, 500 , 300 ,info,session);// 500是圖片長度,300是圖片高度
// String filename=ServletUtilities.saveChartAsJPEG(chart, 500 , 300 ,info,session);
// ChartUtilities.writeImageMap(w, " map0 " ,info, false );
String graphURL=request.getContextPath() + "/servlet/DisplayChart?filename=" +filename;
//形成的圖片地址
return graphURL;
}catch(Exception e){
System.out.println("異常了!!!");
}
return null;
}
public String getZhuURL(HttpServletRequest request,HttpServletResponse response) {//形成一個直條圖
String filename = null;
String title="程式員學曆情況調查表-By Alpha";
try{
// JFreeChart chart=ChartFactory.createBarChart3D( " 程式員學曆情況調查表-By Alpha " , " 程式員學曆情況調查表-By Alpha " ,"人數",getdataset(),PlotOrientation.VERTICAL, true , false , false );
JFreeChart chart=ChartFactory.createBarChart3D(title, "程式員學曆情況調查表-By Alpha", "人數", getdataCategory(), PlotOrientation.VERTICAL, true, false, false);
// ChartFactory.createBarChart3D( 圖表標題, 目錄軸的顯示標籤, 數值軸的顯示標籤,資料集, 圖表方向:水平、垂直, 是否顯示圖例(對於簡單的柱狀圖必須是false), 是否產生工具, 是否產生URL連結);
HttpSession session = request.getSession();
filename= ServletUtilities.saveChartAsPNG(chart, 400, 200, null, session);
String graphURL=request.getContextPath() + "/servlet/DisplayChart?filename=" +filename;
//形成的圖片地址
return graphURL;
}catch(Exception e){
System.out.println("異常了!!!");
}
return null;
}
}
2>jsp頁面上的寫法
<jsp:useBean id="qsj" class="com.Qshuju1" />
<body>
<P ALIGN ="CENTER">
<img src ="<%=qsj.getBingURL(request,response) %>" width =500 height =300 border =0 usemap ="#map0"><br>
<img src ="<%=qsj.getZhuURL(request,response) %>" width =500 height =300 border =0 usemap ="#map0">
</P></body>
3>web.xml中的配置
由於以前沒有接觸過,在網上搜尋並不全面,因為web.xml的原因出現的錯誤,浪費了半天的時間才解決!!!
<web-app>
<servlet>
<servlet-name>DisplayChart</servlet-name>
<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DisplayChart</servlet-name>
<url-pattern>/servlet/DisplayChart</url-pattern>
</servlet-mapping>
</web-app>
註:上面形成直條圖會出現亂碼問題解決方案請看我的另一篇
http://www.cn-java.com/www1/index.php?uid-565002-action-viewspace-itemid-10678
或
http://blog.csdn.net/zhaotao_king/archive/2008/12/26/3615096.aspx