http://blog.sina.com.cn/s/blog_50a7c4a601009817.html
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