http://blog.sina.com.cn/s/blog_50a7c4a601009817.html

第一种方法使用SwiftGantt实现甘特图(进度图推荐这个)
 
import java.awt.Color;
import java.io.IOException;
import java.util.GregorianCalendar;
import com.yuxingwang.gantt.Config;
import com.yuxingwang.gantt.GanttChart;
import com.yuxingwang.gantt.model.GanttModel;
import com.yuxingwang.gantt.model.Task;
import com.yuxingwang.gantt.ui.TimeUnit;
 

public class SwiftGanttChartDemo {

public static void main(String[] args) throws IOException{
  //1. 首先初始化一个甘特图的主类com.yuxingwang.gantt.GanttChart,
  //是一个继承自javax.swing.JScrollPanel的Swing的组件,通过它就可以用来显示甘特图:
  GanttChart gantt = new GanttChart();

//2. 设置甘特图的时间刻度的单位,如以星期为单位,则时间轴上的每一刻度代表一个星期: 
  gantt.setTimeUnit(TimeUnit.Day);

//3. 配置甘特图,在这里您可以通过Config类配置您的甘特图,
  //您可以设置甘特图各个元素的颜色,宽度等,详细配置项请参考API文档中的Config类的说明。
  //Config config = gantt.getConfig();
  //config.setWorkingTimeBackColor(Color.red);
    
  //4. 创建甘特图的数据模型GanttModel,
  //所有的您要显示的项目任务信息都通过GanttModel来提供给GanttChart对象。      
 GanttModel  model = new GanttModel();

//5. 设置项目开始时间和结束时间:
  model.setKickoffTime(new GregorianCalendar(2007, 1, 4));
  model.setDeadline(new GregorianCalendar(2007, 1, 15));

//6. 创建甘特图的基本元素:任务对象Task。一个Task对象在甘特图中表现为一条横线。
  //每个Task对象都可以包含任意多的子Task对象,形成树状的任务模型。如果一个Task对象包含子Task,
  //则自动成为对象组,对象组仍然是Task对象,但是在甘特图中显示为不同的形状。
  //如下例,taskGroup就是任务组,包含了两个子任务,task1和task2:
  Task taskGroup = new Task("My Work 1", new GregorianCalendar(2007, 1, 4), new GregorianCalendar(2007, 1, 15));
  Task task1 = new Task("Sub-task 1", new GregorianCalendar(2007, 1, 4), new GregorianCalendar(2007, 1, 8));
  Task task2 = new Task("Sub-task 2", new GregorianCalendar(2007, 1, 8), new GregorianCalendar(2007, 1, 15));

task1.setBackcolor(Color.CYAN);
  task1.setBackcolor(Color.green);
  taskGroup.add(new Task[]{task1, task2});

//7. 指定任务之间的依赖关系。如果一项任务需要在另一项任务完成之后才能开始,
  //那么需要将另一项任务设为此任务的前置任务。:
  task2.addPredecessor(task1);

//8. 将主任务组加入甘特图的Model中并将model对象传递给GanttChart:
  model.addTask(taskGroup);
  gantt.setModel(model);  
  //这时GanttChart就可以显示出甘特图来了。
  
  //指定路径,生成图片:
  String filePath = "D:\\gantt.jpg";
  gantt.generateImageFile(filePath);

//这样在您指定的路径就有生成的甘特图图片文件了。  
 }  
}

图示:gantt.jpg

--------------------------------------------------------------

JFreeChart 是 SourceForge.net 上的一个开源项目,它的源码和 API 都可以免费获得。 JFreeChart 的功能非常强大,可以实现饼图 ( 二维和三维 ) ,  柱状图  ( 水平 , 垂直 ), 线图 , 点图 , 时序图 , 甘特图 , 股票行情图 , 混和图 ,  温度计图 ,  刻度图等常用商用图表,   图形可以导出成 PNG 和 JPEG 格式,同时还可以与 PDF 和 EXCEL 关联,支持对图形的放大、缩小,支持常见图形的 3D 显示

第二种方法  使用Jfree实现甘特图
import java.awt.Color;
import java.io.*;  
import java.util.ArrayList;
import java.util.List;

import org.jfree.data.*;  
import org.jfree.chart.*;  
import org.jfree.chart.plot.*; 
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.chart.demo.BarChartDemo1;

public class JFreeBarChartDemo {

public static void main(String[] args) throws IOException{
     //第一步:设置数据源 
     CategoryDataset dataset = getDataSet2();  
     //第二步:生成jfreechart图形
        JFreeChart chart = ChartFactory.createBarChart3D(  
                            "水果产量图", // 图表标题  
                            "水果", // 目录轴的显示标签  
                            "产量", // 数值轴的显示标签  
                            dataset, // 数据集  
                            PlotOrientation.VERTICAL, // 图表方向:水平、垂直  
                            true,   // 是否显示图例(对于简单的柱状图必须是false)  
                            false,  // 是否生成工具  
                            false   // 是否生成URL链接  
                            );  
       // 第三步:生成装载图形的特殊面板 [Jv5kl_Q{ 
        chart.setTitle("这里设置标题");  
        CategoryPlot plot = chart.getCategoryPlot();
        //设置颜色

BarRenderer3D renderer = new BarRenderer3D();
        renderer.setSeriesPaint(0, Color.green);
        renderer.setSeriesPaint(1, new Color(0, 100, 255));
        renderer.setSeriesPaint(2, Color.RED);        plot.setRenderer(renderer);

FileOutputStream fos_jpg = null;  
        try {  
            fos_jpg = new FileOutputStream("D:\\fruit.jpg");  
            ChartUtilities.writeChartAsJPEG(fos_jpg,1,chart,400,300,null);  
        } finally {  
            try {  
                fos_jpg.close();  
            } catch (Exception e) {}  
        }  
    }  
     
    private static CategoryDataset getDataSet() {  
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();  
        dataset.addValue(100, null, "苹果");  
        dataset.addValue(200, null, "梨子");  
        dataset.addValue(300, null, "葡萄");  
        dataset.addValue(400, null, "香蕉");  
        dataset.addValue(500, null, "荔枝");  
        return dataset;  
    }  
     
    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;  
    }  
}

图示:fruit.jpg

java实现甘特图的2种方法:SwiftGantt和Jfree (转)的更多相关文章

  1. java分享第十六天( java读取properties文件的几种方法&java配置文件持久化:static块的作用)

     java读取properties文件的几种方法一.项目中经常会需要读取配置文件(properties文件),因此读取方法总结如下: 1.通过java.util.Properties读取Propert ...

  2. Java中创建数组的几种方法

    Java中创建数组的几种方法 public static void main(String[] args) { //创建数组的第一种方法 int[] arr=new int[6]; int intVa ...

  3. Java List转换为字符串的几种方法

    Java List转换为字符串的几种方法 import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import ...

  4. java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)

    转载地址:http://www.devba.com/index.php/archives/4581.html java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明); ...

  5. Java遍历List集合的三种方法

    Java遍历List集合的三种方法 List<String> list = new ArrayList<String>(); list.add("aaa") ...

  6. (转)java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)

    java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明);部分资料参考网络资源 1. java向MySQL插入当前时间的四种方式 第一种:将java.util.Date ...

  7. Java 读取clob字段的几种方法

    Java 读取clob字段的几种方法 一.第一种 Clob clob = rs.getClob("remark");//Java.sql.Clob String detailinf ...

  8. JAVA 集合 List 分组的两种方法

    CSDN日报20170219--<程序员的沟通之痛> [技术直播]揭开人工智能神秘的面纱 程序员1月书讯 云端应用征文大赛,秀绝招,赢无人机! JAVA 集合 List 分组的两种方法 2 ...

  9. java字符串大小写转换的两种方法

    转载自:飞扬青春sina blogjava字符串大小写转换的两种方法 import java.io..* public class convertToPrintString {          pu ...

随机推荐

  1. jsonp模拟获取百度搜索相关词汇

    随便写了个jsonp模拟百度搜索相关词汇的小demo,帮助新手理解jsonp的用法. <!DOCTYPE html><html lang="en">< ...

  2. HDU1559 最大子矩阵 (二维树状数组)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1559 最大子矩阵 Time Limit: 30000/10000 MS (Java/Others)  ...

  3. FineUI 基于 ExtJS 的专业 ASP.NET 控件库

    FineUI 基于 ExtJS 的专业 ASP.NET 控件库 http://www.fineui.com/

  4. 2016huasacm暑假集训训练三 D - Invitation Cards

    题目链接:http://acm.hust.edu.cn/vjudge/contest/123674#problem/D 题意:一张个向图,求从点1开始到其他各点的最短路权值和加上从其他各点到点1的最短 ...

  5. thinkphp1

    命名空间 含义:从广义上来说,命名空间是一种封装事物的方法. 用途:用来解决命名冲突 namespace xxx\xxx; 使用: use xxx\xx\yy; new\xx\xx\yy; // 单一 ...

  6. java类,接口浅谈

    一般类,抽象类,接口的使用场景: 类;共同的特征和行为的抽取和封装 接口:标准,规范(功能的扩展)         需要对某个类进行功能的扩展,就让某个类实现这个接口,抽取出来称为接口   内部类: ...

  7. 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-2 工程及程序构架介绍

    视频简介: 该视频介绍iCore3应用开发平台出厂源代码中ARM部分程序构架. 源视频包下载地址: http://pan.baidu.com/s/1jHGnc7k   银杏科技优酷视频发布区: htt ...

  8. 查找Maven JAR坐标

    http://mvnrepository.com/ http://search.maven.org/

  9. CentOS 创建SVN 服务器,并且自动同步到WEB 目录

    CentOS 创建SVN 服务器,并且自动同步到WEB 目录 标签: centossvnsubversion服务器 2013-12-06 10:09 5492人阅读 评论(0) 收藏 举报  分类: ...

  10. Apache 配置多端口

    Apache 配置多端口,主要是以下步骤 1. 如果电脑是64位的,官网上下载WampServe,装的过程中如果出现msvcp110.dll丢失的话,解决办法如下: 1.1 首先是打开浏览器,在浏览器 ...