JFreeChart畫甘特圖實例

jopen 11年前發布 | 53K 次閱讀 JFreeChart 圖表/報表制作

因為開發的需要,今天用JFreeChart畫了甘特圖,以下是測試用的代碼, 分享一下:

package net.task.core.chart;
import java.awt.Font;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.data.category.IntervalCategoryDataset;
import org.jfree.data.gantt.Task;
import org.jfree.data.gantt.TaskSeries;
import org.jfree.data.gantt.TaskSeriesCollection;
/**

  • @author Danny *
  • TODO To change the template for this generated type comment go to
  • Window - Preferences - Java - Code Style - Code Templates */ public class GanttChart{ public static void main(String[] args) {

       IntervalCategoryDataset dataset = createSampleDataset();
       JFreeChart chart = ChartFactory.createGanttChart("任務管理系統",
           "任務各階段詳細實施計劃",
           "任務周期",
           dataset,
               false,
               false,
               false);
    
       CategoryPlot plot=chart.getCategoryPlot();
    
       chart.getTitle().setFont(new Font("新宋體",Font.BOLD,20));
       CategoryAxis domainAxis=plot.getDomainAxis();
    

    //水平底部列表 domainAxis.setLabelFont(new Font("新宋體",Font.BOLD,14)); //水平底部標題 domainAxis.setTickLabelFont(new Font("新宋體",Font.BOLD,12)); //垂直標題

       ValueAxis rangeAxis = plot.getRangeAxis();
       rangeAxis.setLabelFont(new Font("新宋體",Font.BOLD,16));
       //用來控制時間軸的顯示,防止亂碼
       DateAxis da = (DateAxis)plot.getRangeAxis(0);
       da.setDateFormatOverride(new SimpleDateFormat("yyyy-MM-dd"));
    
       FileOutputStream fop = null;
       try{
           System.out.println("Danny>> begin.");
           fop = new FileOutputStream("D:gantt.jpg");
           ChartUtilities.writeChartAsJPEG(fop,1f, chart, 800, 600,null);
           System.out.println("Danny>> end..");
           System.out.println("Danny>> successful...");
       } catch (IOException e){
           e.printStackTrace();
       } finally{
           try{
               fop.close();
           } catch (IOException e){
               e.printStackTrace();
           }
       }
    

    }

    / *//

    * Utility method for creating Date objects.
    *
    * @param day 日
    * @param month 月
    * @param year 年
    *
    * @return a date.
    */
    

    private static Date date(final int day, final int month, final int year){

       final Calendar calendar = Calendar.getInstance();
       calendar.set(year, month, day);
    
       final Date result = calendar.getTime();
       return result;
    

    } /**

    *
    * @return The dataset.
    */
    

    private static IntervalCategoryDataset createSampleDataset() {

       final TaskSeries s1 = new TaskSeries("SCHEDULE");
    
       final Task t1 = new Task("任務1", date(1, Calendar.JANUARY, 2001), date(5, Calendar.APRIL, 2001));
       t1.setPercentComplete(0.8);
       s1.add(t1);
       // 創建一個任務并插入兩個子任務
       final Task t3 = new Task("任務2", date(10, Calendar.APRIL, 2001), date(5, Calendar.MAY, 2001));
       final Task st31 = new Task("需求1", date(10, Calendar.APRIL, 2001), date(25, Calendar.APRIL, 2001));
       st31.setPercentComplete(0.50);
       final Task st32 = new Task("需求2", date(1, Calendar.MAY, 2001), date(5, Calendar.MAY, 2001));
       st32.setPercentComplete(1.0);
       t3.addSubtask(st31);
       t3.addSubtask(st32);
       s1.add(t3);
       final Task t5 = new Task( "任務3", date(2, Calendar.JUNE, 2001), date(2, Calendar.JUNE, 2001));
       s1.add(t5);
    
       final Task t6 = new Task("任務4", date(3, Calendar.MARCH, 2001), date(31, Calendar.JULY, 2001));
       t6.setPercentComplete(0.60);
    
       s1.add(t6);
    
       final Task t8 = new Task("任務結束", date(10, Calendar.AUGUST, 2001), date(10, Calendar.AUGUST, 2001));
       t8.setPercentComplete(0.0);
       s1.add(t8);
    
       final Task t9 = new Task("任務試用", date(12, Calendar.AUGUST, 2001), date(12, Calendar.SEPTEMBER, 2001));
       t9.setPercentComplete(0.0);
       s1.add(t9);
    
       final Task t10 = new Task("任務測試", date(13, Calendar.SEPTEMBER, 2001), date(31, Calendar.OCTOBER, 2001));
       t10.setPercentComplete(0.2);
       s1.add(t10);
    
       final Task t12 = new Task("全部結束", date(28, Calendar.NOVEMBER, 2001), date(30, Calendar.NOVEMBER, 2001));
       t12.setPercentComplete(0.0);
       s1.add(t12);
       final TaskSeriesCollection collection = new TaskSeriesCollection();
       collection.add(s1);
       return collection;
    

    }

} </pre>

效果圖:

102344pqozpdpda1dqn113_jpg_thumb.jpg
相關API:
GanttBarRenderer(IntervalBarRenderer)類:
void setCompletePaint(Paint paint)     完成進度顏色
void setIncompletePaint(Paint paint)     未完成進度顏色
void setStartPercent(double percent)     設置進度條在整條中的起始位置(0.0~1.0)
void setEndPercent(double percent)     設置進度條在整條中的結束位置(0.0~1.0)

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!