JfreeChart图表制作

1,jfreechart使用的时候版本不宜太高,因为有乱码问题

我采用jfreechart-1.0.1

下载地址:http://sourceforge.net/projects/jfreechart/files/1.%20JFreeChart/

2,添加jar包(包括:mysql-connector-java-5.1.6-bin.jar)

3,查找jfreechart文档制作柱状图和饼图

参考地址:http://www.ibm.com/developerworks/cn/java/l-jfreechart/

【1】,将参考文档中的柱状图代码Copy到项目中

            可能出现的问题:导入相应的包

柱状图参考代码:

package com.test.jfreechart;
import java.io.*; 


import org.jfree.data.*; 
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.chart.*; 
import org.jfree.chart.plot.*; 
	 /** 
	 * 该类用于演示最简单的柱状图生成
	 * @author Winter Lau 
	 */ 
	 public class TestJfreeChart {
	     public static void main(String[] args) throws IOException{ 
	    	 /*获取数据集*/
	         CategoryDataset dataset = getDataSet2();
	         /*给柱状图设置相应的参数*/
	         JFreeChart chart = ChartFactory.createBarChart3D( 
	                            "水果产量图", // 图表标题
	                            "水果", // 目录轴的显示标签
	                            "产量", // 数值轴的显示标签
	                             dataset, // 数据集
	                             PlotOrientation.VERTICAL, // 图表方向:水平、垂直
	                             true,  // 是否显示图例(对于简单的柱状图必须是 false)
	                             false, // 是否生成工具
	                             false  // 是否生成 URL 链接
	                             ); 
	         /*报表图片生成与输出*/                   
	         FileOutputStream fos_jpg = null; 
	         try { 
	             fos_jpg = new FileOutputStream("F:\\fruit.jpg"); 
	             ChartUtilities.writeChartAsJPEG(fos_jpg,chart,400,500,null); 
	         } finally { 
	             try { 
	                 fos_jpg.close(); 
	             } catch (Exception e) {} 
	         } 
	     } 
	     /** 
	     * 获取一个演示用的简单数据集对象1
	     * @return 
	     */ 
	     private static CategoryDataset getDataSet() { 
	         DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 
	         dataset.addValue(100, "", "苹果"); 
	         dataset.addValue(200, "", "梨子"); 
	         dataset.addValue(300, "", "葡萄"); 
	         dataset.addValue(400, "", "香蕉"); 
	         dataset.addValue(500, "", "荔枝"); 
	         return dataset; 
	     } 
	     /** 
	     * 获取一个演示用的组合数据集对象2
	     * @return 
	     */ 
	     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; 
	     } 
	 }

饼图参考代码:

package com.test.jfreechart;

import java.io.FileOutputStream;
import java.io.IOException;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
	 /** 
	 * 用于演示饼图的生成
	 * @author Winter Lau 
	 */ 
	 public class pieJfreeChart {
		 public static void main(String[] args) throws IOException{ 
			 DefaultPieDataset data = getDataSet(); 
			 JFreeChart chart = ChartFactory.createPieChart("水果产量图",  // 图表标题
			 data, 
			 true, // 是否显示图例
			 false, 
			 false 
			 ); 
			 // 写图表对象到文件,参照柱状图生成源码
			 FileOutputStream fos_jpg = null; 
	         try { 
	             fos_jpg = new FileOutputStream("F:\\fruitPie.jpg"); 
	             /*ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,400,300,null); */
	             ChartUtilities.writeChartAsJPEG(fos_jpg,chart,400,500,null); 
	         } finally { 
	             try { 
	                 fos_jpg.close(); 
	             } catch (Exception e) {} 
	         } 
		 } 
		 /** 
		 * 获取一个演示用的简单数据集对象
		 * @return 
		 */ 
		 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; 
		 } 
	 }

4,WEB上显示制作的报表图片


参考代码:

ShowProductSalesServlet.java

package com.test.jfreechart;

import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;

import com.test.util.DB;

public class ShowProductSalesServlet extends HttpServlet {

	public ShowProductSalesServlet() {
		// TODO Auto-generated constructor stub
		super();
	}
	
	private  DefaultCategoryDataset categoryDataset=new DefaultCategoryDataset(); 
	private  DefaultPieDataset pieDataset = new DefaultPieDataset();
	
	private void  getDataSet() { 
        /*DefaultCategoryDataset dataset = new DefaultCategoryDataset(); */
        /*dataset.addValue(100, "北京", "苹果"); */
        
        Connection conn=null;
        ResultSet rs=null;
        PreparedStatement ps=null;
        
       
        try{
       	 conn=DB.getDBConnection();
       	 String sql="select name,saleNum from product";
       	 ps=conn.prepareStatement(sql);
       	 rs=ps.executeQuery();
       	 System.out.println("查询语句:"+sql);
       	 while(rs.next()){
       		categoryDataset.addValue(rs.getInt(2), "", rs.getString(1));
       		pieDataset.setValue(rs.getString(1),rs.getInt(2));
       	 }
       	 
        }catch (SQLException e) {
			// TODO: handle exception
       	 e.printStackTrace();
		}finally{
			DB.close(conn);
			DB.close(ps);
			DB.close(rs);
		}
        /*return dataset; */
    } 

	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		/* CategoryDataset dataset = getDataSet(); */
		getDataSet();
		/*条形图*/
         JFreeChart chartCategory = ChartFactory.createBarChart3D( 
                            "产品销量图", // 图表标题
                            "产品", // 目录轴的显示标签
                            "销量", // 数值轴的显示标签
                             categoryDataset, // 数据集
                             PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                             true,  // 是否显示图例(对于简单的柱状图必须是 false)
                             false, // 是否生成工具
                             false  // 是否生成 URL 链接
                             ); 
         /*饼图*/  
         JFreeChart pieChart = ChartFactory.createPieChart(
        		 "水果产量图",  // 图表标题
        		 pieDataset, 
        		 true, // 是否显示图例
        		 false, 
        		 false 
        		 ); 

         FileOutputStream category_jpg = null; 
         FileOutputStream pie_jpg = null; 
         try { 
        	 /*条形图图片输出*/
        	 category_jpg = new FileOutputStream("F:\\myeclipse_project\\jfreechart1\\WebRoot\\chartPhoto\\productSale.jpg"); 
             /*ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,400,300,null); */
             ChartUtilities.writeChartAsJPEG(category_jpg,chartCategory,400,500,null); 
             /*饼图图片输出*/
             pie_jpg = new FileOutputStream("F:\\myeclipse_project\\jfreechart1\\WebRoot\\chartPhoto\\productSale_pie.jpg"); 
             ChartUtilities.writeChartAsJPEG(pie_jpg,pieChart,400,500,null); 
             
             /*重定向到页面*/
             this.getServletContext().getRequestDispatcher("/admin/show.jsp").forward(request, response);
         } finally { 
             try { 
            	 category_jpg.close(); 
            	 pie_jpg.close(); 
             } catch (Exception e) {} 
         } 
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
           
	}
	
	 
}

上面代码关于图片的存放位置:我设置的是项目文件夹下chartPhoto文件夹的绝对路径

缺点:运行时要刷新项目文件,否则图片显示异常

DB.java

package com.test.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;



public class DB {
	private static final String driver="com.mysql.jdbc.Driver";
	private static final String url="jdbc:mysql://localhost:3306/jfreechart";
	private static final String user="root";
	private static final String password="110"; 
	public static Connection getDBConnection(){
		Connection conn=null;
		try {
			Class.forName(driver);
			conn=DriverManager.getConnection(url,user,password);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
	public static void close(Connection conn){
		if(conn!=null){
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	public static void close(PreparedStatement pstmt){
		if(pstmt!=null){
			try {
				pstmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	public static void close(ResultSet rs){
		if(rs!=null){
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void close(Statement stmt){
		if(stmt!=null){
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	
}


show.jsp

<pre class="java" name="code"><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
   <title>显示JFREE CHART图表信息!</title>
  </head>
  <body>
   <center>
   <table border="1" width="90%" height="100%">
     <tr><td><h3>产品销售条形图</h3></td><td><h3>产品销售饼图</h3></td></tr>
     <tr>
	     <td> <img  src="<%=request.getContextPath()%>/chartPhoto/productSale.jpg" /></td>
	     <td> <img  src="<%=request.getContextPath()%>/chartPhoto/productSale_pie.jpg" /></td>
     </tr>
   </table>
    
    <%--<img  src="<%=basePath%>/chartPhoto/productSale.jpg" />
    --%>
   </center>
  </body>
</html>

 

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
	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_3_0.xsd">
  <display-name></display-name>
  
  <servlet>
    <description>报表制作</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>ShowProductSalesServlet</servlet-name>
    <servlet-class>com.test.jfreechart.ShowProductSalesServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>ShowProductSalesServlet</servlet-name>
    <url-pattern>/ShowProductSalesServlet</url-pattern>
  </servlet-mapping>
  
  	
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

简单数据库设计:


运行测试:

浏览器地址:http://localhost:8088/jfreechart1/ShowProductSalesServlet



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值