我写好了一个启发式算法,结果已经出来,但是我不会做甘特图,网上有一些jfreechart的例子,都是柱状图和饼状图,没有甘特图的例子,希望哪位高手指点一下,不用jfreechart也行,只要是用java来写就好
谢谢了用于生成甘特图的数据如下在机床1上加工的是
工序4使用机床1和刀具3加工,开始时间是0.0加工时间是6.0完成时间是6.0
工序10使用机床1和刀具3加工,开始时间是6.0加工时间是2.0完成时间是8.0
工序11使用备选工艺21在机床1和刀具3加工,开始时间是8.0加工时间是4.0完成时间是12.0
工序12使用备选工艺23在机床1和刀具2加工,开始时间是12.0加工时间是5.0完成时间是17.0在机床2上加工的是工序1使用机床2和刀具2加工,开始时间是0.0加工时间是4.0完成时间是4.0
工序2使用备选工艺3在机床2和刀具2加工,开始时间是4.0加工时间是6.0完成时间是10.0
工序8使用备选工艺16在机床2和刀具1加工,开始时间是10.0加工时间是5.0完成时间是15.0
工序7使用备选工艺14在机床2和刀具2加工,开始时间是17.0加工时间是4.0完成时间是21.0在机床3上加工的是工序9使用机床3和刀具1加工,开始时间是0.0加工时间是6.0完成时间是6.0
工序5使用备选工艺9在机床3和刀具1加工,开始时间是6.0加工时间是4.0完成时间是10.0
工序3使用机床3和刀具2加工,开始时间是10.0加工时间是2.0完成时间是12.0
工序6使用机床3和刀具1加工,开始时间是12.0加工时间是3.0完成时间是15.0

解决方案 »

  1.   

    import java.io.FileOutputStream;
     import java.io.IOException;
     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.data.category.IntervalCategoryDataset;
     import org.jfree.data.gantt.Task;
     import org.jfree.data.gantt.TaskSeries;
     import org.jfree.data.gantt.TaskSeriesCollection;
     
     /**
      * @author sorunxian
      *
      * TODO To change the template for this generated type comment go to
      * Window - Preferences - Java - Code Style - Code Templates
      */
     public class GanttTest {
     
         public static void main(String[] args) {
             IntervalCategoryDataset dataset = createSampleDataset();
             JFreeChart jfc = ChartFactory.createGanttChart("项目管理系统", "项目各阶段详细实施计划", "项目周期", dataset,
                      false, false, false);
             
             FileOutputStream fop = null;
             try {
                 System.out.println("----->begin!!");
                 fop = new FileOutputStream("D:\\gantt.jpg");
                 ChartUtilities.writeChartAsJPEG(fop,1f, jfc, 800, 600,null);
                 System.out.println("----->successful!!");
             } catch (IOException e) {
                 e.printStackTrace();
             } finally {
                 try {
                     fop.close();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
             }
         }
         
         /**
          * Utility method for creating <code>Date</code> 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;
     
         }
     
         /**
          * Creates a sample dataset for a Gantt chart, using sub-tasks.  In general, you won't 
          * hard-code the dataset in this way - it's done here so that the demo is self-contained.
          *
          * @return The dataset.
          */
         private static IntervalCategoryDataset createSampleDataset() {
     
             final TaskSeries s1 = new TaskSeries("日程表");
             
             final Task t1 = new Task(
                 "项目立项", date(1, Calendar.APRIL, 2001), date(5, Calendar.APRIL, 2001)
             );
             t1.setPercentComplete(1.00);
             s1.add(t1);
             
             final Task t2 = new Task(
                 "项目启动", date(9, Calendar.APRIL, 2001), date(9, Calendar.APRIL, 2001)
             );
             t2.setPercentComplete(1.00);
             s1.add(t2);
     
             // 创建一个任务并插入两个子任务
             final Task t3 = new Task(
                 "需求分析", 
                 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(1.0);
             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 t4 = new Task(
                 "基本设计", 
                 date(6, Calendar.MAY, 2001), date(30, Calendar.MAY, 2001)
             );
             final Task st41 = new Task(
                  "设计1", 
                  date(6, Calendar.MAY, 2001), date(10, Calendar.MAY, 2001)
             );
             st41.setPercentComplete(1.0);
             final Task st42 = new Task(
                 "设计2", 
                 date(15, Calendar.MAY, 2001), date(20, Calendar.MAY, 2001)
             );
             st42.setPercentComplete(1.0);
             final Task st43 = new Task(
                 "设计3", 
                 date(23, Calendar.MAY, 2001), date(30, Calendar.MAY, 2001)
             );
             st43.setPercentComplete(0.50);
             t4.addSubtask(st41);
             t4.addSubtask(st42);
             t4.addSubtask(st43);
             s1.add(t4);
     
             final Task t5 = new Task(
                 "设计结束", date(2, Calendar.JUNE, 2001), date(2, Calendar.JUNE, 2001)
             ); 
             s1.add(t5);
                             
             final Task t6 = new Task(
                 "实现", date(3, Calendar.JUNE, 2001), date(31, Calendar.JULY, 2001)
             );
             t6.setPercentComplete(0.60);
             
             s1.add(t6);
             
             final Task t7 = new Task(
                 "设计Review", date(1, Calendar.AUGUST, 2001), date(8, Calendar.AUGUST, 2001)
             );
             t7.setPercentComplete(0.0);
             s1.add(t7);
             
             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.0);
             s1.add(t10);
             
             final Task t11 = new Task(
                 "最终实现", 
                 date(1, Calendar.NOVEMBER, 2001), date(15, Calendar.NOVEMBER, 2001)
             );
             t11.setPercentComplete(0.0);
             s1.add(t11);
             
             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;
         }
         
     }
      

  2.   

    以上是在网上搜到的 我自己也按照上面的做法画了gantt图
     可是存在一个问题不会解决  
     看了楼主的数据应该也存在和我类似的问题(开始时间是6.0加工时间是2.0完成时间是8.0)这种时间轴不是date类型的 不知道怎么转换
      

  3.   

    我知道用JFreeChart比较方便,但是还是不会啊
    谁会啊,帮个忙,谢谢
      

  4.   

    不知道SwiftGantt能不能解决你的问题,你可以试试看
      

  5.   

    向日葵 Gantt 是当前B/S 系统开发中最先进的甘特图解决方案,它采用与Google maps相同的技术AJAX,实现了完全与Ms Project 甘特图一致的功能,可广泛应用于 ERP 系统、MES系统、项目管理系统或其它的资源时间相关领域。 技术优势: 
        向日葵甘特组件完全采用JS实现,与服务器端开发语言无关,可在任何服务器平台上运行; 
        可轻松地与现有系统整合; 
        减轻服务器和带宽的负担,节约空间和带宽租用成本; 
        客户端无需安装任何插件即可运行; 
        支持大多数主流浏览器,如:IE,FireFox,Opera等; 
        用户基本操作无需与服务器交互,给用户带来流畅而友好的体验。 向日葵Gantt图界面(版本1.1)
    http://www.51diaodu.cn/blog/attachments/month_0805/zwo3_xrk.gifMS Project 2003中对应界面如下
    http://www.51diaodu.cn/blog/attachments/month_0805/tqix_project.gif
        谢谢您对“向日葵甘特”的关注,如果您想了解更多相关信息,欢迎光临 www.51diaodu.cn  。