隨筆-179  評論-666  文章-29  trackbacks-0
          阿里云服務器優惠券
          前段時間,也就是去年,在做一個項目的時候有這樣一個需求,根據用戶在Web頁面上向服務器提交的數據,根據條件從數據庫中取出相應的一系列數據后,要能在web瀏覽器上以圖表的形式顯示結果,形成直觀的對比,于是就要我們實現餅圖,柱圖的動態生成。在網上找了很久,找到了JFreeChart這么一個東西。

          JFreeChart
          是一個開源的 JAVA 項目,它主要用來開發各種各樣的圖表,這些圖表包括:餅圖、柱狀圖 ( 普通柱狀圖以及堆棧柱狀圖 ) 、線圖、區域圖、分布圖、混合圖、甘特圖以及一些儀表盤等等。在這些不同式樣的圖表上可以滿足目前商業系統的要求。 JFreeChart 是一種基于 JAVA 語言的圖表開發技術。 JFreeChart 可用于 Servlet 、 JSP 、 Applet 、 Java Appication 環境中,通過 JDBC 可動態顯示任何數據庫數據,結合 Itext 可以輸出至 PDF 文件。

          這個東西正符合我們的需求,于是對他進行了研究并試驗。前些時間懶,一直沒有把研究測試心得寫出來,現在閑下來,整理了一下,搞兩個例子放上來供大家參考吧。


          一、餅圖實例

          jsp頁面:index.jsp

          <%@ page contentType="text/html;charset=GBK"%>
          <%@ page import="org.jfree.data.general.DefaultPieDataset"%>
          <%@ page import="org.jfree.chart.*"%>
          <%@ page import="org.jfree.chart.plot.*"%>
          <%@ page import="org.jfree.chart.servlet.ServletUtilities"%>
          <%@ page import="org.jfree.chart.labels.StandardPieToolTipGenerator"%>
          <%@ page import="org.jfree.chart.urls.StandardPieURLGenerator"%>
          <%@ page import="org.jfree.chart.entity.StandardEntityCollection"%>
          <%@ page import="java.io.*"%>

          <HTML> 
          <HEAD> 
          <META http-equiv=Content-Type content="text/html; charset=GBK"> 
          <META NAME="Author" CONTENT="Alpha">
          <TITLE>程序員學歷情況調查表-By Alpha</TITLE> 
          </HEAD> 
          <BODY> 
          <%
                      DefaultPieDataset data 
          = new DefaultPieDataset(); 
                      
          //數據初始化
                      data.setValue(
          "高中以下",380); 
                      data.setValue(
          "高中",1620); 
                      data.setValue(
          "大專",6100); 
                      data.setValue(
          "本科",8310); 
                      data.setValue(
          "碩士",3520); 
                      data.setValue(
          "博士",180); 
                      
                      
          //HttpSession session = request.getSession();

                      PiePlot3D plot 
          = new PiePlot3D(data);//生成一個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信息 
                      
          //500是圖片長度,300是圖片高度
                      
          //String filename = ServletUtilities.saveChartAsPNG(chart,500,300,info,session); 
                      
          String filename = ServletUtilities.saveChartAsJPEG(chart,500,300,info,session); 
                      ChartUtilities.writeImageMap(w,
          "map0",info,false); 

                      
          String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
          %> 

          <ALIGN="CENTER"> 
          <img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#map0"> 
          </P> 
          </BODY> 
          </HTML>

          本例效果圖:



          二、柱圖實例

          jsp頁面:index1.jsp

          <% @page contentType = " text/html; charset=GB2312 " %>

          <% @page import = " java.io.FileNotFoundException " %>
          <% @page import = " java.io.FileOutputStream " %>
          <% @page import = " org.apache.commons.logging.Log " %>
          <% @page import = " java.io.IOException " %>

          <% @page import = " org.apache.commons.logging.LogFactory " %>
          <% @page import = " org.jfree.chart.ChartFactory " %>
          <% @page import = " org.jfree.chart.ChartUtilities " %>
          <% @page import = " org.jfree.chart.JFreeChart " %>
          <% @page import = " org.jfree.chart.plot.PlotOrientation " %>
          <% @page import = " org.jfree.data.category.CategoryDataset " %>
          <% @page import = " org.jfree.data.category.DefaultCategoryDataset " %>

          <% @page import = " java.awt.Color " %>
          <% @page import = " org.jfree.chart.renderer.category.BarRenderer3D " %>
          <% @page import = " org.jfree.chart.labels.StandardCategoryItemLabelGenerator " %>
          <% @page import = " org.jfree.chart.axis.CategoryAxis " %>
          <% @page import = " org.jfree.chart.plot.CategoryPlot " %>

          <%
            DefaultCategoryDataset dataset    
          =   new  DefaultCategoryDataset();
            dataset.addValue(
          150 " 北京 " " 蘋果 " );
            dataset.addValue(
          530 " 上海 " " 蘋果 " );
            dataset.addValue(
          160 " 廣州 " " 蘋果 " );
            dataset.addValue(
          120 " 北京 " " 梨子 " );
            dataset.addValue(
          230 " 上海 " " 梨子 " );
            dataset.addValue(
          360 " 廣州 " " 梨子 " );
            dataset.addValue(
          600 " 北京 " " 葡萄 " );
            dataset.addValue(
          430 " 上海 " " 葡萄 " );
            dataset.addValue(
          560 " 廣州 " " 葡萄 " );
            dataset.addValue(
          400 " 北京 " " 香蕉 " );
            dataset.addValue(
          530 " 上海 " " 香蕉 " );
            dataset.addValue(
          660 " 廣州 " " 香蕉 " );
            dataset.addValue(
          500 " 北京 " " 荔枝 " );
            dataset.addValue(
          630 " 上海 " " 荔枝 " );
            dataset.addValue(
          430 " 廣州 " " 荔枝 " );
            
              JFreeChart chart 
          =  ChartFactory.createBarChart3D( " 水果銷量圖統計-By Alpha " , " 水果種類-http://www.aygfsteel.com/Alpha/ " , " 銷量 " ,dataset,PlotOrientation.VERTICAL, true , false , false );
                  chart.setBackgroundPaint(Color.WHITE);
                  CategoryPlot plot 
          =  chart.getCategoryPlot();

                  CategoryAxis domainAxis 
          =  plot.getDomainAxis();
                  
          // domainAxis.setVerticalCategoryLabels( false );
                  plot.setDomainAxis(domainAxis);

                  BarRenderer3D renderer 
          =   new  BarRenderer3D();
                  renderer.setBaseOutlinePaint(Color.BLACK);

                  
          // 設置每個地區所包含的平行柱的之間距離
                  renderer.setItemMargin(
          0.1 );
                  
          // 顯示每個柱的數值,并修改該數值的字體屬性
                  renderer.setItemLabelGenerator(
          new  StandardCategoryItemLabelGenerator());
                  renderer.setItemLabelsVisible(
          true );
                  plot.setRenderer(renderer);

                  
          //  設置柱的透明度
                  plot.setForegroundAlpha(
          0 .8f);

              ChartUtilities.writeChartAsJPEG(response.getOutputStream(),chart,
          640 , 400 );
          %>


          本例效果圖:




          三、服務配制

             
          web.xml文件的配制一直困擾了我很久,之前在網上找到的配制都是有問題的,搞得生成出來的圖形顯示不出來,后來自己才把這個配制研究成功,網上的東西也很不可靠,找了N多配制,都是一樣的,同現同樣的問題,看來都是轉來轉去的結果 。

          web.xml 文件

          <? xml version="1.0" encoding="ISO-8859-1" ?>

          <! DOCTYPE web-app
              PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
              "http://java.sun.com/dtd/web-app_2_3.dtd"
          >

          < 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 >

              
          < welcome-file-list >
                  
          < welcome-file > index.jsp </ welcome-file >
              
          </ welcome-file-list >
              
          </ web-app >


          補充:(07.5.4更新)
          新增甘特圖的例子與上面例子所有源代碼一起打包提供下載,下載后直接部署就可以運行了。

          點擊下載



          阿里云服務器優惠券
          posted on 2007-01-13 11:08 Alpha 閱讀(22555) 評論(29)  編輯  收藏 所屬分類: Java J2EE JSP

          評論:
          # re: JFreeChart在JSP中的應用實例 2007-01-14 02:13 | lang
          blogjava最近很是死寂,怎么這個文章都敢放到首頁了呢!  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例 2007-01-14 23:07 | JooRoo
          挺好的!  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例 2007-02-07 15:42 | maybelan
          嗯,真不錯  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例 2007-04-18 17:26 | pyrgz
          非常不錯,謝謝樓主
            回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例[未登錄] 2007-04-20 18:11 | Alpha
          你好,請問怎么實現甘特圖呢?

          我的畢業設計要用到.

          請回復到我的郵箱1919wang@163.com



          非常感謝!!  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例 2007-04-29 16:10 | 鳳舞九天
          請問lz,我怎樣把這個程序調試出來,因為我要用到柱狀圖顯示,具體怎么流程沒,lz好人做到底,給我講講吧  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例 2007-04-30 13:02 | 蘆媛
          您好!
          我的畢業設計要用那jfreechart做動態圖形顯示包,請你幫我發個簡單的包,謝謝你了,我的郵箱是luyuan1031@sina.com  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例 2007-05-04 10:44 | Alpha
          已將這兩個例子的源代碼打包放上來了,另新增甘特圖的例子一起打包,下載后直接部署就可以運行了。
          下載地址:http://www.aygfsteel.com/Files/Alpha/jfc.rar


            回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例 2007-05-22 11:10 | 稻草晃悠
          mu~~~a~~~~表揚戶主,省了我很多工夫,再親  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例 2007-05-22 11:30 | 稻草晃悠
          下載包解壓發布,index.jsp和index2.jsp都可以用,但index1.jsp不能用,跑錯:

          ?JFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222?€" ?}!1AQa"q2亼?#B繃R佯$3br? %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz儎厗噲墛挀敃枟槞殺¥ウЖ┆渤吹斗腹郝媚牌僑墑矣哉腫剄巹懺溴驍栝犟蝮趲鲼? ?w!1AQaq"

          (后略)…………………………  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例 2007-05-25 10:13 | 吳奔
          多謝大人的帖子,看了好久的網頁終于發現一個可以用的例子了~~
          大大的感謝~~  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例 2007-06-10 17:57 | junlien
          有人知道為什么我在tomcat和jbuild 下運行這些例子圖片都顯示不出來是為什么啊,就顯示個方框有個小紅差,就象有時網頁打不開那種效果,有人知道是為什么嗎,樓主幫下忙啊, 萬分感謝!!!  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例[未登錄] 2007-06-13 13:00 | robert
          哪有jfreechart工具包  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例 2007-06-15 23:40 | Alpha
          @junlien

          應該是web.mxl配制有問題,以前我也遇到過此問題。
          檢查一下< url-pattern > /servlet/DisplayChart </ url-pattern >這個配制。

          @robert
          我提供的下載里有包含jfreechart工具包,在lib里面。
            回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例[未登錄] 2007-07-06 09:47 | andy
          先從資料庫中提取資料生成xml,如何從xml中提取資料,生成動態jfreechart圖形,然后在jsp上顯示,圖形要根據xml生成的表格中的數據動態變化,  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例 2007-08-24 08:29 |
          謝謝作者! 這是網上能用的案例. 加20分  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例 2007-12-10 11:40 | yujw
          為什么我修改了數據,比如把餅圖實例的高中以下程序員人數由380改為3800,生成的圖片還是用原來作者自己的數據?
          不解??
          請指教,謝謝  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例[未登錄] 2007-12-16 21:17 | 小林
          老大你好,請問餅圖最下面的文字如何修改呢?我找了半天不知道要如何修改,就是有顏色小圈圈旁邊的那些文字如何修改呢??  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例 2008-01-11 16:04 | 初學者
          謝謝分享?。。?nbsp; 回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例[未登錄] 2008-01-18 15:54 |
          請問樓主如何做甘特圖,下載的沒有啊,如有的話給我發郵件吧,謝謝,
          meiseagull@163.com  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例 2009-01-12 15:15 | xx
          拋getOutputStream() has already been called for this response異常,是什么一回事呢?  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例 2010-04-26 16:11 | yangyi336
          能用鼠標點擊圖片 鏈接 到其它地方嗎(如果頁面等等)  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例[未登錄] 2010-05-19 19:02 |
          你這是個靜態的?。坑袥]有動態實現的。  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例 2010-06-29 17:29 | 淘寶網
          JFreeChart 是一個開源的 JAVA 項目,它主要用來開發各種各樣的圖表,這些圖表包括:餅圖、柱狀圖 ( 普通柱狀圖以及堆棧柱狀圖 ) 、線圖、區域圖、分布圖、混合圖、甘特圖以及一些儀表盤等等。在這些不同式樣的圖表上可以滿足目前商業系統的要求。 JFreeChart 是一種基于 JAVA 語言的圖表開發技術。 JFreeChart 可用于 Servlet 、 JSP 、 Applet 、 Java Appication 環境中,通過 JDBC 可動態顯示任何數據庫數據,結合 Itext 可以輸出至 PDF 文件。

          這個東西正符合我們的需求,于是對他進行了研究并試驗。前些時間懶,一直沒有把研究測試心得寫出來,現在閑下來,整理了一下,搞兩個例子放上來供大家參考吧。  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例 2011-06-02 16:22 | za
          不錯  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例 2011-06-10 13:51 | zhanqitan
          我怎么部署不上去啊!有web的直接給個撒!發送郵箱zhangqitan@hotmail.com  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例 2012-10-08 12:33 | 小羅@Java
          別在這復制粘貼東西ok? 先自己看看對不對再復制!?。]寫servlet 你配置web.xml有個毛用?。?  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例 2014-03-10 19:51 | 百靈
          非常感謝  回復  更多評論
            
          # re: JFreeChart在JSP中的應用實例 2014-03-13 20:52 | 百靈
          我想問下,這些代碼我copy下來之后,圖片顯示不出來,但是,鼠標劃過時有數據…………  回復  更多評論
            
          主站蜘蛛池模板: 巴林右旗| 陆河县| 岳池县| 晋城| 晋中市| 太保市| 资兴市| 余姚市| 孟州市| 手机| 策勒县| 辽源市| 开远市| 德江县| 永胜县| 碌曲县| 雅安市| 彝良县| 英德市| 襄城县| 远安县| 兰溪市| 章丘市| 宁晋县| 平遥县| 浠水县| 宁武县| 萨嘎县| 富阳市| 静宁县| 恩平市| 邢台县| 崇仁县| 米林县| 昌图县| 石门县| 民丰县| 平利县| 芒康县| 泽州县| 肥乡县|