關於JFreeChart形成餅圖、直條圖

來源:互聯網
上載者:User

因為一個項目需要,於是在網上找了一個關於形成餅圖、直條圖等的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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.