<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    午后星期午

    JFreeChart 生成 柱狀圖(Struts2 + Maven3 + JFreeChart)

    準(zhǔn)備環(huán)境:

    eclipse  
    3.6
    maven   
    3.0.4
    struts    
    2.1.8
    JFreeChart  
    1.0.9


    JFreeChart 是一組功能強(qiáng)大、靈活易用的Java繪圖API,使用它可以生成多種通用性的報(bào)表,包括柱狀圖、餅圖、曲線圖、甘特圖等。目前 JFreeChart 的最新版本是 1.0.14,

    最近幾天不知為何,sourceforge 網(wǎng)站一直無法訪問,JFreeChart 現(xiàn)在在官網(wǎng)下載不了了,本人已將現(xiàn)用版本和最新版本上傳至網(wǎng)盤,需要的朋友可以點(diǎn)擊鏈接下載:

    JFreeChart-1.0.9  :http://115.com/file/e7194ucb#jfreechart-1.0.9.zip

    JFreeChart-1.0.14:http://115.com/file/an8lwzqu#jfreechart-1.0.14.zip

    據(jù)說,JFreeChart 從 1.0.10 版本開始,圖表的中文字體會(huì)變成亂碼,我用 1.0.13 和 1.0.14 兩個(gè)版本測(cè)試的時(shí)候確實(shí)是會(huì)出現(xiàn)中文亂碼,1.0.9 這個(gè)版本不會(huì)出現(xiàn)這種情況,

    解決這個(gè)亂碼的過程有點(diǎn)繁瑣,而且每種不同的圖表的解決方式還不一樣,但有一點(diǎn)是一樣的,就是修改默認(rèn)的字體,讓它支持中文字體的顯示,這樣亂碼問題就解決了。

    由于這里用的 1.0.9 這個(gè)版本不會(huì)出現(xiàn)中文亂碼問題,所以在這里姑且不談。接下來會(huì)用到 maven 來管理 jar 包,不使用 maven 的朋友可以直接將 struts2 和 JFreeChart 的

    jar 包導(dǎo)進(jìn)項(xiàng)目里就 OK 了,maven 不會(huì)影響接下來要談的 JFreeChart 柱狀圖的生成。

    JFreeChart 所必須的 jar 包:jcommon-1.0.12.jar、jfreechart-1.0.9.jar (這里說的是 JFreeChart  1.0.9 版本,版本不同的請(qǐng)自行對(duì)應(yīng) jar 包版本)

    OK,廢話不多說,直接進(jìn)入主題:

    JFreeChart 組件中有個(gè)JFreeChart
    ,它代表圖表對(duì)象。生成任何類型的圖表都要通過該對(duì)象,JFreeChart 組件提供了一個(gè)工廠類ChartFactory,用來創(chuàng)建各種類型的圖表對(duì)象。

    創(chuàng)建普通柱狀圖:ChartFactory.createBarChart( … )

    創(chuàng)建 3D 柱狀圖:ChartFactory.createBarChart3D( … )

    繪制 3D 柱狀圖的方法及方法入口參數(shù):

    ChartFactory.createBarChart3D(String title, String categoryAxisLabel, String valueAxisLabel, CategoryDataset dataset, PlotOrientation orientation, 
                                                                        boolean legend, boolean tooltips, boolean urls)


    參數(shù)1:String title  —— 圖表標(biāo)題
    參數(shù)2:String categoryAxisLabel     ——   統(tǒng)計(jì)種類軸標(biāo)題,可以理解為X軸標(biāo)題
    參數(shù)3:String valueAxisLabel            ——   統(tǒng)計(jì)值軸標(biāo)題,可以理解為y軸標(biāo)題
    參數(shù)4:CategoryDataset dataset       ——   繪圖數(shù)據(jù)集
    參數(shù)5:PlotOrientation orientation ——   設(shè)定柱形圖的繪制方向,PlotOrientation.VERTICAL(垂直),PlotOrientation.HORIZONTAL(水平)
    參數(shù)6:boolean legend     ——   設(shè)定是否顯示圖例
    參數(shù)7:boolean tooltips  ——   設(shè)定是否采用標(biāo)準(zhǔn)生成器
    參數(shù)8:boolean urls          ——   設(shè)定是否包生成鏈接


    創(chuàng)建 maven 項(xiàng)目(不使用 maven 的朋友在 myeclipse 創(chuàng)建 Web 項(xiàng)目,或在 eclipse 下創(chuàng)建動(dòng)態(tài) Web 項(xiàng)目),項(xiàng)目名起: jfreechart-demo

    web.xml 配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      
      
    <!-- jfreechart -->
      
    <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> 

      
    <!-- 開啟Struts2監(jiān)聽 -->
      
    <filter>
          
    <filter-name>struts2</filter-name>
          
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
      
    </filter>
      
    <filter-mapping>
          
    <filter-name>struts2</filter-name>
          
    <url-pattern>/*</url-pattern>
      
    </filter-mapping>
      
      
    <welcome-file-list>
        
    <welcome-file>/index.jsp</welcome-file>
      
    </welcome-file-list>

    </web-app>


    struts.xml 配置(這里使用了 Struts2 的 convention 插件來實(shí)現(xiàn)零配置,沒有使用 convention 插件的朋友請(qǐng)自行配置相應(yīng)的 action):

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts>

      
    <constant name="struts.devMode" value="true"/>                                                  <!-- 開發(fā)模式 -->
      
    <constant name="struts.i18n.encoding" value="UTF-8"/>                                    <!-- Web運(yùn)用編碼 -->
      
    <constant name="struts.convention.result.path" value="/view/" />               <!-- 結(jié)果資源的路徑 -->
      
    <constant name="struts.convention.action.name.separator" value="_" />  <!-- URL資源分隔符 -->
      
    <constant name="struts.convention.classes.reload" value="true" />              <!-- convention類重新加載 -->
      
    <constant name="struts.action.extension" value="action,do,html" />           <!-- 請(qǐng)求后綴 -->
      
    </struts>


    pom.xml 配置(不使用 maven 的朋友不用配置這個(gè)文件,直接將需要的 jar 包導(dǎo)進(jìn)項(xiàng)目即可):

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation
    ="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      
    <modelVersion>4.0.0</modelVersion>
      
    <groupId>com.fancy</groupId>
      
    <artifactId>jfreechart-demo</artifactId>
      
    <packaging>war</packaging>
      
    <version>1.0</version>
      
    <name>jfreechart-demo Maven Webapp</name>
      
    <url>http://maven.apache.org</url>
      
      
    <properties>
        
    <struts.version>2.1.8</struts.version>
      
    </properties>
      
      
    <dependencies>
        
        
    <!-- Struts2 framework -->
        
    <dependency>
          
    <groupId>org.apache.struts</groupId>
          
    <artifactId>struts2-core</artifactId>
          
    <version>${struts.version}</version>
        
    </dependency>
        
        
    <!-- Struts2 convention -->
        
    <dependency>
          
    <groupId>org.apache.struts</groupId>
          
    <artifactId>struts2-convention-plugin</artifactId>
          
    <version>${struts.version}</version>
        
    </dependency>
        
        
    <!-- servlet -->
        
    <dependency>     
          
    <groupId>javax.servlet</groupId>     
          
    <artifactId>servlet-api</artifactId>     
          
    <version>2.5</version> 
        
    </dependency>
        
        
    <!-- JFreeChart -->
        
    <dependency>
          
    <groupId>jfree</groupId>
          
    <artifactId>jfreechart</artifactId>
          
    <version>1.0.9</version>
        
    </dependency>
        
      
    </dependencies>
      
    <build>
        
    <finalName>jfreechar-demo</finalName>
        
    <!-- Jetty Server -->
        
    <plugins>
          
    <plugin>
            
    <groupId>org.mortbay.jetty</groupId>
            
    <artifactId>maven-jetty-plugin</artifactId>
            
    <version>6.1.10</version>
            
    <configuration>
              
    <scanIntervalSeconds>2</scanIntervalSeconds>
            
    </configuration>
          
    </plugin>
        
    </plugins>
      
    </build>
    </project>




    package com.fancy.action;

    import java.util.Map;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    import org.apache.struts2.ServletActionContext;
    import org.apache.struts2.interceptor.SessionAware;
    import com.opensymphony.xwork2.ActionSupport;
    /**
     * -----------------------------------------
     * @描述  Action 超類
     * @作者  fancy
     * @郵箱  fancydeepin@yeah.net
     * @日期  2012-8-6 <p>
     * -----------------------------------------
     
    */

    public class BaseAction extends ActionSupport implements SessionAware{

        
    private static final long serialVersionUID = 1L;
        
    protected Map<String, Object> session;    //session

        
    public void setSession(Map<String, Object> session) {
            
    this.session = session;
        }


        
    public HttpSession getHttpSession() {
            HttpServletRequest request 
    = ServletActionContext.getRequest();
            
    return request.getSession();
        }


    }




    核心類,主要看這里就行,你可以將 execute 方法里面的代碼直接拷貝到 jsp 上面做測(cè)試)

    package com.fancy.action;

    import java.awt.Color;
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.chart.servlet.ServletUtilities;
    import org.jfree.data.category.CategoryDataset;
    import org.jfree.data.general.DatasetUtilities;
    /**
     * -----------------------------------------
     * @描述  柱狀圖
     * @作者  fancy
     * @郵箱  fancydeepin@yeah.net
     * @日期  2012-8-6 <p>
     * -----------------------------------------
     
    */

    public class CylinderAction extends BaseAction{

        
    private static final long serialVersionUID = 1L;
        
    private String fileName;
        
        
    public String execute() throws Exception{
            
            
    //模擬數(shù)據(jù)
            double[][] data  = {{1185,995,1286,1210},{916,1028,900,885},{982,763,935,665},{384,568,928,773}};
            String[] rowKeys 
    = {"A產(chǎn)品","B產(chǎn)品","C產(chǎn)品","D產(chǎn)品"};
            String[] columKeys 
    = {"E-1區(qū)","E-2區(qū)","E-3區(qū)","E-4區(qū)"};
            
    //創(chuàng)建Dataset對(duì)象
            CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columKeys, data);
            
    //創(chuàng)建3D柱狀圖
            JFreeChart chart = ChartFactory.createBarChart3D("2011年產(chǎn)品銷售量""""銷量/件", dataset, PlotOrientation.VERTICAL, truetruefalse);
            
    //設(shè)置背景顏色
            chart.setBackgroundPaint(Color.WHITE);
            fileName 
    = ServletUtilities.saveChartAsPNG(chart, 700400null, getHttpSession());
            
    return "cylinder";
        }


        
    public String getFileName() {
            
    return fileName;
        }


    }



    在 webapp 目錄下創(chuàng)建 view 子目錄,在 view 目錄里創(chuàng)建 cylinder.jsp 文件(不使用 maven 的朋友 jsp 文件位置請(qǐng)自行對(duì)應(yīng))

    cylinder.jsp 文件:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <html>
      
    <head>
        
    <title>柱狀圖</title>
      
    </head>
      
      
    <body>
        
        
    <img src="${pageContext.request.contextPath}/DisplayChart?filename=${fileName}" border=0 usemap="#${fileName}"> 
        
      
    </body>
    </html>


    訪問:http://localhost:8080/jfreechart-demo/cylinder.html (沒有使用 convention 插件的朋友,訪問地址請(qǐng)自行對(duì)應(yīng))結(jié)果如圖:


    在上圖中,可以大概的看出產(chǎn)品的銷售量在哪個(gè)范圍之內(nèi),但是并沒有具體的數(shù)值,下面通過在 CylinderAction 類上添加代碼來使得這些數(shù)值能夠被顯示:


    package com.fancy.action;

    import java.awt.Color;
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.labels.ItemLabelAnchor;
    import org.jfree.chart.labels.ItemLabelPosition;
    import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.chart.renderer.category.BarRenderer3D;
    import org.jfree.chart.servlet.ServletUtilities;
    import org.jfree.data.category.CategoryDataset;
    import org.jfree.data.general.DatasetUtilities;
    import org.jfree.ui.TextAnchor;
    /**
     * -----------------------------------------
     * @描述  柱狀圖
     * @作者  fancy
     * @郵箱  fancydeepin@yeah.net
     * @日期  2012-8-6 <p>
     * -----------------------------------------
     
    */

    public class CylinderAction extends BaseAction{

        
    private static final long serialVersionUID = 1L;
        
    private String fileName;
        
        
    public String execute() throws Exception{
            
            
    //模擬數(shù)據(jù)
            double[][] data  = {{1185,995,1286,1210},{916,1028,900,885},{982,763,935,665},{384,568,928,773}};
            String[] rowKeys 
    = {"A產(chǎn)品","B產(chǎn)品","C產(chǎn)品","D產(chǎn)品"};
            String[] columKeys 
    = {"E-1區(qū)","E-2區(qū)","E-3區(qū)","E-4區(qū)"};
            
    //創(chuàng)建Dataset對(duì)象
            CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columKeys, data);
            
    //創(chuàng)建3D柱狀圖
            JFreeChart chart = ChartFactory.createBarChart3D("2011年產(chǎn)品銷售量""""銷量/件", dataset, PlotOrientation.VERTICAL, truetruefalse);
            
    //設(shè)置背景顏色
            chart.setBackgroundPaint(Color.WHITE);
            
            
    //創(chuàng)建柱體繪制器對(duì)象
            BarRenderer3D renderer = new BarRenderer3D();
            renderer.setBaseItemLabelGenerator(
    new StandardCategoryItemLabelGenerator());
            
    //設(shè)置柱體數(shù)值可見
            renderer.setBaseItemLabelsVisible(true);
            
    //調(diào)整數(shù)值顯示位置
            renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT)); 
            renderer.setItemLabelAnchorOffset(10D); 
            chart.getCategoryPlot().setRenderer(renderer);
            
            fileName 
    = ServletUtilities.saveChartAsPNG(chart, 700400null, getHttpSession());
            
    return "cylinder";
        }


        
    public String getFileName() {
            
    return fileName;
        }


    }



    再次訪問:http://localhost:8080/jfreechart-demo/cylinder.html 結(jié)果如圖:






       [ 隨筆均原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處:http://www.tkk7.com/fancydeepin ]

    posted on 2013-12-31 13:46 午后星期午 閱讀(102) 評(píng)論(0)  編輯  收藏 所屬分類: JavaEE

    主站蜘蛛池模板: 美女视频黄频a免费| 成人毛片免费播放| 污视频网站免费观看| 免费一级毛片在线播放视频免费观看永久 | 美丽的姑娘免费观看在线播放 | a毛片在线看片免费| 99视频在线看观免费| a级毛片在线视频免费观看| 在线免费中文字幕| 最近中文字幕mv免费高清电影 | 成人毛片免费观看视频在线| 亚洲AV无码成H人在线观看 | 亚洲最大成人网色| 亚洲精品无码久久久久APP| 亚洲一区二区三区不卡在线播放| 日韩欧美亚洲国产精品字幕久久久 | 亚洲精品无码你懂的| 久青草视频97国内免费影视| 91香蕉国产线观看免费全集| 永久在线毛片免费观看| 亚洲一区二区三区偷拍女厕| 亚洲天堂中文字幕在线观看| 在线播放亚洲精品| 国产成人综合亚洲| 免费人成视频在线观看网站| 午夜国产大片免费观看| 亚洲制服中文字幕第一区| 国产青草亚洲香蕉精品久久| 免费污视频在线观看| 免费看少妇作爱视频| 亚洲国产精品无码一线岛国| 亚洲熟妇AV日韩熟妇在线| 怡红院免费全部视频在线视频| 免费无码精品黄AV电影| 国产无遮挡又黄又爽免费视频| 亚洲高清专区日韩精品| 亚洲av午夜电影在线观看| 久久久久久久久久国产精品免费| 日韩免费观看的一级毛片| 亚洲人成在线观看| 羞羞视频在线观看免费|