Gantt chart

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();
		}
    }
    
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
甘特图(Gantt chart)是一种通过条状图来显示项目、进度和其他时间相关的系统进展的内在关系随着时间进展的情况的图表。它以亨利·劳伦斯·甘特(Henry Laurence Gantt)先生的名字命名。\[1\]\[2\]甘特图通常使用横轴表示时间,纵轴表示各个项目,通过线条来表示期间计划和实际完成的情况。每个矩形块或文本可以单独修饰,例如可以改变颜色、字体大小等。\[3\]甘特图可以帮助项目管理人员和团队成员更好地了解项目的进度和时间安排,从而更好地进行项目管理和决策。 #### 引用[.reference_title] - *1* [甘特图(Gantt Chart)绘制方法](https://blog.csdn.net/qq_41127811/article/details/126462761)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [什么是甘特图](https://blog.csdn.net/weixin_44557372/article/details/124086456)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [MATLAB | 如何使用MATLAB绘制甘特图(gantt chart)](https://blog.csdn.net/slandarer/article/details/127469719)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值