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

来源:互联网 发布:2017高仿耐克淘宝店 编辑:程序博客网 时间:2024/05/01 03:48

首先需要一个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;}/****************************甘特图结束****************************/}



这里有饼图和甘特图

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


原创粉丝点击