SwiftGantt编程指南

使用SwiftGantt需要引用的jar文件(在下载的SwiftGantt软件包中可以找到):

commons-collections-3.2.jar
commons-lang-2.2.jar
commons-io-1.3.2.jar
log4j-1.2.15.jar
swiftcommon-0.3.x.jar
swiftgantt-0.3.x.jar

<一>. SwiftGantt快速上手.
以下是使用SwiftGantt的一般步骤,完成这些步骤就可以展现最基本的甘特图:

1. 首先初始化一个甘特图的主类org.swiftgantt.GanttChart,是一个继承自javax.swing.JScrollPanel的Swing的组件,通过它就可以用来显示甘特图:

GanttChart gantt = new GanttChart();


2. 设置甘特图的时间刻度的单位,如以日为单位,则时间轴上的每一刻度代表某一天:

gantt.setTimeUnit(TimeUnit.Day);


3. 配置甘特图,在这里您可以通过Config类配置您的甘特图,您可以设置甘特图各个元素的颜色,宽度。从0.3.0版本开始,您可以设置每周工作时间区间和每日的工作时间区间,以灵活适应不同的实际情况,详细配置项请参考API文档中的Config类的说明。

Config config = gantt.getConfig();
config.setWorkingTimeBackColor(Color.YELLOW);//设置工作时间背景色
config.setTimeUnitWidth(50);//设置时间单位的显示宽度
config.setWorkingDaysSpanOfWeek(new int[]{Calendar.MONDAY, Calendar.THURSDAY})//设置每周工作开始日与结束日。
...

4. 创建甘特图的数据模型GanttModel,所有的您要显示的项目任务信息都通过GanttModel来提供给GanttChart对象。

GanttModel model = new GanttModel();

5. 设置项目开始时间和结束时间:

model.setKickoffTime(new GregorianCalendar(2008, 0, 1));
model.setDeadline(new GregorianCalendar(2008, 0, 30));


6. 创建甘特图的基本元素:任务对象Task。一个Task对象在甘特图中表现为一条横线。每个Task对象都可以包含任意多的子Task对象,形成树状的任务模型。如果一个Task对象包含子Task,则自动成为对象组,对象组仍然是Task对象,但是在甘特图中显示为不同的形状。如下例,taskGroup就是任务组,包含了两个子任务,task1和task2:

Task taskGroup = new Task("My Work 1", new GregorianCalendar(2008, 0, 1), new GregorianCalendar(2008, 0, 30));
Task task1 = new Task("Sub-task 1", new GregorianCalendar(2008, 0, 1), new GregorianCalendar(2008, 0, 5));
Task task2 = new Task();
task2.setName("Sub-task 2");
task2.setStart(new GregorianCalendar(2008, 0, 6));
task2.setEnd(new GregorianCalendar(2008, 0, 18));//从0.3.0版本开始,设置任务的结束时间也包含在整个任务时间之内

taskGroup.add(new Task[]{task1, task2});


7. 指定任务之间的依赖关系。如果一项任务需要在另一项任务完成之后才能开始,那么需要将另一项任务设为此任务的前置任务。从0.3.0版本开始,您可以给一个任务添加多个前置任务。

task2.addPredecessor(task1);


8. 将主任务组加入甘特图的Model中并将model对象传递给GanttChart:

model.addTask(taskGroup);
gantt.setModel(model);


这时GanttChart就可以显示出甘特图来了。

<二>. 将甘特图保存为图片文件。
SwiftGantt可以将显示出来的甘特图保存为png和jpeg格式的图片文件,这个功能对于B/S的Web应用特别有用,您可以在Web应用后台生成一个静态的SwiftGantt的实例(Singleton)作为甘特图图片文件的生成器,将需要显示的项目信息生成图片,显示给前端用户的浏览器。如:

static GanttChart gantt = new GanttChart();


将项目信息添加到Model中:

GanttModel model = new GanttModel();
...


将model指派给静态的GanttChart实例:

gantt.setModel(model);


指定路径,生成图片:

String filePath = "...";
gantt.generateImageFile(filePath);


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

请注意,SwiftGantt 不是线程安全的,请在GanttChart上同步这些方法的调用。如:

synchronized(gantt){
    gantt.setModel(model);
    gantt.generateImage(filePath);
}