1、JSP中生成数据统计图表的源码JSP中生成数据统计图表的源码马建成日常我们在做一个项目的时候都会遇到这样的需求,根据用户在eb页面上向服务器提交的数据,根据条件从数据库中取出相应的一系列数据后,要能在web浏览器上以图表的形式显示结果,形成直观的对比,于是就要我们实现饼图、柱图、折线图的动态生成。我在学习JSP的过程中使用了JFreeChart这么一个东西。JFreeChart 是一个开源的 JAVA 项目,它主要用来开发各种各样的图表,这些图表包括:饼图、柱状图 ( 普通柱状图以及堆栈柱状图 ) 、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。在这些不同式样的图表上可以满足目前商业
2、系统的要求。JFreeChart 是一种基于JAVA语言的图表开发技术。JFreeChart可用于Servlet、JSP、Applet、Java Appication环境中,通过JDBC可动态显示任何数据库数据。在使用和学习的过程中获得了一些测试心得,同时展示几个例子同大家共同交流学习。为方便简化实例,我门所有的数据使用静态的数据测试。一、服务配制首先我们必须有一个Jsp能够运行的环境,本此采用的开发环境是:Tomcat5.5+Jdk1.5。在要发布W程序目录的WEB-INFlib下拷入jfreechart-1.0.1.jar的jar包(根据的版本的不同文件名会有差异),对WEB-INFWeb
3、.xml做如下配置。 DisplayChart org.jfree.chart.servlet.DisplayChart DisplayChart /servlet/DisplayChart在做好以上工作后我们可以动手做第一个实例了。二、需要使用的JavaBean在Jsp页面生成之前,需要写一个JavaBean,当然也可以直接将代码写在Jsp文件里。源码如下:/* * Title 统计分析实例 * author: * * Copyright: Copyright (c) 2008 */package com.test.chart;import java.awt.BasicStroke;impo
4、rt java.awt.Color;import java.awt.Font;import java.awt.Polygon;import java.awt.Shape;import java.awt.geom.Rectangle2D;import java.io.*;import javax.servlet.http.HttpSession;import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartRenderingInfo;import org.jfree.chart.ChartUtilities;import org
5、.jfree.chart.JFreeChart;import org.jfree.chart.axis.AxisLocation;import org.jfree.chart.axis.NumberAxis;import org.jfree.chart.entity.StandardEntityCollection;import org.jfree.chart.labels.ItemLabelPosition;import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;import org.jfree.chart.plot.
6、CategoryPlot;import org.jfree.chart.plot.DefaultDrawingSupplier;import org.jfree.chart.plot.DrawingSupplier;import org.jfree.chart.plot.PiePlot3D;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.renderer.category.BarRenderer3D;import org.jfree.chart.renderer.category.LineAndShapeRe
7、nderer;import org.jfree.chart.servlet.ServletUtilities;import org.jfree.chart.title.TextTitle;import org.jfree.data.category.*;import org.jfree.data.general.DefaultPieDataset;import org.jfree.chart.labels.StandardPieToolTipGenerator;public class TestChart /* * 人员构成的分析饼图 * return */ public String Ryg
8、cPieChart(HttpSession session,PrintWriter pw,int picwidth,int picheight) String filename = ; try DefaultPieDataset dataset=new DefaultPieDataset(); /初始化数据 dataset.setValue(接触网工,400); dataset.setValue(变电工,300); dataset.setValue(电力工,200); dataset.setValue(其它,100); PiePlot3D plot = new PiePlot3D(datase
9、t);/生成一个3D饼图 /plot.setURLGenerator(new StandardPieURLGenerator(DegreedView.jsp);/设定图片链接 JFreeChart chart = new JFreeChart(,JFreeChart.DEFAULT_TITLE_FONT, plot, true); chart.setBackgroundPaint(java.awt.Color.white);/可选,设置图片背景色 chart.setTitle(单位人员构成统计);/可选,设置图片标题 plot.setToolTipGenerator(new StandardP
10、ieToolTipGenerator(); StandardEntityCollection sec = new StandardEntityCollection(); ChartRenderingInfo info = new ChartRenderingInfo(sec); /picwidth是图片长度,picheight是图片高度 filename = ServletUtilities.saveChartAsPNG(chart,picwidth,picheight,info,session); ChartUtilities.writeImageMap(pw,filename,info,f
11、alse); pw.flush(); catch(Exception e) filename = error.png; return filename; /* * 人员车间分布的分析柱图 * return */ public String RyfbBarChart(HttpSession session,PrintWriter pw, int picwidth,int picheight) String title = 车间人员分布分析图; String htitle = 车间名称; String vtitle = 人员数量; String filename = null; try /数据初始
12、化 DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue( 150 , 接触网工 , 车间1 ); dataset.addValue( 530 , 变电工 , 车间1 ); dataset.addValue( 160 , 电力工 , 车间1 ); dataset.addValue( 120 , 接触网工 , 车间2 ); dataset.addValue( 230 , 变电工 , 车间2 ); dataset.addValue( 360 , 电力工 , 车间2 ); dataset.add
13、Value( 600 , 接触网工 , 车间3 ); dataset.addValue( 430 , 变电工 , 车间3 ); dataset.addValue( 560 , 电力工 , 车间3 ); JFreeChart chart = ChartFactory.createBarChart3D(title,htitle,vtitle, dataset,PlotOrientation.VERTICAL,true,true,true); /title标题,htitle水平标题,vtitle垂直标题 chart.setBackgroundPaint(java.awt.Color.white);/
14、可选,设置图片背景色 Font font = new Font(黑体,Font.CENTER_BASELINE,20); /设置图片标题的字体和大小 TextTitle _title = new TextTitle(title); _title.setFont(font); chart.setTitle(_title); CategoryPlot plot = chart.getCategoryPlot(); BarRenderer3D renderer = new BarRenderer3D(); plot.setRangeAxisLocation(AxisLocation.BOTTOM_O
15、R_LEFT); final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); rangeAxis.setRange(0.0, 1000.0);/垂直坐标的数据上下限 rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits(); renderer.setSeriesPaint(0, Color.GREEN); /设置每种结果代表的柱的 Outline 颜色 renderer.setSeriesOutlinePaint(0, Color.BLACK); /设置
16、每个地区所包含的平行柱的之间距离 renderer.setItemMargin(0.1); /显示每个柱的数值,并修改该数值的字体属性 renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator(); renderer.setItemLabelFont(new Font(黑体,Font.PLAIN,12); renderer.setItemLabelsVisible(true); ItemLabelPosition itemlabelposition = new ItemLabelPosition(); rende
17、rer.setPositiveItemLabelPosition(itemlabelposition); plot.setRenderer(renderer); plot.setForegroundAlpha(0.4f);/设置柱的透明度 /把生成的图片放到临时目录 ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection(); filename = ServletUtilities.saveChartAsPNG(chart,picwidth,picheight,info,session); Ch
18、artUtilities.writeImageMap(pw,filename,info,true); pw.flush(); catch(Exception e) filename = error.png; return filename; /* * 上半年生产任务分析图 * return */ public String RyqsSLineChart(HttpSession session,PrintWriter pw,int picwidth,int picheight) String title = 上半年生产任务分析图; String htitle = 月份; String vtitl
19、e = 生产数量; String filename = null; try DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.setValue(50,变电所,一月); dataset.setValue(70,变电所,二月); dataset.setValue(60,变电所,三月); dataset.setValue(80,变电所,四月); dataset.setValue(55,变电所,五月); dataset.setValue(50,变电所,六月); dataset.setValue(70,接触网,一
20、月); dataset.setValue(90,接触网,二月); dataset.setValue(65,接触网,三月); dataset.setValue(100,接触网,四月); dataset.setValue(60,接触网,五月); dataset.setValue(80,接触网,六月); JFreeChart chart = ChartFactory.createLineChart(title,htitle,vtitle, dataset,PlotOrientation.VERTICAL,true,true,true); chart.setBackgroundPaint(java.a
21、wt.Color.white);/可选,设置图片背景色 Font font = new Font(黑体,Font.CENTER_BASELINE,20); /设置图片标题的字体和大小 TextTitle _title = new TextTitle(title); _title.setFont(font); chart.setTitle(_title); final Shape shapes = new Shape3; int xpoints; int ypoints; xpoints = new int -3, 3, -3; ypoints = new int -3, 0, 3; shape
22、s0 = new Polygon(xpoints, ypoints, 3); shapes1 = new Rectangle2D.Double(-2, -3, 3, 6); xpoints = new int -3, 3, 3; ypoints = new int 0, -3, 3; shapes2 = new Polygon(xpoints, ypoints, 3); final DrawingSupplier supplier = new DefaultDrawingSupplier( DefaultDrawingSupplier.DEFAULT_PAINT_SEQUENCE, Defau
23、ltDrawingSupplier.DEFAULT_OUTLINE_PAINT_SEQUENCE, DefaultDrawingSupplier.DEFAULT_STROKE_SEQUENCE, DefaultDrawingSupplier.DEFAULT_OUTLINE_STROKE_SEQUENCE, shapes ); final CategoryPlot plot = chart.getCategoryPlot(); plot.setDrawingSupplier(supplier); plot.getRenderer().setSeriesStroke( 0, new BasicSt
24、roke( 2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 1.0f, new float 10.0f, 6.0f, 0.0f ) ); plot.getRenderer().setSeriesStroke( 1, new BasicStroke( 2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 1.0f, new float 6.0f, 6.0f, 0.0f ) ); plot.getRenderer().setSeriesStroke( 2, new BasicStroke(
25、 2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 1.0f, new float 2.0f, 6.0f, 0.0f ) ); final LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer(); /renderer.setDrawShapes(true); renderer.setItemLabelsVisible(true); /renderer.setLabelGenerator(new StandardCategoryLabelGenera
26、tor(); final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits(); rangeAxis.setAutoRangeIncludesZero(false); rangeAxis.setUpperMargin(0.12); /显示每个柱的数值,并修改该数值的字体属性 renderer.setItemLabelGenerator(new StandardCategoryItemLabelGener
27、ator(); renderer.setItemLabelFont(new Font(黑体,Font.PLAIN,12); renderer.setItemLabelsVisible(true); ItemLabelPosition itemlabelposition = new ItemLabelPosition(); renderer.setPositiveItemLabelPosition(itemlabelposition); plot.setRenderer(renderer); /把生成的图片放到临时目录 ChartRenderingInfo info = new ChartRen
28、deringInfo(new StandardEntityCollection(); filename = ServletUtilities.saveChartAsPNG(chart,picwidth,picheight,info,session); ChartUtilities.writeImageMap(pw,filename,info,true); pw.flush(); catch (Exception e) filename = error.png; return filename; 三、Jsp页面上一步写好了JavaBean,在jsp页面可以这样使用,见源码: % TestChart webchart = new TestChart(); String filename,graphURL; /*饼图 filename = webchart.RygcP
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1