• java实现甘特图的2种方法:SwiftGantt和Jfree (转)


    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

    java实现甘特图的2种方法:SwiftGantt和Jfree 

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

     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

  • 相关阅读:
    41. 缺失的第一个正数
    40. 组合总和 II
    39. 组合总和
    38. 外观数列
    35. 搜索插入位置
    设计模式(1)单例模式
    一篇文章彻底搞懂Java的大Class到底是什么
    Vue实现一个MarkDown编辑器
    7 二分搜索树的原理与Java源码实现
    6 手写Java LinkedHashMap 核心源码
  • 原文地址:https://www.cnblogs.com/bnuvincent/p/6013425.html
Copyright © 2020-2023  润新知