文档章节

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
博文 92
码字总数 29196
作品 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.5K
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

没有更多内容

加载失败,请刷新页面

加载更多

初探Spring Cloud(一)

1. 什么是Spring Cloud? Spring提供了一系列工具,可以帮助开发人员迅速搭建分布式系统中的公共组件(比如:配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,...

__HuWei
14分钟前
0
0
Mac配置ssh免密钥登录

Mac终端每次使用ssh -p 22 user@ip登录很是麻烦,下面介绍配置ssh免密钥登录: cd ~/.ssh下创建conf文件,写入以下配置: Host test HostName ip Port 22 IdentityFile /Users/t/key/test.p...

littlemesieV
29分钟前
1
0
Spark2.0操作ES

ES提供了支持包来方便的操作ES。首先添加ES的依赖maven: <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch-spark-20_2.11</artifactId> <version>6.2.0</ver......

守望者之父
31分钟前
1
0
专业术语

1、防御性编程 DruidDataSource类有一个init方法,我们在spring中配置druid时,都会指定 init-method='init'. 而且DruidDataSource也在其他地方,诸如getConnection()方法里作了防御性编程, 也就...

still5656
32分钟前
1
0
微信开发--测试账号相关

1、微信公众平台选择代码开发后,其平台上的部分功能会不可用 可在开发者工具中选择开通测试账号,进行相关的功能调试(测试账号出微信支付不可调试外,其他功能基本上都可以调试) 2、测试账号...

Code辉
39分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部