`
静妙仙人
  • 浏览: 85235 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用JFreeChart在jsp页面画甘特图

阅读更多



     最近由于项目需要,需要在网页中生成甘特图,在网上浏览资料之后,最后通过JFreeChart实现了在jsp页面画甘特图。

    在此就与大家分享一下我的收获。

    首先把重要的代码粘出来供大家参考,项目源码和数据库信息表,以及参考的资料和一些资料的网址我就打包放在下面,大家可以下载后学习参考。

 

    ProgressControl.java//完成从数据库读数据,生成甘特图

package com.angrybirds.DAO;

import java.io.IOException;
import java.io.PrintWriter;
//import java.util.Date;
import java.sql.*;
import java.util.ArrayList;
import java.util.ListIterator;

import javax.servlet.http.HttpSession;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.gantt.Task;
import org.jfree.data.gantt.TaskSeries;
import org.jfree.data.gantt.TaskSeriesCollection;

public class ProgressControl {
	
	public static String createPlanGanttChart(String missionId,String missionName,HttpSession session,PrintWriter pw){
		
		String fileName = null;
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		String sql = null;
		String sql2 = null;
		
		ArrayList nameList = new ArrayList();
		ArrayList startList = new ArrayList();
		ArrayList endList = new ArrayList();
		
		conn = DB.getConnection();
		stmt = DB.getStatement(conn);
		
		
		
		sql = "select * from SQLJ.Pro_control"; // where Task_id = '" + missionId + "'";
		
		//System.out.println(sql);
		
		rs = DB.getResultSet(stmt, sql);
		
		try {
			while(rs.next()){
				
				nameList.add(rs.getString("Task_name"));
				startList.add(rs.getDate("Plan_starttime"));
				endList.add(rs.getDate("Plan_endtime"));				
							}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		ListIterator iterN = nameList.listIterator();
		ListIterator iterS = startList.listIterator();
		ListIterator iterE = endList.listIterator();
		
		TaskSeriesCollection tsc = new TaskSeriesCollection();
		TaskSeries tsPlan = new TaskSeries("Plan");
			
		while(iterN.hasNext()){
			
			String submissionName = (String)iterN.next();
			java.util.Date sDate = (java.util.Date)iterS.next();
			java.util.Date eDate = (java.util.Date)iterE.next();
			
						
			if(sDate.before(eDate)){
			
			Task task = new Task(submissionName,sDate,eDate);
			tsPlan.add(task);
					
			}
			else{}
			
						
			
		}
					
			tsc.add(tsPlan);//tsc.add(tsPlan);
				
			JFreeChart chart = ChartFactory.createGanttChart(missionName + "GanttProject", "Project", "Time", tsc, true, true, true);
			
			ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
			
	
				try {
					fileName = ServletUtilities.saveChartAsPNG(chart, 500, 80+65*nameList.size(), info,session);
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		
			
		
				try {
					ChartUtilities.writeImageMap(pw, fileName, info,true);
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		
			
		
				try {
					rs.close();
					stmt.close();
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}		
				
		
			
			pw.flush();

		//System.out.println(fileName);
	
		return fileName;
	

	}
	
	public static String createRealGanttChart(String missionId,String missionName,HttpSession session,PrintWriter pw){
		
		String fileName = null;
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		String sql = null;
		String sql2 = null;
		
		ArrayList nameList = new ArrayList();
		ArrayList startList = new ArrayList();
		ArrayList endList = new ArrayList();
		
		conn = DB.getConnection();
		stmt = DB.getStatement(conn);
		
		
		
		sql = "select * from SQLJ.Pro_control"; // where Task_id = '" + missionId + "'";
		
		//System.out.println(sql);
		
		rs = DB.getResultSet(stmt, sql);
		
		try {
			while(rs.next()){
				
				nameList.add(rs.getString("Task_name"));
								startList.add(rs.getDate("Reality_starttime"));
				endList.add(rs.getDate("Reality_endtime"));
				
							}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//rs = null;
		//System.out.println("over:1");
			ListIterator iterN = nameList.listIterator();
		ListIterator iterS = startList.listIterator();
		ListIterator iterE = endList.listIterator();
		
		TaskSeriesCollection tsc = new TaskSeriesCollection();
		//TaskSeries tsPlan = new TaskSeries("Plan");
		TaskSeries tsReal = new TaskSeries("Real");
		
		while(iterN.hasNext()){
			
			String submissionName = (String)iterN.next();
			java.util.Date sDate = (java.util.Date)iterS.next();
			java.util.Date eDate = (java.util.Date)iterE.next();
						
			if(sDate.before(eDate)){
			
			Task task = new Task(submissionName,sDate,eDate);
			tsReal.add(task);
					
			}
			else{}
			
			
					
						
			
		}
		
			
			tsc.add(tsReal);//tsc.add(tsPlan);
						
			JFreeChart chart = ChartFactory.createGanttChart(missionName + "GanttProject", "Project", "Time", tsc, true, true, true);
			
			ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
			
	
				try {
					fileName = ServletUtilities.saveChartAsPNG(chart, 500, 80+65*nameList.size(), info,session);
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		
			
		
				try {
					ChartUtilities.writeImageMap(pw, fileName, info,true);
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		
			
		
				try {
					rs.close();
					stmt.close();
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}		
				
		
			
			pw.flush();

		//System.out.println(fileName);
	
		return fileName;
	

	}
}

 

 

    我把计划任务和实际任务分开画的甘特图,所以有两个甘特图的jsp页面

    PlanGantt.jsp

<%@ page language="java" import="java.util.*,java.io.*" %>
<%@ page import="com.angrybirds.DAO.ProgressControl"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>


    

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>AngryBirds</title>
<link href="css.css" rel="stylesheet" type="text/css" />
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
</head>
<body>
<div class="size">
  <div class="header">
    <div class="header01">
      <div class="logo"> <img src="image/img_15.bmp" alt="" /> </div>
    </div>
    <div class="cmainimg"> <img alt="" src="image/img_73.jpg" /> </div>
    <div class="mnav"> <img class="mnimgl" src="image/img_37.jpg" alt="" /> <img class="mnimgr" src="image/img_50.jpg" alt="" />
      <div class="mnm">
        <ul>
        
        </ul>
      </div>
    </div>
  </div>
  <div class="content">
    <div class="submenu" style="left: 0px; top: 0px"> <img class="snimgl" src="image/img_96.jpg" alt="" /> <img class="snimgr" src="image/img_107.jpg" alt="" />
      <div class="subtext"> You are here:Home </div>
      <div class="subimag" style="width: 41px; height: 51px">
        <ul>
          <li>1</li>
          <li>2</li>
          <li>3</li>
        </ul>
      </div>
    </div>
    <div class="mcontent">
       <!--***************************************************************************×ó/-->

      <!--***************************************************************************ÓÒ/-->
      <div align="center"  class="mcmid3">
 <% 
    	String missionId = "1";
    	String filename = ProgressControl.createPlanGanttChart(missionId,"AllProject",session,new PrintWriter(out));
    	String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
    %>
    
    <img src="<%=graphURL %>" width="500" height="300" border="0" usemap="#<%=filename %>">
      </div>
      <!--***************************************************************************/-->
    </div>
  </div>
  <div class="footer"> <img class="mnimgl" src="image/img_275.jpg" alt="" /> <img class="mnimgr" src="image/img_291.jpg" alt="" /> <a href="http://www.88web.org/">HOME</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="http://www.88web.org/">ABOUT US</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="http://www.88web.org/">GALLERY</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="http://www.88web.org/">FAQ</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="http://www.88web.org/">SERVICES</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="http://www.88web.org/">CONTACT</a> <br/>
    <font color="#333333">Copyright 2009 Your Website | <a style="color: #333333" href="http://www.88web.org/css-templates/">CSS Template</a> by <a style="color: #333333" href="http://www.88web.org/">AngryBirds</a></font></div>
</div>
</body>
</html>

 

 

    RealGantt.jsp

<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="GBK"%>
<%@ page import="com.angrybirds.DAO.ProgressControl"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>AngryBirds</title>
<link href="css.css" rel="stylesheet" type="text/css" />
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
</head>
<body>
<div class="size">
  <div class="header">
    <div class="header01">
      <div class="logo"> <img src="image/img_15.bmp" alt="" /> </div>
    </div>
    <div class="cmainimg"> <img alt="" src="image/img_73.jpg" /> </div>
    <div class="mnav"> <img class="mnimgl" src="image/img_37.jpg" alt="" /> <img class="mnimgr" src="image/img_50.jpg" alt="" />
      <div class="mnm">
        <ul>
          
        </ul>
      </div>
    </div>
  </div>
  <div class="content">
    <div class="submenu" style="left: 0px; top: 0px"> <img class="snimgl" src="image/img_96.jpg" alt="" /> <img class="snimgr" src="image/img_107.jpg" alt="" />
      <div class="subtext"> You are here:Home </div>
      <div class="subimag" style="width: 41px; height: 51px">
        <ul>
          <li>1</li>
          <li>2</li>
          <li>3</li>
        </ul>
      </div>
    </div>
    <div class="mcontent">
       <!--***************************************************************************左/-->

   
      <!--***************************************************************************右/-->
      <div align="center" class="mcmid3">
    <% 
    	String missionId = "1";
    	String filename = ProgressControl.createRealGanttChart(missionId,"AllProject",session,new PrintWriter(out));
    	String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
    %>
    
    <img src="<%=graphURL %>" width="500" height="300" border="0" usemap="#<%=filename %>">
      </div>
      <!--***************************************************************************/-->
    </div>
  </div>
  <div class="footer"> <img class="mnimgl" src="image/img_275.jpg" alt="" /> <img class="mnimgr" src="image/img_291.jpg" alt="" /> <a href="http://www.88web.org/">HOME</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="http://www.88web.org/">ABOUT US</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="http://www.88web.org/">GALLERY</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="http://www.88web.org/">FAQ</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="http://www.88web.org/">SERVICES</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="http://www.88web.org/">CONTACT</a> <br/>
    <font color="#333333">Copyright 2009 Your Website | <a style="color: #333333" href="http://www.88web.org/css-templates/">CSS Template</a> by <a style="color: #333333" href="http://www.88web.org/">AngryBirds</a></font></div>
</div>
</body>
</html>

 

 

     此图为效果图:(由于我用的是DB2所以时间显示有点问题,如果要想甘特图有更好的显示效果可以参考API文档中相关类和方法

地址:http://www.jfree.org/jfreechart/api/javadoc/index.html

 

  • 大小: 19 KB
3
3
分享到:
评论
4 楼 zhangfox1990 2014-04-09  
3 楼 ljoivae 2011-12-16  
还有一个问题,你在生成甘特图之后,在图片上点击,会不会连接到另一个页面?
我在程序中并没有设置点击之后的链接页面。
查看源文件,代码如下
<area shape="rect" coords="120,199,294,239" onMouseOver="return overlib('2010-11-8 - 2010-12-1');" onMouseOut="return nd();" href="index.html?series=%E5%AE%9E%E9%99%85&amp;category=%E4%BB%BB%E5%8A%A13"/>
请问你遇到过吗?
2 楼 ljoivae 2011-12-16  
中文乱码问题怎么解决呢?
1 楼 ei0 2011-04-25  
没效果图,不爽

相关推荐

    用JFreeChart在网页中实现Gantt图

    本教程将重点介绍如何使用Java的JFreeChart库在JSP页面上实现甘特图。 JFreeChart是一款强大的Java图表库,支持创建各种类型的图表,包括柱状图、饼图、线图以及我们的目标——甘特图。在JSP页面中使用JFreeChart,...

    jfreechart各类曲线图JSP代码

    JFreeChart是一组功能强大、灵活易用的Java绘图API,使用它可以生成多种通用性的报表,包括柱状图、饼图、曲线图、甘特图等。它能够用在Swing和Web等中制作自定义的图表或报表,并且得到广泛的应用。本文将通过引领...

    JFreeChart与JSP动态图表

    1. **图表类型**:JFreeChart支持多种图表类型,如条形图、饼图、线形图、面积图、散点图、甘特图等,可以满足各种数据展示需求。 2. **自定义图表元素**:用户可以定制图表的各个方面,如颜色、字体、标签、图例、...

    JFreeChart在JSP开发中的应用心得.pdf

    JFreeChart是一个开源的Java项目,专为开发各种类型的图表而设计,如饼图、柱状图(包括堆栈柱状图)、线图、区域图、分布图、混合图、甘特图和仪表盘等。这些图表能够满足当前商业系统的多种需求。作为基于Java语言...

    利用JFreeChart实现Java中饼状图、柱状图等图表并在Jsp中显示

    在这里,Servlet可能负责处理数据并使用JFreeChart生成图表,然后将图表传递给JSP页面展示。 4. **myEclipse和Tomcat**:myEclipse作为开发工具,提供了一整套开发、调试和部署Java Web应用的环境。Tomcat作为...

    用JFreeChart增强JSP报表的用户体验

    JFreeChart 是一个强大的Java绘图库,它提供了丰富的图表类型,如柱状图、饼图、曲线图、甘特图等,适用于开发各种类型的报表,包括在Swing应用和Web应用中。由于其开源且易于使用的特性,JFreeChart在Java开发领域...

    使用 jfreechart 生成 曲线、柱状图、饼状图、分布图 展示到JSP

    `JFreeChart`是一个开放源码的Java库,它为开发者提供了丰富的图表类型,包括折线图、柱状图、饼图、散点图、甘特图等,可以用于报表、数据分析、监控等多种场景。它支持自定义颜色、样式、标签等,使得图表的呈现...

    java/jsp图表生成-JfreeChart套装(源码包,javadoc,安装手册,本人精选简明教程)

    柱状图、饼图、曲线图、甘特图等。它能够用在Swing和Web等中制作自定义的图表或报表,并且得 到广泛的应用。 JFreeChart 是JFreeChart公司在开源网站SourceForge.net上的一个项目,该公司的主要产品有如 下: 1...

    JFreeChart画图

    **JFreeChart** 是一个Java库,用于生成高质量的图表,包括曲线图、柱状图、折线图、饼图以及甘特图等。它在Java应用和Web应用中广泛使用,尤其是对于数据可视化和报告生成。JFreeChart库不仅支持静态图表,还能够...

    jfreechart图形

    除了上述图表,JFreeChart还支持散点图、雷达图、甘特图、热力图等多种图表类型。这些图表适用于不同场景,如科学数据分析、项目管理、商业报告等。 6. **自定义与美化** JFreeChart的强大之处在于其高度的定制化...

    JFreeChart使用教程(含下载、安装)

    JFreeChart是一组功能强大、灵活易用的Java绘图API,使用它可以生成多种通用性的报表,包括柱状图、饼图、曲线图、甘特图等。它能够用在Swing和Web等中制作自定义的图表或报表,并且得到广泛的应用。本文将通过引领...

    jfreechart试例代码

    JFreeChart是一个强大的Java图表库,它允许开发者创建多种类型的2D和3D图表,如折线图、柱状图、饼图、散点图、甘特图等。这个库在IT领域,尤其是在Web应用程序中,被广泛用于数据可视化。在你提供的"jfreechart试例...

    jfreechart

    JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图(Gantt charts)等等多种图表,并且可以产生PNG和JPEG格式的输出,还可以与PDF和EXCEL关联。...

    jfreechart的一个web例子

    JFreeChart 是一个开源的 Java 图形库,它为开发者提供了丰富的图表功能,包括饼图、柱状图、线图、散点图、甘特图等,广泛应用于数据可视化和报告生成。本例子将详细介绍如何在 Web 应用中使用 JFreeChart。 在 ...

    JFreeChart所有图形实例(Demo和源码).rar

    JFreeChart是一款强大的Java库,用于创建各种类型的2D图表,包括饼图、柱状图、线图、散点图、甘特图等。这个压缩包"JFreeChart所有图形实例(Demo和源码).rar"包含了JFreeChart库的各种图形实例,提供了丰富的示例...

    JFreeChart网页版Demo

    JFreeChart是Java平台上的开源项目,它提供了一组丰富的API,用于创建多种类型的图表,如折线图、柱状图、饼图、散点图、甘特图等。它支持多种输出格式,如Swing组件、SVG、PNG、JPEG和PDF,使得图表可以方便地嵌入...

    java图形jfreechart-0.9.16

    1. **图表类型多样**:JFreeChart支持多种图表类型,如折线图、柱状图、饼图、散点图、甘特图、雷达图、热力图以及3D图表等,可以满足数据分析和展示的广泛需求。 2. **定制性强**:每个图表的外观和感觉都可以高度...

    jFreeChart应用

    jFreeChart是一款强大的Java图表库,它允许开发者在Java应用程序、Swing组件、Web应用程序以及服务器端生成各种高质量的图表,包括柱状图、饼图、线形图、散点图、甘特图等。这款开源库在数据可视化领域具有广泛的...

Global site tag (gtag.js) - Google Analytics