posts - 1,  comments - 0,  trackbacks - 0

          JFreeChart 是一個非常流行的一個免費開源的圖表軟件
          已經有8年以上的歷史

          首先要下載jar包
          www.jfree.org

          在http://www.jfree.org/jfreechart 下點擊Project Page at SourceForge 去下載
          要下載JFreeChart 與JCommon

          把jfreechart-1.0.9.jar與jcommon-1.0.12.jar加入到系統中

          做JFreeChart的時候,一般是以下三步
          1:要有數據 比如DefaultPieDataset
          2:根據數據生成 JFreeChart 對象
          3:顯示JFreeChart對象(顯示在swing中或生成一個圖片在jsp中顯示)


          一:體驗下JFreeChart的強大功能(讀javadoc文檔 一個最重要的類JFreeChart)
           package com.test.jfreechart
           public class JFreeChartTest{
           public static void main(String []args){
            //首先要有數據(Dataset數據集)
            DefaultPieDataset dpd=new DefaultPieDataset();
            //setValue(Comparable key ,double value);
            //字符串實現了Comparable接口
            dpd.setValue("管理人員",25);
            dpd.setValue("市場人員",25);
            dpd.setValue("開發人員",45);
            dpd.setValue("其他人員",10);
            //然后把數據放入到JFreeChart 中
            //創建一個平面圖形
            JFreeChart chart=CharFactory.createPieChart("某公司人員組織結構圖",dbp,true,false,false);
               //JFreeChart chart=CharFactory.createPieChart3D("某公司人員組織結構圖",dbp,true,false,false);
            //通過swing顯示出來
            ChartFrame frame=new ChartFrame("標題",chart);
            frame.pack();
            frame.setVisible(true);
           }
           }

            上面會顯示一個餅狀圖,一般來說,圖形有3部分組成
             1:標題
             2:中間的圖形(叫plot)
             3:底部有個說明什么顏色表示什么數據(legend)
          package com.test.jfreechart
          //ApplicationFrame 是屬于Jcommon中的
           public class JFreeChartTest2 extends ApplicationFrame{ 柱狀圖
           public JFreeChartTest2(String title)
           {
            super(title);

            this.setContentPane(createPanel());
           }

           public static CategoryDataset createDataset()
           {
            //默認柱狀圖數據集  Category(柱狀)
            DefaultCategoryDataset dataset = new DefaultCategoryDataset();
            //setValue(double value,Comparable rowKey,Comparable columnKey)
            dataset.setValue(10, "aa", "管理人員");
            dataset.setValue(20, "bb", "市場人員");
            dataset.setValue(40, "cc", "開發人員");
            dataset.setValue(15, "dd", "其他人員");

            return dataset;
           }

           //把數據加到chart 圖表中
           public static JFreeChart createChart(CategoryDataset dataset)
           {
            JFreeChart chart = ChartFactory.createBarChart3D("hello", "人員分布", "人員數量",
              dataset, PlotOrientation.VERTICAL, true, false, false);

            chart.setTitle(new TextTitle("某公司組織結構圖", new Font("宋體", Font.BOLD
              + Font.ITALIC, 20)));

            CategoryPlot plot = (CategoryPlot) chart.getPlot();

            CategoryAxis categoryAxis = plot.getDomainAxis();

            categoryAxis.setLabelFont(new Font("微軟雅黑", Font.BOLD, 12));

            return chart;

           }
           public static JPanel createPanel()
           {
            JFreeChart chart = createChart(createDataset());

            return new ChartPanel(chart);
           }

           public static void main(String[] args)
           {
            JFreeChartTest2 chart = new JFreeChartTest2("某公司組織結構圖");

            chart.pack();
            chart.setVisible(true);
           }
           
           }

          二:上面都是在swing中生成的圖形,我們在web程序里面怎么做呢
            下面把JFreeChart 生成一個圖片,那么在web程序中就可以調用這個圖片了
            public class JFreeChartTest3
          {
           public static void main(String[] args) throws Exception
           {
            JFreeChart chart = ChartFactory.createPieChart("某公司組織結構圖",
              getDataset(), true, false, false);

            chart.setTitle(new TextTitle("某公司組織結構圖", new Font("宋體", Font.BOLD,22)));

            LegendTitle legend = chart.getLegend(0);

            legend.setItemFont(new Font("微軟雅黑", Font.BOLD, 14));

            PiePlot plot = (PiePlot) chart.getPlot();

            plot.setLabelFont(new Font("隸書", Font.BOLD, 16));

            //通過輸出流把圖形 創建為一個圖片
            OutputStream os = new FileOutputStream("company.jpeg");
            //將chart 輸出到os中,寬為1000,高為800
            ChartUtilities.writeChartAsJPEG(os, chart, 1000, 800);

            os.close();

           }

           private static DefaultPieDataset getDataset()
           {
            DefaultPieDataset dpd = new DefaultPieDataset();

            dpd.setValue("管理人員", 25);
            dpd.setValue("市場人員", 25);
            dpd.setValue("開發人員", 45);
            dpd.setValue("其他人員", 10);

            return dpd;
           }

          }

          三:如何在jsp中顯示JFreeChart生成的圖片

          org.jfree.chart.servlet.DisplayChart
          這是一個servlet,這個Servlet會作為一個流把圖片輸出到客戶端
          要使用DisplayChart 那么在web.xml中必須配置如下代碼
           <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>/DisplayChart</url-pattern>
           </servlet-mapping>

            <%@ page language="java" contentType="text/html; charset=GB18030"
              pageEncoding="GB18030"%>
             
          <%@ page import="org.jfree.data.general.DefaultPieDataset,org.jfree.chart.ChartFactory
          ,org.jfree.chart.JFreeChart,org.jfree.chart.servlet.*" %>
             
          <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
          <title>Insert title here</title>
          </head>
          <body>

          <%

          DefaultPieDataset dpd = new DefaultPieDataset();

          dpd.setValue("管理人員", 25);
          dpd.setValue("市場人員", 25);
          dpd.setValue("開發人員", 45);
          dpd.setValue("其他人員", 10);

          JFreeChart chart = ChartFactory.createPieChart3D("某公司組織結構圖",dpd, true, false, false);
          //ServletUtilities 能幫助生成圖片對象
          String fileName = ServletUtilities.saveChartAsPNG(chart,800,600,session);

          String url = request.getContextPath() + "/DisplayChart?filename=" + fileName;

          %>

          <img src="<%= url %>" width="800" height="600">


          </body>
          </html>

          四:要通過Struts2整合JFreeChart ,可以學到Struts2整合其他插件的通用方法
          怎么通過Struts2整合JFreeChart
          通過用戶投票這個例子達到整合
          select.jsp
          <h1>請選擇喜歡的運動項目</h1>
          <s:form action="viewResult">
           <s:checkbox name="interest" label="足球"></s:checkbox>
           <s:checkbox name="interest" label="籃球"></s:checkbox>
           <s:checkbox name="interest" label="排球"></s:checkbox>
           <s:checkbox name="interest" label="羽毛球"></s:checkbox>
          </s:form>
          上面的方式,顯示的時候所有的value都為true 這顯然不行的。
          不可能提交的表單都為true的,修改如下
          <h1>請選擇喜歡的運動項目</h1>
          <s:form action="viewResult">
           <s:checkbox name="interest" label="足球" fieldValue="football"></s:checkbox>
           <s:checkbox name="interest" label="籃球" fieldValue="basktball"></s:checkbox>
           <s:checkbox name="interest" label="排球" fieldValue="volleytball"></s:checkbox>
           <s:checkbox name="interest" label="羽毛球" fieldValue="badminton"></s:checkbox>

            <!--<s:checkboxlist list="#{'computer':'計算機','math':'數學'}"> name="interest" label="陽光" labelPosition="top"></s:checkboxlist>
          -->
           <s:submit value="提交"/>
          </s:form>

          <s:checkbox>與<s:checkboxlist>這2個標簽都是復選框,推薦使用s:checkbox

          //要把struts2-jfreechart-plugin.jar復制到系統中

          ViewResult這個Action的作用就是
          首先把復選框中的數據加入到interest這個List中
          然后把這個數據放到chart這個對象中
          然后把chart對象交給JFreechart-plugin插件顯示輸出


          這個action執行的時候,會執行execute方法
          返回SUCCESS
          這是的結果類型為chart,那么jfreechart-plugin這個插件會自動
          調用action中的getChart方法,并顯示出來

          package com.test.action;
          public class ViewResultAction extends ActionSupport{
            private JFreeChart chart;//chart變量不能隨便改的
            //chart的setters getters方法
            public JFreeChart getChart(){
           chart=ChartFactory.createBarChart("興趣統計結果","項目","結果",getDataset(),PlotOrientation.VERTICAL,false,false,false);
           chart.setTitle(new TextTitle("興趣統計結果",new Font("黑體",Font.BOLD,22)));
           CategoryPlot plot=(CategoryPlot)chart.getPlot();
           CategoryAxis axis=plot.getDomainAxis();//x坐標
           axis.setLabelFont(new Font("宋體",Font.BOLD,22));
           axis.setCategoryLabelPositionOffset(CategoryLabelPositions.UP_45);//字體的傾斜度
           
           return chart;
            }
            //獲得表單數據
            private List<String> interest;//自動把復選框的值設置到List中
            //getters,setters方法
            public String execute() throws Exception{
           //從struts.apache.org中找到
           //jfreechart-plugin
                  //jfreechart-plugin這個插件 能夠把chart對象(自動調用getChart()方法)生成到客戶端并能夠顯示
           //不會我們去寫代碼生成圖片顯示了 
           return SUCCESS;
            }

            //把list客戶端的復選框的值保存到application中
            private void increaseResult(List<String> list){
           ActionContext context=ActionContext.getContext();
           Map map=context.getApplication();//獲得application對象
           //application對象中保存投票的結果 模擬
           for(String str:list){
            if(null==map.get(str)){//第一次投票
            map.put(str,1);
             }
             else{//表示這個選項不是第一次投票
                map.put(str,(Integer)map.get(str)+1);
             }
           }
            }
            private CategoryDataset getDataset(){//產生柱狀圖的數據
           DefaultCategoryDataset dataset=new DefaultCategoryDataset();
           increaseResult(this.getInterest());//把數據更新到application中
           ActionContext context=ActionContext.getContext();
           Map map=context.getApplication();
           //把application中的數據放到dataset中
           dataset.setValue((Integer)map.get("football"),"","足球");
           dataset.setValue((Integer)map.get("basketball"),"","藍球");
           dataset.setValue((Integer)map.get("volleyball"),"","排球");
           dataset.setValue((Integer)map.get("badminton"),"","羽毛球");
           return dataset;
            }
          }
          把jfreechart-plugin的jar包解壓縮
          修改struts-plugin.xml中
          把<package name="jfreechart-default">
          修改為
          <package name="jfreechart-default" extends="struts-default">
          然后把jfreechart-plugin的jar包重新打包
          jar cvf struts2-jfreechart-plugin-版本號.jar  -C
          生成后重新放到系統中

          在struts.xml中進行配置
          修改如下
          <package name="struts2" extends="jfreechart-default">
          <action name="viewResult" class="com.test.action.ViewResultAction">
             <result name="success" type="chart">
             <param name="height">600</param>
                 <param name="width">800</param>
             </result>
          </action>


          這樣 運行項目 就會顯示結果了

          posted on 2010-07-01 15:52 gjy 閱讀(1339) 評論(0)  編輯  收藏 所屬分類: ssh心得筆記

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 石柱| 那坡县| 永善县| 伽师县| 剑河县| 临邑县| 宜兰市| 汝州市| 乐至县| 建水县| 米脂县| 商都县| 长春市| 新蔡县| 长岛县| 岑溪市| 肥东县| 呼和浩特市| 三都| 辉县市| 蛟河市| 潞西市| 三明市| 石楼县| 彭阳县| 淅川县| 东宁县| 遂宁市| 明水县| 汝南县| 石阡县| 兴和县| 潍坊市| 长顺县| 吴忠市| 彩票| 海伦市| 凌海市| 台州市| 金坛市| 虎林市|