Java——使用JFreechart创建报表
Java——使用JFreechart创建报表
哎那个新来的 发表于1年前
Java——使用JFreechart创建报表
  • 发表于 1年前
  • 阅读 10
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

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>

共有 人打赏支持
粉丝 0
博文 85
码字总数 26715
×
哎那个新来的
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: