学习JFreeChart类,编写了柱状图、饼图、甘特图,可以在DWZ中显示

原创 2012年08月09日 16:10:28

首先需要一个jar包:jfreechart-1.0.9.jar .可以若不是maven项目你可以导包,若是在pom.xml中写入这个

<dependency>

            <groupId>jfree</groupId>
            <artifactId>jfreechart</artifactId>
            <version>1.0.9</version>

        </dependency>


 

然后:

jsp:

<BODY>
    <img src="<c:out value="${graphURL}" />" width=600 height=350 border=0
        usemap="<c:out value="${filename}" />">

</BODY>


 


controller层为:

/**
 * 饼图、柱状图等的显示控制器
 * 
 * @author sunny
 */
@Controller
@RequestMapping("/Chart")
public class ChartController extends ControllerFather {
    /*****************************************************
     * 饼状图开始
     */
    private  String CHART_PATH = "E:/jfreechart/";//用于保存图片路径
    private String charName="pieChart.png";

    @RequestMapping(value = "/pieChart")
    public ModelAndView pieChart(Model model, HttpServletRequest request,
            HttpServletResponse response) {
        //用于显示在饼图中的数据集
        String[] keys = { "史亚妮", "李冰", "nini", "李开复", "马云", "其它" };
          double[] data = { 42.2, 15, 13.5, 15.8, 8.2, 9.8 };
    
          PieDataset pd = getPieDataSet(keys, data);//获取饼状图 数据集
                // 利用工厂类来创建3D饼图
        JFreeChart chart =ChartFactory.createPieChart3D("2011学生竞争力排名报告", pd, true, true, false);
         // 使下说明标签字体清晰,去锯齿类似于
          // chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);的效果
          chart.setTextAntiAlias(false);
          // 图片背景色
          chart.setBackgroundPaint(Color.white);

          // 设置图标题的字体重新设置title(否组有些版本Title会出现乱码)
          chart.getTitle().setFont((new Font("隶书", Font.CENTER_BASELINE, 20)));

          // 设置图例(Legend)上的文字(//底部的字体)
          chart.getLegend().setItemFont(new Font("隶书", Font.CENTER_BASELINE, 15));

          PiePlot3D plot = (PiePlot3D) chart.getPlot();
          // 图片中显示百分比:默认方式

          // 指定饼图轮廓线的颜色
          plot.setBaseSectionOutlinePaint(Color.BLACK);
          plot.setBaseSectionPaint(Color.BLACK);

          // 设置无数据时的信息
          plot.setNoDataMessage("无对应的数据,请重新查询。");

          // 设置无数据时的信息显示颜色
          plot.setNoDataMessagePaint(Color.red);

          // 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位
          plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})", NumberFormat.getNumberInstance(), new DecimalFormat("0.00%")));
          // 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例
          plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}({2})"));

          plot.setLabelFont(new Font("隶书", Font.TRUETYPE_FONT, 12));

          // 指定图片的透明度(0.0-1.0)
          plot.setForegroundAlpha(0.65f);
          // 指定显示的饼图上圆形(false)还椭圆形(true)
          plot.setCircular(false, true);

          // 设置第一个 饼块section 的开始位置,默认是12点钟方向
          plot.setStartAngle(90);

          // 设置分饼颜色(不设置它会自己设置)
          // plot.setSectionPaint(pieKeys[0], new Color(244, 194, 144));
          // plot.setSectionPaint(pieKeys[1], new Color(144, 233, 144));

          // 把饼图生成图片
          FileOutputStream fos_jpg = null;
          try {
             CHART_PATH="E:/winskysoft文档/CRM/CRM/src/main/webapp/images/";
              System.out.println("所在路径:"+CHART_PATH);
              // 文件夹不存在则创建
           isChartPathExist(CHART_PATH);
           String chartName = CHART_PATH + charName;
           fos_jpg = new FileOutputStream(chartName);
           // 高宽的设置影响椭圆饼图的形状
           ChartUtilities.writeChartAsPNG(fos_jpg, chart, 700, 400);
           System.out.println(fos_jpg);
         
          } catch (Exception e) {
           e.printStackTrace();
           return null;
          } finally {
           try {
            fos_jpg.close();//http://1wangxiaobo@163.com
            System.out.println("create pie-chart.");
           } catch (Exception e) {
            e.printStackTrace();
           }
          }

         

        //传到页面上的路径
        String filename = null;
        try {
            filename = ServletUtilities.saveChartAsPNG(chart, 600, 350, null,
                    null);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        String graphURL = request.getContextPath() + "/DisplayChart?filename="
                + filename;
        
        ModelAndView view = new ModelAndView("pieChart.jsp");//这里的jsp地址就是上面那个jsp名字。

        view.addObject("filename", filename);
        view.addObject("graphURL", graphURL);
        return view;
    }

    // 数值设置
/**
 * 饼状图 数据集
 */
public static PieDataset getPieDataSet(String[] keys, double[] data) {

 if (keys != null && data != null) {
  if (keys.length == data.length) {
   DefaultPieDataset dataset = new DefaultPieDataset();
   for (int i = 0; i < keys.length; i++) {
    dataset.setValue(keys[i], data[i]);
   }
   return dataset;
  }

 }
 return null;
}

/**
 * 判断文件夹是否存在,如果不存在则新建
 *
 * @param chartPath
 */
private static void isChartPathExist(String chartPath) {
 File file = new File(chartPath);
 if (!file.exists()) {
  file.mkdirs();
 }
}
/***************************************
 * 饼状图结束
 */

/****************************************************/
/**********甘特图开始8**********************************/

@RequestMapping(value = "/ganttChart")
public ModelAndView chart(Model model, HttpServletRequest request,
        HttpServletResponse response) {
    //甘特数据集
    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("E:/jfreechart/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();
        }
    }




    //传路径
    String filename = null;
    try {
        filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null,
                null);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    String graphURL = request.getContextPath() + "/DisplayChart?filename="
            + filename;

    ModelAndView view = new ModelAndView("ganttChart.jsp");

    view.addObject("filename", filename);
    view.addObject("graphURL", graphURL);
    return view;
}



/** *//**
 * 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;

}

/** 
 *
 * @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;
}

/****************************甘特图结束****************************/

}



这里有饼图和甘特图

柱状图类似,就不一一列举啦


相关文章推荐

dwz....

[置顶]J-Hi Lookup实现级联下拉的效果 描述:在DWZ版中lookup的处理机制与经典的完全不同,对于lookup有两种展现形式,一种是通过点击lookup图标弹出对话框后带回选中的值...

玩转DWZ (一)---项目中怎么使用dwz

最近一直在找一个完全开源的web客户端框架,看到了dwz,虽然不知道到底怎么样,但还是支持国产,先学习一下。这篇文章先说一下怎么在项目里使用dwz框架。 首先先下载dwz:https://code....

mapreduce框架详解

转自:http://www.cnblogs.com/sharpxiajun/p/3151395.html 开始聊mapreduce,mapreduce是hadoop的计算框架,我学hadoop是...
  • Erli11
  • Erli11
  • 2014年03月17日 17:50
  • 6127

java.lang.NoClassDefFoundError org.apache.log4j.spi.ThrowableInformation

1. Problem Description: Our application has been working normal in past months, however, after our ...

S2SH jFreeChart 制作柱状图和饼图

除了ssh必须的包之外,还需要导入以下3个包: jfreechart-1.0.14.jar; jcommon-1.0.17.jar; struts2-jfreechart-plugin-2.2.3.1...

jfreechart 曲线图 3d饼图 3d柱状图

  • 2008年12月28日 04:39
  • 1.37MB
  • 下载

【JSP中使用Jfreechart绘制折线、饼图和柱状图】

//实现饼状图 DefaultPieDataset data = new DefaultPieDataset(); data.setValue("六月", 500); data.setValue...

JFreechart 制作柱状图、饼图、折线图、仪表图等统计图的使用方法

最近,项目里面要用到仪表显示。所以拿过来学习一下JFreechart,其实效果还蛮不错的。本来想用Flash做个交互性的,可是由于时间选择了JFreechart。 下面简要介绍一下JFreechar...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学习JFreeChart类,编写了柱状图、饼图、甘特图,可以在DWZ中显示
举报原因:
原因补充:

(最多只允许输入30个字)