package com.mis.tools;
/**
* @author Dahai He
* @date 2010-07-30
*/
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickUnit;
import org.jfree.chart.axis.DateTickUnitType;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.data.category.IntervalCategoryDataset;
import org.jfree.data.gantt.Task;
import org.jfree.data.gantt.TaskSeries;
import org.jfree.data.gantt.TaskSeriesCollection;
import org.jfree.data.time.SimpleTimePeriod;
import com.mis.vo.TaskForGantt;
public class GanttChartUtil {
/**
* Creates a sample dataSet for a Gantt chart.
* @return The dataSet.
*/
public static IntervalCategoryDataset createDataset(List<TaskForGantt> tasks) {
TaskSeries s1 = new TaskSeries("Scheduled");
TaskSeries s2 = new TaskSeries("Actual");
for(int i = 0; i < tasks.size(); i++){
// a task
TaskForGantt tfg = tasks.get(i);
//create a task with scheduled time, time can not be null
SimpleTimePeriod stp1 = new SimpleTimePeriod(tfg.getStart(),tfg.getEnd());
s1.add(new Task(tfg.getDescription(),stp1));
//create a task with actual time, time can be null
SimpleTimePeriod stp2 = null;
if(tfg.getActualStart() == null || tfg.getActualEnd() == null){
s2.add(new Task(tfg.getDescription(),stp2));
}else{
stp2 = new SimpleTimePeriod(tfg.getActualStart(),tfg.getActualEnd());
s2.add(new Task(tfg.getDescription(),stp2));
}
}
TaskSeriesCollection collection = new TaskSeriesCollection();
collection.add(s1);
collection.add(s2);
return collection;
}
/**
* Utility method for creating Date objects.
* @param day the date.
* @param month the month.
* @param year the year.
* @return a date.
*/
private static Date date(int day,int month,int year) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month, day);
Date result = calendar.getTime();
return result;
}
/**
* Creates a chart.
* @param dataset the dataset.
* @return The chart.
*/
private static JFreeChart createChart(IntervalCategoryDataset dataset,String title) {
JFreeChart chart = ChartFactory.createGanttChart(
title, // chart title
"Task", // domain axis label
"Date", // range axis label
dataset, // data
true, // include legend
true, // tooltips
false // urls
);
return chart;
}
/**
* create a jpeg image by the tasks
* @param title, the title for the image
* @param out, a OutPutStream
* @param tasks, a list
*/
public static void makeGanntChart(String title,OutputStream out,List<TaskForGantt> tasks){
IntervalCategoryDataset dataset = createDataset(tasks);
JFreeChart chart = createChart(dataset,title);
CategoryPlot plot = chart.getCategoryPlot();
DateAxis da = (DateAxis)plot.getRangeAxis();
da.setDateFormatOverride(new SimpleDateFormat("dd/MM/yy"));
//da.setAutoRange(false);
//da.setTickUnit(new DateTickUnit(DateTickUnitType.DAY,10));
//CategoryAxis domainAxis = (CategoryAxis)plot.getDomainAxis();
int size = tasks.size();
try {
int height = 300;
if(size > 10 && size <= 20){
height = 500;
}else if(size > 20 && size <= 30){
height = 700;
}else if(size > 30 && size <= 40){
height = 900;
}
ChartUtilities.writeChartAsJPEG(out,1.0f,chart,800,height,null);
} catch (IOException e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
GanttChart ganttChart = new GanttChart(); ganttChart.DataSource = tasks; // tasks 是包含项目任务的数据源 // 配置每个任务的属性 foreach (Task task in tasks) { ganttChart.SetTaskValues(task.ID, task....
甘特图(Gantt chart )又叫横道图、条状图(Bar chart)。它是以图示的方式通过活动列表和时间刻度形象地表示出任何特定项目的活动顺序与持续时间。它是在第一次世界大战时期发明的,以亨利·L·甘特先生的名字命名,...
专业的用Excel做的Project甘特图Gantt Chart in Excel
在IT领域,项目管理工具是不可或缺的一部分,而甘特图(Gantt Chart)则是其中一种直观展示项目进度的图表。本篇文章将详细探讨一个专为Silverlight平台设计的甘特图源代码,帮助开发者了解如何在Silverlight应用中...
The .NET C# Winforms Gantt Chart Control is a class library project hosted on codeplex that provides a quick way to get a gantt chart up and running for your application. This control was first ...
在Excel中创建甘特图是一种常见且实用的项目管理工具,它可以帮助我们直观地展示项目的时间线和进度。甘特图通常由一系列条形图组成,每个条形图代表一个任务,其长度表示任务的持续时间,而条形图的位置则指示任务...
【标题】"GanttChart(VS2010) VB.Net源码"涉及的主要知识点是甘特图(Gantt Chart)在VB.Net 2010环境中的实现。甘特图是一种常用的时间线图表,它以图形化的方式展示项目计划、任务分配以及进度,通常在项目管理...
Gantt图表是一种项目管理工具,用于可视化项目的时间线和进度,通常用于计划任务、分配资源以及跟踪项目的进度。开源Gantt图软件为用户提供了一个免费且灵活的解决方案,以创建和管理他们的项目计划。本文将详细介绍...
GanttChart组件适用于各种项目管理软件、在线协作平台或是自定义的报告工具,可以帮助团队有效地监控项目进度,识别潜在的延迟风险,并促进团队间的沟通协调。 **学习和扩展** 对于想要深入学习D3.js和甘特图实现...
“Gantt chart excel template_Excel_97-2003.xls”是适用于较早版本Excel的模板,即使在旧系统中也能正常使用。"Gantt_auto-bars_short_v3-3.xls"可能包含自动调整条形长度以适应任务持续时间的功能,这在跟踪大量...
总结来说,"Gantt chart_exceladd-in_scheduling_"是关于在Excel中利用Gantt Chart Add-In进行项目计划和调度的介绍。这个插件使得非专业的项目经理也能高效地管理项目,通过创建直观的甘特图来跟踪任务、时间表和...
甘特图控件 比较好用 不错的控件 希望有用的朋友可以下载
在银行系统的开发与管理中,Gantt chart是一种关键的项目管理工具,用于规划、跟踪和协调各个任务。本文将详细探讨Gantt chart在银行系统中的应用,包括管理子系统、贷款子系统、存款子系统和网上银行子系统,并结合...
甘特图插件是项目管理领域中常用的工具,它以图形化的方式展示了项目的进度计划,帮助用户直观地理解任务的开始时间、结束时间、持续时间以及各项任务之间的依赖关系。在Todolist 2.0.0.1版本中集成的甘特图插件,...
开源甘特图Gantt_Chart(C#版本)是一款基于C#编程语言开发的项目管理工具,主要用于可视化地展示任务进度和时间线。甘特图在IT行业中被广泛应用于项目计划和跟踪,它通过条形图的形式清晰地表示出任务的开始时间、...
《VB.NET2005实现GanttChart甘特图表测试示例详解》 在软件开发过程中,项目管理是一项至关重要的任务,它涉及到时间规划、任务分配以及进度跟踪。甘特图(Gantt Chart)作为直观的项目管理工具,被广泛用于展示...
本文将深入探讨一个名为“ganttchart.zip”的压缩包,其中包含了C#实现甘特图控件的源码,帮助我们理解其工作原理并学习如何应用。 首先,这个压缩包中的源代码分布在几个关键文件中,如`ProjectTest.cs`、`Chart....
甘特图(Gantt chart)是一种项目管理工具,由亨利·甘特在20世纪初发明,用于清晰地展示项目的时间线和进度。在Microsoft软件中,甘特图模板通常指的是在Microsoft Project或Microsoft Excel中可以使用的预设布局,...
"Project Monitoring Using Angular-Gantt Chart" 提供了一种利用Angular-Gantt图表进行项目监控的方法。Angular-Gantt是一个开源JavaScript库,它专门设计用于在AngularJS应用程序中创建交互式甘特图。本文将深入...