文档章节

Java——使用JFreechart创建报表

哎那个新来的
 哎那个新来的
发布于 2016/08/08 14:12
字数 1091
阅读 13
收藏 0

1、柱状图

Servlet:

package mytest.pie;
import java.awt.Font;
import java.io.IOException;
import java.text.NumberFormat;

import javax.servlet.http.HttpSession;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.util.Rotation;

public class MyPieChart3 {

    public static String  getPieChart(HttpSession session) throws IOException{
        //创建数据
        DefaultPieDataset data = new DefaultPieDataset();
        data.setValue("美国", 1000);
        data.setValue("俄罗斯", 800);
        data.setValue("中国", 700);
        data.setValue("日本", 680);
        data.setValue("欧盟", 1200);
        data.setValue("其他", 500);
        //创建chart
        JFreeChart chart = ChartFactory.createPieChart("奥运会", data, true, true, true);
        //副标题
        chart.addSubtitle(new TextTitle("2016奥运会"));
        //创建piePlot 对象
        PiePlot piePlot = (PiePlot)chart.getPlot();
        //设置字体
        piePlot.setLabelFont(new Font("宋体",0,11));
        // 设置饼图是圆的(true),还是椭圆的(false);默认为true  
        piePlot.setCircular(true);
        // 没有数据的时候显示的内容
        piePlot.setNoDataMessage("无数据显示");
        //设置百分比
        StandardPieSectionLabelGenerator standarPieIG = new StandardPieSectionLabelGenerator("{0}:{2}", NumberFormat.getNumberInstance(), NumberFormat.getPercentInstance());  
        piePlot.setLabelGenerator(standarPieIG);  
        
        //设置3D的piePlot对象
        PiePlot3D pieplot3d = (PiePlot3D)chart.getPlot();
        //设置开始角度  
        pieplot3d.setStartAngle(120D);  
        //设置方向为”顺时针方向“  
        pieplot3d.setDirection(Rotation.CLOCKWISE);  
        //设置透明度,0.5F为半透明,1为不透明,0为全透明  
        pieplot3d.setForegroundAlpha(0.7F);
        
        //保存chart,并且返回文件名称
        String fileName = ServletUtilities.saveChartAsPNG(chart, 700, 500, null, session);
        return fileName;
    }
}

jsp:

<%@page import="mytest.bar.BarChart4"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
 //从session中获取等生成的图片你的文件名称
 String fileName = BarChart4.getStringBarChart(session);
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>My JSP 'MBarChar.jsp' starting page</title>
  </head>
 
  <body>
        <img src="/DisplayChart?filename=<%=fileName %>" width="700" height="500" border="0">
  </body>
</html>

2、饼状图

Servelt:

package mytest.pie;
import java.awt.Font;
import java.io.IOException;
import java.text.NumberFormat;

import javax.servlet.http.HttpSession;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.util.Rotation;

public class MyPieChart3 {

    public static String  getPieChart(HttpSession session) throws IOException{
        //创建数据
        DefaultPieDataset data = new DefaultPieDataset();
        data.setValue("美国", 1000);
        data.setValue("俄罗斯", 800);
        data.setValue("中国", 700);
        data.setValue("日本", 680);
        data.setValue("欧盟", 1200);
        data.setValue("其他", 500);
        //创建chart
        JFreeChart chart = ChartFactory.createPieChart("奥运会", data, true, true, true);
        //副标题
        chart.addSubtitle(new TextTitle("2016奥运会"));
        //创建piePlot 对象
        PiePlot piePlot = (PiePlot)chart.getPlot();
        //设置字体
        piePlot.setLabelFont(new Font("宋体",0,11));
        // 设置饼图是圆的(true),还是椭圆的(false);默认为true  
        piePlot.setCircular(true);
        // 没有数据的时候显示的内容
        piePlot.setNoDataMessage("无数据显示");
        //设置百分比
        StandardPieSectionLabelGenerator standarPieIG = new StandardPieSectionLabelGenerator("{0}:{2}", NumberFormat.getNumberInstance(), NumberFormat.getPercentInstance());  
        piePlot.setLabelGenerator(standarPieIG);  
        
        //设置3D的piePlot对象
        PiePlot3D pieplot3d = (PiePlot3D)chart.getPlot();
        //设置开始角度  
        pieplot3d.setStartAngle(120D);  
        //设置方向为”顺时针方向“  
        pieplot3d.setDirection(Rotation.CLOCKWISE);  
        //设置透明度,0.5F为半透明,1为不透明,0为全透明  
        pieplot3d.setForegroundAlpha(0.7F);
        
        //保存chart,并且返回文件名称
        String fileName = ServletUtilities.saveChartAsPNG(chart, 700, 500, null, session);
        return fileName;
    }
}

Jsp:

<%@ page language="java" import="java.util.*,mytest.pie.MyPieChart3" pageEncoding="UTF-8"%>
<%
String fileName = MyPieChart3.getPieChart(session);
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
 
  <body>
    <img alt="奥运会奖牌分布" src="/DisplayChart?filename=<%=fileName %>" width="700" height="500" border="0" />
  </body>
</html>

3、折线图

Servelt:

package mytest.line;

import java.awt.Font;
import java.io.IOException;

import javax.servlet.http.HttpSession;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickUnit;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardXYItemLabelGenerator;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.time.Month;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.ui.TextAnchor;
//多条折线
public class MyLineChart2 {
    
    public static String getLineChart(HttpSession session) throws IOException{
        // 访问量统计
            TimeSeries timeSeries=new TimeSeries("A网站访问量统计", Month.class);
            // 添加数据
            timeSeries.add(new Month(1,2013), 100);
            timeSeries.add(new Month(2,2013), 200);
            timeSeries.add(new Month(3,2013), 300);
            timeSeries.add(new Month(4,2013), 400);
            timeSeries.add(new Month(5,2013), 560);
            timeSeries.add(new Month(6,2013), 600);
            timeSeries.add(new Month(7,2013), 750);
            timeSeries.add(new Month(8,2013), 890);
            timeSeries.add(new Month(9,2013), 120);
            timeSeries.add(new Month(10,2013), 400);
            timeSeries.add(new Month(11,2013), 1200);
            timeSeries.add(new Month(12,2013), 1600);
            
            // 访问量统计
            TimeSeries timeSeries2=new TimeSeries("B网站访问量统计", Month.class);
            // 添加数据
            timeSeries2.add(new Month(1,2013), 50);
            timeSeries2.add(new Month(2,2013), 100);
            timeSeries2.add(new Month(3,2013), 150);
            timeSeries2.add(new Month(4,2013), 200);
            timeSeries2.add(new Month(5,2013), 220);
            timeSeries2.add(new Month(6,2013), 300);
            timeSeries2.add(new Month(7,2013), 340);
            timeSeries2.add(new Month(8,2013), 400);
            timeSeries2.add(new Month(9,2013), 450);
            timeSeries2.add(new Month(10,2013), 500);
            timeSeries2.add(new Month(11,2013), 70);
            timeSeries2.add(new Month(12,2013), 800);
            
            // 定义时间序列的集合
            TimeSeriesCollection lineDataset=new TimeSeriesCollection();
            lineDataset.addSeries(timeSeries);
            lineDataset.addSeries(timeSeries2);
            
            JFreeChart chart=ChartFactory.createTimeSeriesChart("访问量统计时间折线图", "月份", "访问量", lineDataset, true, true, true);
            
            //设置主标题
            chart.setTitle(new TextTitle("A,B网站访问量统计对比图", new Font("隶书", Font.ITALIC, 15)));
            //设置子标题
            TextTitle subtitle = new TextTitle("2013年度", new Font("黑体", Font.BOLD, 12));
            chart.addSubtitle(subtitle);
            chart.setAntiAlias(true);
            
            //获取XYPlot对象,通过该对象设置其他的属性值
            XYPlot plot = (XYPlot) chart.getPlot();
            //设置时间轴的范围。
            DateAxis dateaxis = (DateAxis)plot.getDomainAxis();
            dateaxis.setDateFormatOverride(new java.text.SimpleDateFormat("M月"));
            dateaxis.setTickUnit(new DateTickUnit(DateTickUnit.MONTH,1));
            
            //设置曲线是否显示数据点
            XYLineAndShapeRenderer xylinerenderer = (XYLineAndShapeRenderer)plot.getRenderer();
            xylinerenderer.setBaseShapesVisible(true);
            
            //设置曲线显示各数据点的值
            XYItemRenderer xyitem = plot.getRenderer();
            xyitem.setBaseItemLabelsVisible(true);
            xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));
            xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());
            xyitem.setBaseItemLabelFont(new Font("Dialog", 1, 12));
            plot.setRenderer(xyitem);
            
            String fileName=ServletUtilities.saveChartAsPNG(chart, 700, 500, session);
            
            return fileName;
    }
}

Jsp:

<%@ page language="java" import="java.util.*,mytest.line.*" pageEncoding="UTF-8"%>
<%
String fileName = MyLineChart2.getLineChart(session);

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
 

  </head>
 
  <body>
    <img alt="访问统计折线图" src="/DisplayChart?filename=<%=fileName %>" width="700" height="500" border="0" />
  </body>
</html>

© 著作权归作者所有

哎那个新来的
粉丝 1
博文 105
码字总数 35105
作品 0
闸北
程序员
私信 提问
JFreeChart学习示例

JFreeChart 是Java平台上一个开放的图表绘制类库,它完全使用Java语言编写,是为applications, applets, servlets 以及JSP等使用所设计。 JFreeChart可以生成饼图(pie)、柱状图(bar)、散...

长平狐
2013/01/06
99
0
Web图表开发工具JFreeChart与ChartDirector使用评测

在Web开发中,图形和图表是常用的数据呈现方式,图表能将枯燥的数据生动的表现出来。也许你正接手一个Web图表开发项目,却被Web图表开发工具选型的问题困扰着,要么是价格昂贵,要么就是部署...

咲晚杍
2013/08/21
0
0
使用 JFreeChart来创建基于web的图表

WWW的发展使得基于因特网的应用程序不再局限于静态或者简单的动态内容提供。传统的一些以软件包形式发布应用程序例如报表系统等都在逐渐搬到因特网上。 但是这两者之间有着天壤之别,虽然对于...

红薯
2008/10/05
4.6K
8
Struts 中结合 JFreeChart,iText 生成 PDF 报表

本文中向读者朋友提供了一种 PDF 报表系统的解决方案,并将重点放在如何整合开源框架以实现系统要求,以及如何解决实际开发过程中的疑难问题上,对于广大的开源框架爱好者和开发人员具有一定...

红薯
2011/02/11
2.7K
5
使用JFreeChart实现基于Web的柱状图

JFreeChart是一组功能强大、灵活易用的 Java绘图 API,使用它可以生成多种通用性的报表,包括柱状图、饼图、曲线图等。它能够用在 Swing和 Web等中制作自定义的图表或报表,并且得到广泛的应...

harries
2014/06/05
0
4

没有更多内容

加载失败,请刷新页面

加载更多

跨域的理解,以及解决方案!

/*什么是跨域? * 跨域的主要原因是浏览器的同源策略。 * =>>所谓的同源策略就是A网页设置的 Cookie,B网页不能打开,除非这两个网页"同源"。 * 什么是同源? * =>>同源就是协议相同、域名相同...

流年那么伤
6分钟前
1
0
Nginx配置try_fiels,php无法获取$_GET参数

平时开发都是用LNMP,新安装的虚拟机在配置nginx的rewrite的时候使用try_files命令。但是在写的时候配置成“try_files $uri $uri/ /index.php?q=args;”, 在PHP的web程序中,打印$_GET为空。...

叫我哀木涕
6分钟前
0
0
【原创】Microsoft Edge可以用localhost访问但无法用IP访问

Microsoft Edge可以用localhost和127.0.0.1访问但无法用本机IP访问, chrome ie都可以推测是edge的问题,网络是专用网络,防火墙也关了: 在edge里 按F12 以在控制台里看到这句 CONSOLE21301...

shzwork
7分钟前
0
0
Python利用数学方程式画4种不一样的心型图案

前言 下面这四个心型图案,是通过科学地计算,根据数学方程式生成的,虽然做的不是特别完美,但是基本的还是能实现的 第一个心型 结果图 第二心型 结果图 学习从来不是一个人的事情,要有个相互监...

A_裙232550246
7分钟前
0
0
微信带场景参数的二维码生成与使用?

微信公众号推广时,用户通过扫二维码关注公众号,需要统计用户是通过谁的二维码进行关注。 在用户扫码关注公众号时,二维码带上推广者的参数,在关注公众号后,获取到该推广者的参数。 目前有...

wxgzhgncj
7分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部