zoukankan      html  css  js  c++  java
  • JFreeChart开发_用JFreeChart增强JSP报表的用户体验

    项目结构:

           JFreeChart是一组功能强大、灵活易用的Java绘图API,使用它可以生成多种通用性的报表,

    包括柱状图、饼图、曲线图、甘特图等。它能够用在Swing和Web等中制作自定义的图表或报表,

    并且得到广泛的应用。本文将通过引领读者学习在JFreeChart中饼图、柱状图和曲线图的进阶

    应用,来达到熟练使用JFreeChart的目的。

    下载JFreeChart:

    JFreeChart是开放源代码的免费软件,但是它的支持文档需要付费才能得到。

    其下载地址为:http://sourceforge.net/project/showfiles.php?group_id=15494

    说明:1)source目录:为jfreechart的源码目录;

            2)lib目录:为包目录,我们需要关注的包为jfreechart-1.0.6.jar、gnujaxp.jar和jcommon-1.0.10.jar这三个包;

            3)根目录下的jfreechart-1.0.6-demo.jar是例子程序,大家双击后可看到其中有很多例子的运行结果。

    ==================================================================

        接下来就进入开发阶段了

    ==================================================================

    /jsp_response_bufferedImage/WebRoot/WEB-INF/web.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
     5     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
     6 
     7     <servlet>
     8         <servlet-name>DisplayChart</servlet-name>
     9         <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
    10     </servlet>
    11     <servlet-mapping>
    12         <servlet-name>DisplayChart</servlet-name>
    13         <url-pattern>/DisplayChart</url-pattern>
    14     </servlet-mapping>
    15 
    16 
    17     <welcome-file-list>
    18         <welcome-file>index.jsp</welcome-file>
    19     </welcome-file-list>
    20 </web-app>

    /jsp_response_bufferedImage/WebRoot/index.jsp

     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
     2 <%
     3 String path = request.getContextPath();
     4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
     5 %>
     6 
     7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     8 <html>
     9   <head>
    10     <base href="<%=basePath%>">
    11     
    12     <title>My JSP 'index.jsp' starting page</title>
    13     <meta http-equiv="pragma" content="no-cache">
    14     <meta http-equiv="cache-control" content="no-cache">
    15     <meta http-equiv="expires" content="0">    
    16     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    17     <meta http-equiv="description" content="This is my page">
    18     <!--
    19     <link rel="stylesheet" type="text/css" href="styles.css">
    20     -->
    21   </head>
    22   
    23   <body>
    24     <!-- 这里可以调整转向的页面:simple.jsp,simple2.jsp,simple3.jsp,simple4.jsp,simple5.jsp -->
    25     <jsp:forward page="simple5.jsp"></jsp:forward>
    26   </body>
    27 </html>

    /jsp_response_bufferedImage/WebRoot/simple.jsp

     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
     2 <%@ page import="org.jfree.chart.ChartFactory" %>
     3 <%@ page import="org.jfree.chart.JFreeChart" %>
     4 <%@ page import="org.jfree.chart.plot.PlotOrientation" %>
     5 <%@ page import="org.jfree.chart.servlet.ServletUtilities" %>
     6 <%@ page import="org.jfree.data.category.DefaultCategoryDataset" %>
     7 <%
     8 String path = request.getContextPath();
     9 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    10 %>
    11 
    12 <%
    13     DefaultCategoryDataset dataset = new DefaultCategoryDataset();
    14     dataset.addValue(610, "Guangzhou", "pork");
    15     dataset.addValue(220, "Guangzhou", "beaf");
    16     dataset.addValue(530, "Guangzhou", "chicken");
    17     dataset.addValue(340, "Guangzhou", "fish");
    18     JFreeChart chart = ChartFactory.createBarChart3D("Meat sales statistics figure", "meat",
    19             "Sales Volume", dataset, PlotOrientation.VERTICAL, false, false,
    20             false);
    21     String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300,
    22             null, session);
    23     String graphURL = request.getContextPath()
    24             + "/DisplayChart?filename=" + filename;
    25     out.println(filename);
    26     out.println("------------------");
    27     out.println(graphURL);    
    28 %>
    29 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    30 <html>
    31   <head>
    32     <base href="<%=basePath%>">
    33     
    34     <title>My JSP 'index.jsp' starting page</title>
    35     <meta http-equiv="pragma" content="no-cache">
    36     <meta http-equiv="cache-control" content="no-cache">
    37     <meta http-equiv="expires" content="0">    
    38     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    39     <meta http-equiv="description" content="This is my page">
    40   </head>
    41   
    42   <body>
    43     <img src="<%=graphURL%>" width=500 height=300 border=0
    44     usemap="#<%= filename %>">
    45   </body>
    46 </html>

    在浏览器地址栏输入《我服务器的端口号是1000》:http://localhost:1000/jsp_response_bufferedImage/
    运行效果:

    /jsp_response_bufferedImage/WebRoot/simple2.jsp

     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
     2 <%@ page
     3     import="org.jfree.chart.ChartFactory,org.jfree.chart.JFreeChart,org.jfree.chart.plot.PlotOrientation,org.jfree.chart.servlet.ServletUtilities,org.jfree.data.category.CategoryDataset,org.jfree.data.general.DatasetUtilities"%>
     4 
     5 <%
     6     String path = request.getContextPath();
     7     String basePath = request.getScheme() + "://"
     8             + request.getServerName() + ":" + request.getServerPort()
     9             + path + "/";
    10 %>
    11 
    12 <%
    13     double[][] data = new double[][] { { 1310 }, { 720 }, { 1130 },
    14             { 440 } };
    15     String[] rowKeys = { "pork", "beaf", "chicken", "fish" };
    16     String[] columnKeys = { "" };
    17     CategoryDataset dataset = DatasetUtilities.createCategoryDataset(
    18             rowKeys, columnKeys, data);
    19     JFreeChart chart = ChartFactory
    20             .createBarChart3D("Guangzhou meat sales statistics figure", "meat", "Sales Volume", dataset,
    21                     PlotOrientation.VERTICAL, true, false, false);
    22 
    23     String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300,
    24             null, session);
    25     String graphURL = request.getContextPath()
    26             + "/DisplayChart?filename=" + filename;
    27 %>
    28 
    29 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    30 <html>
    31     <head>
    32         <base href="<%=basePath%>">
    33 
    34         <title>My JSP 'index.jsp' starting page</title>
    35         <meta http-equiv="pragma" content="no-cache">
    36         <meta http-equiv="cache-control" content="no-cache">
    37         <meta http-equiv="expires" content="0">
    38         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    39         <meta http-equiv="description" content="This is my page">
    40     </head>
    41 
    42     <body>
    43         <img src="<%=graphURL%>" width=500 height=300 border=0
    44             usemap="#<%= filename %>">
    45     </body>
    46 </html>

    在浏览器地址栏输入《我服务器的端口号是1000》:http://localhost:1000/jsp_response_bufferedImage/
    运行效果:

    /jsp_response_bufferedImage/WebRoot/simple3.jsp

     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
     2 <%@ page
     3     import="org.jfree.chart.ChartFactory,org.jfree.chart.JFreeChart,org.jfree.chart.plot.PlotOrientation,org.jfree.chart.servlet.ServletUtilities,org.jfree.data.category.CategoryDataset,org.jfree.data.general.DatasetUtilities,org.jfree.chart.plot.*,org.jfree.chart.labels.*,org.jfree.chart.renderer.category.BarRenderer3D,java.awt.*,org.jfree.ui.*,org.jfree.chart.axis.AxisLocation"%>
     4 
     5 <%
     6     String path = request.getContextPath();
     7     String basePath = request.getScheme() + "://"
     8             + request.getServerName() + ":" + request.getServerPort()
     9             + path + "/";
    10 %>
    11 
    12 <%
    13     double[][] data = new double[][] { { 1310, 1220, 1110, 1000 },
    14             { 720, 700, 680, 640 }, { 1130, 1020, 980, 800 },
    15             { 440, 400, 360, 300 } };
    16 String[] rowKeys = { "pork", "beaf", "chicken", "fish" };
    17     String[] columnKeys = { "Guangzhou", "Shenzhen", "Dongguan", "Foshan" };
    18     CategoryDataset dataset = DatasetUtilities.createCategoryDataset(
    19             rowKeys, columnKeys, data);
    20 
    21     JFreeChart chart = ChartFactory.createBarChart3D("Meat sales statistics figure", "meat",
    22             "Sales Volume", dataset, PlotOrientation.VERTICAL, true, true, false);
    23 
    24     CategoryPlot plot = chart.getCategoryPlot();
    25     //设置网格背景颜色
    26     plot.setBackgroundPaint(Color.white);
    27     //设置网格竖线颜色
    28     plot.setDomainGridlinePaint(Color.pink);
    29     //设置网格横线颜色
    30     plot.setRangeGridlinePaint(Color.pink);
    31     //显示每个柱的数值,并修改该数值的字体属性
    32 
    33     BarRenderer3D renderer = new BarRenderer3D();
    34     renderer
    35             .setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
    36     renderer.setBaseItemLabelsVisible(true);
    37     //默认的数字显示在柱子中,通过如下两句可调整数字的显示
    38     //注意:此句很关键,若无此句,那数字的显示会被覆盖,给人数字没有显示出来的问题
    39     renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(
    40             ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
    41     renderer.setItemLabelAnchorOffset(10D);
    42     //设置每个地区所包含的平行柱的之间距离
    43     //renderer.setItemMargin(0.3);
    44     plot.setRenderer(renderer);
    45     //设置地区、销量的显示位置
    46     //将下方的“肉类”放到上方
    47     plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
    48     //将默认放在左边的“销量”放到右方
    49     plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
    50 
    51     String filename = ServletUtilities.saveChartAsPNG(chart, 700, 400,
    52             null, session);
    53     String graphURL = request.getContextPath()
    54             + "/DisplayChart?filename=" + filename;
    55 %>
    56 
    57 
    58 
    59 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    60 <html>
    61     <head>
    62         <base href="<%=basePath%>">
    63 
    64         <title>My JSP 'index.jsp' starting page</title>
    65         <meta http-equiv="pragma" content="no-cache">
    66         <meta http-equiv="cache-control" content="no-cache">
    67         <meta http-equiv="expires" content="0">
    68         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    69         <meta http-equiv="description" content="This is my page">
    70     </head>
    71 
    72     <body>
    73         <img src="<%=graphURL%>" width=700 height=400 border=0
    74             usemap="#<%= filename %>">
    75     </body>
    76 </html>

    在浏览器地址栏输入《我服务器的端口号是1000》:http://localhost:1000/jsp_response_bufferedImage/
    运行效果:

    /jsp_response_bufferedImage/WebRoot/simple4.jsp

     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
     2 <%@ page
     3     import="org.jfree.chart.*,org.jfree.chart.plot.PiePlot,org.jfree.data.general.DefaultPieDataset,org.jfree.chart.servlet.ServletUtilities,java.awt.*"%>
     4 
     5 <%
     6     String path = request.getContextPath();
     7     String basePath = request.getScheme() + "://"
     8             + request.getServerName() + ":" + request.getServerPort()
     9             + path + "/";
    10 %>
    11 
    12 <%
    13     //设置数据集
    14     DefaultPieDataset dataset = new DefaultPieDataset();
    15     dataset.setValue("Junior high school senior programmer", 0.55);
    16     dataset.setValue("Project Manager", 0.1);
    17     dataset.setValue("System analyst", 0.1);
    18     dataset.setValue("System analyst", 0.1);
    19     dataset.setValue("Other", 0.2);
    20 
    21     //通过工厂类生成JFreeChart对象
    22     //通过工厂类生成JFreeChart对象
    23     JFreeChart chart = ChartFactory.createPieChart3D("The IT industry professional distribution",
    24             dataset, true, false, false);
    25     PiePlot pieplot = (PiePlot) chart.getPlot();
    26     pieplot.setLabelFont(new Font("宋体", 0, 12));
    27     //没有数据的时候显示的内容
    28     pieplot.setNoDataMessage("No data to show");
    29     pieplot.setCircular(false);
    30 
    31     pieplot.setLabelGap(0.02D);
    32 
    33     String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300,
    34             null, session);
    35     String graphURL = request.getContextPath()
    36             + "/DisplayChart?filename=" + filename;
    37 %>
    38 
    39 
    40 
    41 
    42 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    43 <html>
    44     <head>
    45         <base href="<%=basePath%>">
    46 
    47         <title>My JSP 'index.jsp' starting page</title>
    48         <meta http-equiv="pragma" content="no-cache">
    49         <meta http-equiv="cache-control" content="no-cache">
    50         <meta http-equiv="expires" content="0">
    51         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    52         <meta http-equiv="description" content="This is my page">
    53     </head>
    54 
    55     <body>
    56         <img src="<%=graphURL%>" width=500 height=300 border=0
    57             usemap="#<%= filename %>">
    58     </body>
    59 </html>

    在浏览器地址栏输入《我服务器的端口号是1000》:http://localhost:1000/jsp_response_bufferedImage/
    运行效果:

    /jsp_response_bufferedImage/WebRoot/simple5.jsp

     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
     2 <%@ page
     3     import="org.jfree.chart.ChartFactory,org.jfree.chart.JFreeChart,org.jfree.chart.servlet.ServletUtilities,org.jfree.chart.title.TextTitle,org.jfree.data.time.TimeSeries,org.jfree.data.time.Month,org.jfree.data.time.TimeSeriesCollection,java.awt.Font"%>
     4 
     5 <%
     6     String path = request.getContextPath();
     7     String basePath = request.getScheme() + "://"
     8             + request.getServerName() + ":" + request.getServerPort()
     9             + path + "/";
    10 %>
    11 
    12 <%
    13     //访问量统计时间线
    14     TimeSeries timeSeries = new TimeSeries("Hongten 's blog traffic statistics", Month.class);
    15     //时间曲线数据集合
    16     TimeSeriesCollection lineDataset = new TimeSeriesCollection();
    17     //构造数据集合
    18     timeSeries.add(new Month(1, 2007), 11200);
    19     timeSeries.add(new Month(2, 2007), 9000);
    20     timeSeries.add(new Month(3, 2007), 6200);
    21     timeSeries.add(new Month(4, 2007), 8200);
    22     timeSeries.add(new Month(5, 2007), 8200);
    23     timeSeries.add(new Month(6, 2007), 12200);
    24     timeSeries.add(new Month(7, 2007), 13200);
    25     timeSeries.add(new Month(8, 2007), 8300);
    26     timeSeries.add(new Month(9, 2007), 12400);
    27     timeSeries.add(new Month(10, 2007), 12500);
    28     timeSeries.add(new Month(11, 2007), 13600);
    29     timeSeries.add(new Month(12, 2007), 12500);
    30 
    31     lineDataset.addSeries(timeSeries);
    32     JFreeChart chart = ChartFactory.createTimeSeriesChart(
    33             "Traffic statistical time line", "Months", "Vistor Volume",
    34             lineDataset, true, true, true);
    35     //设置子标题
    36     TextTitle subtitle = new TextTitle("2007 year", new Font("黑体",
    37             Font.BOLD, 12));
    38     chart.addSubtitle(subtitle);
    39     //设置主标题
    40     chart.setTitle(new TextTitle("Hongten 's blog traffic statistics",
    41             new Font("隶书", Font.ITALIC, 15)));
    42     chart.setAntiAlias(true);
    43     String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300,
    44             null, session);
    45     String graphURL = request.getContextPath()
    46             + "/DisplayChart?filename=" + filename;
    47 %>
    48 
    49 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    50 <html>
    51     <head>
    52         <base href="<%=basePath%>">
    53 
    54         <title>My JSP 'index.jsp' starting page</title>
    55         <meta http-equiv="pragma" content="no-cache">
    56         <meta http-equiv="cache-control" content="no-cache">
    57         <meta http-equiv="expires" content="0">
    58         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    59         <meta http-equiv="description" content="This is my page">
    60     </head>
    61 
    62     <body>
    63         <img src="<%=graphURL%>" width=500 height=300 border=0
    64             usemap="#<%= filename %>">
    65     </body>
    66 </html>

    在浏览器地址栏输入《我服务器的端口号是1000》:http://localhost:1000/jsp_response_bufferedImage/
    运行效果:

  • 相关阅读:
    Java Exception
    SuggestFrameWork js代码结构
    博客被管理员丢出来之心情
    HDU--杭电--1195--Open the Lock--深搜--都用双向广搜,弱爆了,看题了没?语文没过关吧?暴力深搜难道我会害羞?
    HDU--杭电--1026--Ignatius and the Princess I--广搜--直接暴力0MS,优先队列的一边站
    HDU--1232--畅通工程--并查集
    杭电--1102--Constructing Roads--并查集
    杭电--1879--继续畅通工程--并查集
    杭电--1875--畅通工程再续--并查集
    杭电--1272--小希的迷宫--并查集
  • 原文地址:https://www.cnblogs.com/hongten/p/java_jfreechart.html
Copyright © 2011-2022 走看看