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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM