JFreeChart的下載和安裝與使用

 

Java Web 2.0架構開發與項目實戰購書網http://product.dangdang.com/product.aspx?product_id=20697597

JFreeChart的下載地址爲http://sourceforge.net/project/showfiles.php?group_id=15494,解壓下載的jfreechart_1.0.9.zip包到指定位置,爲了配置成功,需要lib目錄中的jfreechart-1.0.9.jarjcommon-1.0.12.jar文件拷貝到TEST/WEB-INF/LIB中。 還需要插件:struts2-jfreechart-plugin-2.0.11.jar(struts2發佈包的lib目錄下可以找到)

10.21.3  使用JFreeChart

從配置文件開始:在struts.xml文件增加一個對生成圖表包,如下

 <package name="chartaction" extends="jfreechart-default">

   <action name="chartAction" class="com.struts2.app.ChartAction" >

    <result name="success" type="chart"> <!-- 這裏一定要設置爲chart-->

           <param name="height">300</param>  

          <param name="width">240</param>  

    </result>

   </action>

   <action name="pieAction" class="com.struts2.app.PieAction">

    <result name="success" type="chart"> <!-- 這裏一定要設置爲chart-->

        <param name="height">300</param>

        <param name="width">400</param>

 

    </result>

   </action>

</package>

創建Action類,代碼:

ipackage com.struts2.app;

import org.jfree.chart.JFreeChart;

import com.opensymphony.xwork2.ActionSupport;

public class ChartAction extends ActionSupport {

    private static final long serialVersionUID = 1L;

    private JFreeChart chart;

 

    @Override

    public String execute() throws Exception {

        chart = FruitService.createBarChart();

        return SUCCESS;

    }

    public JFreeChart getChart() {

        return chart;

    }

}

 

package com.struts2.app;

import org.jfree.chart.JFreeChart;

 

import com.opensymphony.xwork2.ActionSupport;

public class PieAction extends ActionSupport{

     private static final long serialVersionUID = 1L;  

        private JFreeChart chart; 

        public String execute() throws Exception {  

            chart = FruitService.createPaiChart();  

            return SUCCESS;  

        }  

        public JFreeChart getChart() {  

            return chart;  

        }  

    }

 

package com.struts2.app;

import java.awt.BasicStroke;

import java.awt.Color;

import java.text.DecimalFormat;

import java.text.NumberFormat;

import org.jfree.chart.ChartFactory;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.labels.StandardPieSectionLabelGenerator;

import org.jfree.chart.labels.StandardPieToolTipGenerator;

import org.jfree.chart.plot.PiePlot;

import org.jfree.chart.plot.PlotOrientation;

import org.jfree.data.category.CategoryDataset;

import org.jfree.data.category.DefaultCategoryDataset;

import org.jfree.data.general.DefaultPieDataset;

public class FruitService {

    public static JFreeChart createBarChart() {

        CategoryDataset dataset = getDataSet2();

        JFreeChart chart = ChartFactory.createBarChart3D(

                "水果產量圖", // 圖表標題

                "水果", // 目錄軸的顯示標籤

                "產量", // 數值軸的顯示標籤

                dataset, // 數據集

                PlotOrientation.VERTICAL, // 圖表方向:水平、垂直

                true,   // 是否顯示圖例(對於簡單的柱狀圖必須是false)

                true,   // 是否生成工具

                true    // 是否生成URL鏈接

                );

        return chart;

    }

 

    private static CategoryDataset getDataSet2() {

        DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(100, "北京", "蘋果");

        dataset.addValue(100, "上海", "蘋果");

        dataset.addValue(100, "廣州", "蘋果");

        dataset.addValue(200, "北京", "梨子");

        dataset.addValue(200, "上海", "梨子");

        dataset.addValue(200, "廣州", "梨子");

        dataset.addValue(300, "北京", "葡萄");

        dataset.addValue(300, "上海", "葡萄");

        dataset.addValue(300, "廣州", "葡萄");

        dataset.addValue(400, "北京", "香蕉");

        dataset.addValue(400, "上海", "香蕉");

        dataset.addValue(400, "廣州", "香蕉");

        dataset.addValue(500, "北京", "荔枝");

        dataset.addValue(500, "上海", "荔枝");

        dataset.addValue(500, "廣州", "荔枝");

        return dataset;

    }

    public static JFreeChart createPaiChart() {

        DefaultPieDataset data = getDataSet();

        JFreeChart chart = ChartFactory.createPieChart3D("水果產量圖",  // 圖表標題

        data,

        true, // 是否顯示圖例

        false,

        false

        );

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

        resetPiePlot(plot);

        return chart;

    }

   

    private static void resetPiePlot(PiePlot plot) {

        String unitSytle = "{0}={1}({2})";

       

        plot.setNoDataMessage("無對應的數據,請重新查詢。");

        plot.setNoDataMessagePaint(Color.red);

       

        //指定 section 輪廓線的厚度(OutlinePaint不能爲null)

        plot.setOutlineStroke(new BasicStroke(0));

        //設置第一個 section 的開始位置,默認是12點鐘方向

        plot.setStartAngle(90);        

 

        plot.setToolTipGenerator(new StandardPieToolTipGenerator(unitSytle,

                NumberFormat.getNumberInstance(),

                new DecimalFormat("0.00%")));

       

        //指定圖片的透明度

        plot.setForegroundAlpha(0.65f);

       

        //引出標籤顯示樣式

        plot.setLabelGenerator(new StandardPieSectionLabelGenerator(unitSytle,

                NumberFormat.getNumberInstance(),

                new DecimalFormat("0.00%")));

           

        //圖例顯示樣式

        plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(unitSytle,

                NumberFormat.getNumberInstance(),

                new DecimalFormat("0.00%")));

    }

 

    private static DefaultPieDataset getDataSet() {

        DefaultPieDataset dataset = new DefaultPieDataset();

        dataset.setValue("蘋果",100);

        dataset.setValue("梨子",200);

        dataset.setValue("葡萄",300);

        dataset.setValue("香蕉",400);

        dataset.setValue("荔枝",500);

        return dataset;

    }

 

}

 

 

jsp頁面表現輸出圖片

<%@ page contentType="text/html; charset=UTF-8"%>

<html>

    <head>

        <title>ListAllFruit4BarAndPie</title>

    </head>

    <body>

        <center>

            <h2>

                使用柱圖和餅圖列取所有水果產量

            </h2>

        </center>

        柱圖:

        <img src="chartAction.action">

        <br />

        餅圖:

        <img src="pieAction.action">

    </body>

</html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章