`

使用JFreeChart制作报表的详细例子

    博客分类:
  • JAVA
阅读更多
package demo;

import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.RenderingHints;
import java.io.PrintWriter;

import javax.servlet.http.HttpSession;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.CategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;

public class CategoryItemChart {
 public static String generateBarChart(
         HttpSession session,
         PrintWriter pw,
         int w, int h) {
 String filename = null;
 try {
 CategoryDataset dataset=createDataset();
 JFreeChart chart=ChartFactory.createBarChart(
 "世界傻瓜大奖赛",//图表标题
 "比赛场次",//X轴标题
 "傻瓜程度",//Y轴标题
 dataset,//数据集合
 PlotOrientation.VERTICAL,//图表显示方向(水平、垂直)
 true,//是否使用图例
 false,//是否使用工具提示
 false//是否为图表增加URL
 );
 
 /*------------配置图表属性--------------*/
 // 1,设置整个图表背景颜色
 chart.setBackgroundPaint(Color.yellow);
 
 
 /*------------设定Plot参数-------------*/
 CategoryPlot plot=chart.getCategoryPlot();
 // 2,设置详细图表的显示细节部分的背景颜色
 plot.setBackgroundPaint(Color.PINK);
 // 3,设置垂直网格线颜色
 plot.setDomainGridlinePaint(Color.black);
 //4,设置是否显示垂直网格线
 plot.setDomainGridlinesVisible(true);
 //5,设置水平网格线颜色
 plot.setRangeGridlinePaint(Color.yellow);
 //6,设置是否显示水平网格线
 plot.setRangeGridlinesVisible(true);
 
 /*---------将所有数据转换为整数形式---------*/
 final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
 rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
 
 /*---------设置是否在柱图的状态条上显示边框----*/
 CategoryItemRenderer renderer = (CategoryItemRenderer) plot.getRenderer();
 BarRenderer  render=(BarRenderer) plot.getRenderer();
 render.setItemMargin(0.1);
 
 /*---------设置状态条颜色的深浅渐变-----------*/
    GradientPaint gp0 = new GradientPaint(
            0.0f, 0.0f, new Color(255,200,80),
            0.0f, 0.0f, new Color(255,255,40)
            );
    GradientPaint gp1 = new GradientPaint(
            0.0f, 0.0f, new Color(50,255,50),
            0.0f, 0.0f, new Color(100,255,100)
            );
    GradientPaint gp2 = new GradientPaint(
            0.0f, 0.0f, Color.red,
            0.0f, 0.0f, new Color(255,100,100)
            );
    GradientPaint gp3 = new GradientPaint(
                0.0f, 0.0f, new Color(108,108,255),
                0.0f, 0.0f, new Color(150, 150, 200)
                );
              
    renderer.setSeriesPaint(0, gp0);
    renderer.setSeriesPaint(1, gp1);
    renderer.setSeriesPaint(2, gp2);
    renderer.setSeriesPaint(3, gp3);

    /*
     * 
     * 解决柱状体与图片边框的间距问题
     * 
     * 
     * */                 
    /*------设置X轴标题的倾斜程度----*/
    CategoryAxis domainAxis = plot.getDomainAxis();
    domainAxis.setCategoryLabelPositions(
    CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 6.0)
    );
    /*------设置柱状体与图片边框的左右间距--*/
    domainAxis.setLowerMargin(0.01);
    domainAxis.setUpperMargin(0.01);

    /*------设置柱状体与图片边框的上下间距---*/
    ValueAxis rAxis = plot.getRangeAxis();
    rAxis.setUpperMargin(0.15);
    rAxis.setLowerMargin(0.15);
    
    /*---------设置每一组柱状体之间的间隔---------*/
    render.setItemMargin(0.0); 
    /*
     * 
     * 解决柱状体与图片边框的间距问题
     * 
     * 
     * */  
    
    
    
    
    
    /*
     * 
     * 
     * 解决JFREECHART的中文显示问题
     * 
     * 
     * */
    
    /*----------设置消除字体的锯齿渲染(解决中文问题)--------------*/
    chart.getRenderingHints().put(
            RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF
            );
    /*----------设置标题字体--------------------------*/
    TextTitle textTitle = chart.getTitle();
    textTitle.setFont(new Font("黑体", Font.PLAIN, 20));        
    /*------设置X轴坐标上的文字-----------*/
    domainAxis.setTickLabelFont(new Font("sans-serif",Font.PLAIN,11));
    /*------设置X轴的标题文字------------*/
    domainAxis.setLabelFont(new Font("宋体",Font.PLAIN,12));         
    /*------设置Y轴坐标上的文字-----------*/
    rAxis.setTickLabelFont(new Font("sans-serif",Font.PLAIN,12));
    /*------设置Y轴的标题文字------------*/
    rAxis.setLabelFont(new Font("黑体",Font.PLAIN,12)); 
    
    /*---------设置柱状体上的显示的字体---------*/         
    renderer.setItemLabelGenerator(new LabelGenerator(0.0));
    renderer.setItemLabelFont(new Font("宋体",Font.PLAIN,12));
    renderer.setItemLabelsVisible(true);
    
    /*
     * 
     * 
     * 解决JFREECHART的中文显示问题
     * 
     * 
     * */     

 /*------得到chart的保存路径----*/
    ChartRenderingInfo info = new ChartRenderingInfo(new
            StandardEntityCollection());
 filename = ServletUtilities.saveChartAsPNG(chart, w, h, info, session);
 
 /*------使用printWriter将文件写出----*/
 ChartUtilities.writeImageMap(pw, filename, info,true);
 pw.flush();
 
 }
 catch (Exception e) {
 System.out.println("Exception - " + e.toString());
 e.printStackTrace(System.out);
 filename = "public_error_500x300.png";
 }
 return filename;
 }
 
 
 /*-------------设置柱状体顶端的数据显示--------------*/
 static class LabelGenerator implements CategoryItemLabelGenerator {
 
 private double threshold;
 
 public LabelGenerator(double threshold) {
 this.threshold = threshold;
 }
 
 public String generateLabel(CategoryDataset dataset,
 int row,int column) {
 String result = null;
 final Number value = dataset.getValue(row, column);
 if (value != null) {
 final double v = value.doubleValue();
 if (v > this.threshold) {
 result = value.toString(); 
 }
 }
 return result;
 }
 
 public String generateRowLabel(CategoryDataset dataset,
 int row){
 return null;
 
 }
 public String generateColumnLabel(CategoryDataset dataset,
 int column){
 return null;
 }
 
 
 
 }
 /*-----------数据集合封装-------------*/
 private static CategoryDataset createDataset(){
 String s1="笨笨";
 String s2="蛋蛋";
 String s3="傻傻";
 String s4="瓜瓜";
 
 String c1="第一场";
 String c2="第二场";
 String c3="第三场";
 String c4="第四场";
 String c5="第五场";
 
 /*-------------封装图表使用的数据集-------------*/
 DefaultCategoryDataset dataset=new DefaultCategoryDataset();
 dataset.setValue(1.0,s1,c1);
 dataset.setValue(2.0,s1,c2);
 dataset.setValue(3.0,s1,c3);
 dataset.setValue(4.0,s1,c4);
 dataset.setValue(5.0,s1,c5);
 
 dataset.setValue(5.0,s2,c1);
 dataset.setValue(4.0,s2,c2);
 dataset.setValue(3.0,s2,c3);
 dataset.setValue(2.0,s2,c4);
 dataset.setValue(1.0,s2,c5);
 
 dataset.setValue(1.0,s3,c1);
 dataset.setValue(2.0,s3,c2);
 dataset.setValue(3.0,s3,c3);
 dataset.setValue(2.0,s3,c4);
 dataset.setValue(1.0,s3,c5);
 
 dataset.setValue(1.0,s4,c1);
 dataset.setValue(2.0,s4,c2);
 dataset.setValue(3.0,s4,c3);
 dataset.setValue(4.0,s4,c4);
 dataset.setValue(5.0,s4,c5);
 
 
 return dataset;
 }
     
 }



 

<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="demo.CategoryItemChart"%>
<%@ page import="java.io.PrintWriter"%>

<html>
<head>
<title>
</title>
<%
//以下部分为图象输出

String fileName=CategoryItemChart.generateBarChart(session,new PrintWriter(out),580,250);
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + fileName;

%>

</head>
<body bgcolor="#ffffff">
<table  width="580" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td>
      <img src="<%= graphURL %>" width=580 height=250 border=0
         >
    </td>
  </tr>
</table>
</body>
</html>

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
<servlet-name>DisplayChart</servlet-name>
<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
</servlet>
<servlet-mapping> 
<servlet-name>DisplayChart</servlet-name>
<url-pattern>/servlet/DisplayChart</url-pattern>
</servlet-mapping> 
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

  效果如附件:

  • 大小: 29 KB
分享到:
评论

相关推荐

    jfreechart_数据报表

    这个压缩包文件"jfreechart_数据报表"很可能包含了使用JFreeChart创建数据报表所需的各种示例代码和资源。 JFreeChart支持多种类型的图表,包括柱状图、饼图、线形图、散点图、面积图、甘特图、热力图以及复杂的3D...

    JFreeChart的一个简单例子

    - 教育和演示:教学材料或技术演示中,使用JFreeChart制作图表能直观地解释概念。 总之,JFreeChart是Java开发者手中的一款强大工具,能够轻松地生成高质量的图表,而这篇博客中的简单例子将帮助初学者快速上手,...

    JFreeChart使用教程(中文).pdf

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

    JFreeChart使用教程(中文)

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

    JFreeChart 使用

    **JFreeChart 使用详解** JFreeChart 是一个用于Java平台...无论是简单的数据可视化还是复杂的报表制作,JFreeChart都是Java环境中值得信赖的选择。通过不断探索和实践,你可以根据项目需求定制出满足特定需求的图表。

    JFreechar简单报表例子

    在提供的"JFreechar报表一个简单例子"中,可能包含了一个简单的Java程序,演示了如何使用JFreeChart创建和显示一个报表。这个例子可能涵盖了以下步骤: 1. 导入必要的JFreeChart库。 2. 创建数据源,比如一个`...

    JFreeChart Java绘图教程(含下载、安装)

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

    JfreeChart入门带注释

    **JfreeChart 入门详解** JFreeChart 是一个用于 Java 的...无论你是数据分析还是报表制作,JfreeChart 都能成为你得力的工具。在实际开发中,不断实践和探索,你会发现 JfreeChart 能够满足你对数据展示的诸多需求。

    jfreechart-1.0.13 demo source code + Developer Guide

    通过这些例子,开发者可以快速理解并学习如何使用JFreeChart。 - **运行演示**:每个示例都可以运行,观察其生成的图表效果,便于直观学习和调试。 - **学习路径**:从简单的图表创建到复杂的交互式图表,这些示例...

    JFreechart Demo源码集

    这个库在Java应用中广泛使用,尤其在数据分析、报表制作以及Web应用中,如 JSP(JavaServer Pages)中,它的存在使得动态生成图形变得简单易行。"JFreechart Demo源码集"包含了一系列的示例代码,这些代码可以帮助...

    jfreechart_生成折线图,饼图,柱状图,堆栈柱状图

    这篇文档将详细介绍如何利用JFreeChart库来创建这些图表。 一、JFreeChart简介 JFreeChart是Java平台上的一款免费、开源的图表库,支持多种图表类型,如折线图、柱状图、饼图、散点图、甘特图、雷达图等。它的核心...

    Jfreechart 用户手册(Manual)

    该用户手册详细介绍了如何安装、配置以及使用JFreeChart。 #### 二、样例图表 - **饼图(Pie Charts)**:介绍如何创建和自定义饼图。 - **柱状图(Bar Charts)**:探讨不同类型的柱状图及其定制选项。 - **折线图...

    jfreechat的例子

    标题"jfreechart的例子"表明我们将探讨JFreeChart的实例应用,而描述中的“报表最好的工具”进一步强调了它在报表制作中的价值,特别是对于初学者来说。 JFreeChart的特点包括但不限于以下几点: 1. **多类型图表*...

    图表绘制jfreechat

    **JFreeChart 概述** JFreeChart 是一个在Java平台上广泛使用的开源图表库,它提供了丰富的图表类型...无论你是数据分析、报表制作还是可视化应用的开发者,JFreeChart 都能帮助你轻松地将数据转化为易于理解的图形。

    JFreeChar的相关资料

    JFreeChart是一款强大的Java图表库,它为Java开发者提供了丰富的图表功能,包括柱状图、饼图、线形图、散点图、甘特图等多种图表类型,适用于各种...本资料包中的实例和详细讲解将对学习和使用JFreeChart提供极大帮助。

    JasperReport 学习之路

    9. **Jasper**:展示分组分栏报表的制作过程,通过两次分组实现复杂的布局。 10. **JCharts**:类似Chart示例,但使用另一个开源API jCharts生成图形。 11. **Landscape**:展示横向报表的设计方法。 12. **...

Global site tag (gtag.js) - Google Analytics