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();
}
}
}
分享到:
相关推荐
甘特图(Gantt chart )又叫横道图、条状图(Bar chart)。它是以图示的方式通过活动列表和时间刻度形象地表示出任何特定项目的活动顺序与持续时间。它是在第一次世界大战时期发明的,以亨利·L·甘特先生的名字命名,...
用excel制作甘特图gantt chart
专业的用Excel做的Project甘特图Gantt Chart in Excel
Gantt Chart source code for Silverlight
甘特图插件 gantt chart For Todolist 2.0.0.1
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 ...
甘特图控件 比较好用 不错的控件 希望有用的朋友可以下载
使用Visio画甘特图 日程详细信息.doc
基于Java swing的开源Gantt图程序e-gantt
Gantt-Chart:基于D3.js的一个甘特图基本实现
杰笛甘特图 甘特图是项目管理时经常用到的图表。您可以利用它来计划、分配任务,掌握进度。 杰笛甘特图是一个完全基于Java Swing的组件,您可以用它在你的Swing应用程序里实现甘特图。和我们的其它产品一样,它在...
Gantt chart Mircosoft template
Project Monitoring Using Angular-Gantt Chart
开源甘特图Gantt_Chart,原来是VB版本的,我已经改为C#版本了
Microsoft Excel Gantt Chart Add-In
银行系统分有管理子系统,贷款子系统,存款子系统,以及网上银行子系统。Gantt chart用于系统进程管理和时间,人员,任务进度分配!支持原创!!
甘特图(Gantt Chart),项目进度Excel模板,计划进度Excel模板,Excel模板合集,总共37个模板
GanttChart Demo with multiple tasks alá JFreeGraph-Demo 后面的代码只是 JFreeChart 在 Matlab 中使用它的可能性的演示。 我玩了一点使用我在网上找到的代码片段和 API 文档。 ( ...
Recognize Gantt chart advantage!
专业的用Excel做的Project甘特图Gantt Chart in Excel