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

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

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


          一、餅圖實例

          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>程序員學(xué)歷情況調(diào)查表-By Alpha</TITLE> 
          </HEAD> 
          <BODY> 
          <%
                      DefaultPieDataset data 
          = new DefaultPieDataset(); 
                      
          //數(shù)據(jù)初始化
                      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"));//設(shè)定圖片鏈接 
                      JFreeChart chart 
          = new JFreeChart("",JFreeChart.DEFAULT_TITLE_FONT, plot, true); 
                      chart.setBackgroundPaint(java.awt.Color.white);
          //可選,設(shè)置圖片背景色 
                      chart.setTitle(
          "程序員學(xué)歷情況調(diào)查表-By Alpha");//可選,設(shè)置圖片標(biāo)題 
                      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( " 水果銷量圖統(tǒng)計-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);

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

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

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


          本例效果圖:




          三、服務(wù)配制

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

          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更新)
          新增甘特圖的例子與上面例子所有源代碼一起打包提供下載,下載后直接部署就可以運行了。

          點擊下載



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

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

          我的畢業(yè)設(shè)計要用到.

          請回復(fù)到我的郵箱1919wang@163.com



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


            回復(fù)  更多評論
            
          # re: JFreeChart在JSP中的應(yīng)用實例 2007-05-22 11:10 | 稻草晃悠
          mu~~~a~~~~表揚戶主,省了我很多工夫,再親  回復(fù)  更多評論
            
          # re: JFreeChart在JSP中的應(yīng)用實例 2007-05-22 11:30 | 稻草晃悠
          下載包解壓發(fā)布,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"

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

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

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

          這個東西正符合我們的需求,于是對他進行了研究并試驗。前些時間懶,一直沒有把研究測試心得寫出來,現(xiàn)在閑下來,整理了一下,搞兩個例子放上來供大家參考吧。  回復(fù)  更多評論
            
          # re: JFreeChart在JSP中的應(yīng)用實例 2011-06-02 16:22 | za
          不錯  回復(fù)  更多評論
            
          # re: JFreeChart在JSP中的應(yīng)用實例 2011-06-10 13:51 | zhanqitan
          我怎么部署不上去啊!有web的直接給個撒!發(fā)送郵箱zhangqitan@hotmail.com  回復(fù)  更多評論
            
          # re: JFreeChart在JSP中的應(yīng)用實例 2012-10-08 12:33 | 小羅@Java
          別在這復(fù)制粘貼東西ok? 先自己看看對不對再復(fù)制!!!沒寫servlet 你配置web.xml有個毛用啊?   回復(fù)  更多評論
            
          # re: JFreeChart在JSP中的應(yīng)用實例 2014-03-10 19:51 | 百靈
          非常感謝  回復(fù)  更多評論
            
          # re: JFreeChart在JSP中的應(yīng)用實例 2014-03-13 20:52 | 百靈
          我想問下,這些代碼我copy下來之后,圖片顯示不出來,但是,鼠標(biāo)劃過時有數(shù)據(jù)…………  回復(fù)  更多評論
            
          主站蜘蛛池模板: 门头沟区| 灌阳县| 襄城县| 安泽县| 镇安县| 乐亭县| 双流县| 大兴区| 浮梁县| 察隅县| 临夏市| 翁牛特旗| 来安县| 贡觉县| 日喀则市| 萨迦县| 沾益县| 临湘市| 衢州市| 响水县| 广德县| 阜平县| 新源县| 汨罗市| 建昌县| 裕民县| 泸溪县| 灯塔市| 阳朔县| 乾安县| 大竹县| 行唐县| 吉水县| 军事| 洞头县| 怀化市| 巴楚县| 建阳市| 尤溪县| 安福县| 霞浦县|