`
忧里修斯
  • 浏览: 436469 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

jFreeChart初级封装

阅读更多
package com.dream.commen;

import java.awt.Color;
import java.awt.Font;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import java.util.Map.Entry;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.Plot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.AbstractRenderer;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.ui.TextAnchor;

/**
 * 使用JFreeChart生成web图表
 * @author 忧里修斯
 *
 */
public class WebChart {
	
	public JFreeChart chart = null;
	
	private String title;//标题
	private int width;
	private int height;
	private HashMap datas;//数据集
	
	public WebChart(String title, int width, int height) {
		super();
		this.title = title;
		this.width = width;
		this.height = height;
	}


	/**
	 * 生成饼状图
	 * @param request
	 * @param session
	 * @param isPercent 数值是否为百分数
	 * @param is3D 是否为3D饼状图
	 * @return 图表图片的地址URL
	 */
	public String createPieChart(HashMap datas,boolean isPercent,boolean is3D,HttpServletRequest request,HttpSession session){
		
		String graphUrl = "";
		//创建数据集
		DefaultPieDataset dataset = new DefaultPieDataset();
		//重组数据
		if(null != datas && datas.size() > 0){
			Set set = datas.entrySet();
			for (Iterator iterator = set.iterator(); iterator.hasNext();) {
				Entry entry = (Entry) iterator.next();
				String key = entry.getKey().toString();
				String value = entry.getValue().toString();
				Number number = null;
				try {
					if(value.indexOf(".") != -1){//float or double
						number = Float.parseFloat(value);
					}else{
						number = Integer.parseInt(value);
					}
				} catch (NumberFormatException e) {
					System.out.println("/****************"+value+"格式化成数字错误******************/");
					e.printStackTrace();
				}
				dataset.setValue(key, number);
			}
			//图表域
			String percent = "";
			if(isPercent){
				percent = "%";
			}
			if(is3D){
				chart = ChartFactory.createPieChart3D(title, dataset, true, true, true);
				PiePlot3D plot3D = (PiePlot3D)chart.getPlot();
				plot3D.setLabelGenerator(new  StandardPieSectionLabelGenerator("{0}:{1}"+percent+""));
				plot3D.setLabelFont(new Font("宋体", Font.BOLD,12));  
			
			}else{
				chart = ChartFactory.createPieChart(title, dataset, true, true, true);
				PiePlot plot = (PiePlot)chart.getPlot();
				plot.setLabelGenerator(new  StandardPieSectionLabelGenerator("{0}:{1}"+percent+""));
				plot.setLabelFont(new Font("宋体", Font.BOLD,12)); 
			}
			/*------这两句代码解决了底部和标题汉字乱码的问题-----------*/  
		    chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12)); 
			chart.getTitle().setFont(new Font("宋体", Font.BOLD,12));
			
			//绘制对象
			ChartRenderingInfo rinfo = new ChartRenderingInfo(new StandardEntityCollection());
			//生成的图表图片
			String filename = "";
			try {
				//图表图片的URL
				filename = ServletUtilities.saveChartAsPNG(chart,width,height,rinfo,session);
				graphUrl = request.getContextPath()+"/servlet/DisplayChart?filename="+filename;
			} catch (IOException e) {
				e.printStackTrace();
			}
		}else{
			System.err.println("/************请设置数据集*****************/");
		}
		return graphUrl;
	}
	
	/**
	 * 创建线图或准状图
	 * @param request
	 * @param session
	 * @param is3D
	 * @param xname 横轴名称
	 * @param yname 纵轴名称
	 * @param is3D 是否为3D图
	 * @param isVertical 是否垂直显示
	 * @param isBar 是否柱状图,若为false则为现状图
	 * @return
	 */
	public String createBarOrLineChart(DefaultCategoryDataset dataSet,String xname,String yname,boolean isBar,boolean is3D,boolean isVertical,HttpServletRequest request,HttpSession session){
		
		String graphUrl = "";
		PlotOrientation orientation = null;
		if(isVertical){//垂直显示
			orientation = PlotOrientation.VERTICAL;
		}else{//水平
			orientation = PlotOrientation.HORIZONTAL;
		}
		//绘图对象
		CategoryItemRenderer render = null;
		//获取图表域对象
		CategoryPlot plot = null;
		if(isBar){//柱状图
			if(is3D){//3D图
				chart = ChartFactory.createBarChart3D(title, xname, yname, dataSet, orientation, true, true, true);
				render = new BarRenderer3D();
			}else{
				chart = ChartFactory.createBarChart(title, xname, yname, dataSet, orientation, true, true, true);
				render = new BarRenderer();
			}
		}else{//线状图
			if(is3D){//3D图
				chart = ChartFactory.createLineChart3D(title, xname, yname, dataSet, orientation, true, true, true);
			}else{
				chart = ChartFactory.createLineChart(title, xname, yname, dataSet, orientation, true, true, true);
			}
			render = new LineAndShapeRenderer();
		}
		plot = chart.getCategoryPlot();
		
		//设置图表的横轴和纵轴
		CategoryAxis domainAxis = plot.getDomainAxis();
		domainAxis.setLowerMargin(0.01);//设置距离图片左端的距离为1%
		domainAxis.setUpperMargin(0.01);// 设置距离图片右端的距离为1%
		domainAxis.setCategoryLabelPositionOffset(10);//图表横轴与标签的距离为10像
		domainAxis.setCategoryMargin(0.1);//横轴标签之间的距离为10%
		
		//设置纵轴的属性
		ValueAxis rangeAxis  = plot.getRangeAxis(); 
		rangeAxis.setUpperMargin(0.1);//设置最高点与图片顶端的距离为10%
		
		//获取相应的绘图对象
		
		render.setBaseOutlinePaint(Color.red);
		//注意第一个参数0、1
		render.setSeriesPaint(0,new Color(0,255,0));//设置柱子的颜色(产量)
		render.setSeriesOutlinePaint(0,Color.black);//设置柱子边框的颜色(产量)
		render.setSeriesPaint(1,new Color(0,0,255));//设置柱子的颜色(销量)
		render.setSeriesOutlinePaint(1,Color.red);//设置柱子边框的颜色(销量)
		
		//显示每个柱的数值,并修改该数值的字体属性
		render.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
		render.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));
		//render.setItemLabelAnchorOffset(10D);// 设置柱形图上的文字离柱子顶端的距离 
		render.setItemLabelFont(new Font("黑体",Font.BOLD,12));//12号黑体加粗
		render.setItemLabelPaint(new Color(0,0,0));
		render.setItemLabelsVisible(true);
		
		/*------设置X轴坐标上的文字-----------*/  
		domainAxis.setTickLabelFont(new Font("sans-serif", Font.BOLD, 11));   
		  
		/*------设置X轴的标题文字------------*/  
		domainAxis.setLabelFont(new Font("宋体", Font.BOLD, 12));   
		  
		/*------设置Y轴坐标上的文字-----------*/  
		rangeAxis.setTickLabelFont(new Font("sans-serif", Font.BOLD, 12));   
		  
		/*------设置Y轴的标题文字------------*/  
		rangeAxis.setLabelFont(new Font("黑体", Font.BOLD, 12)); 
		
		/*------这句代码解决了底部汉字乱码的问题-----------*/  
	    chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12)); 
		chart.getTitle().setFont(new Font("宋体", Font.BOLD,12));	
		plot.setRenderer(render);
		
		//设置横纵坐标的显示位置
		plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
		plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
		//plot.setBackgroundPaint(new Color(255,255,128));
		
		//生成的图表图片
		String filename;
		try {
			filename = ServletUtilities.saveChartAsPNG(chart,600,400,session);
			//图表图片的URL
			graphUrl = request.getContextPath()+"/servlet/DisplayChart?filename="+filename;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return graphUrl;
	}
	
}
分享到:
评论

相关推荐

    jfreechart的封装用例

    **JFreeChart 封装用例详解** JFreeChart 是一个强大的开源 Java 图形库,它提供了丰富的图表类型,如柱状图、饼状图、曲线图等,用于数据可视化。在给定的文件中,我们看到的是 JFreeChart 库经过封装后的类,以及...

    关于JFreeChart的封装,配合注解的实现,开发中

    这篇博文“关于JFreeChart的封装,配合注解的实现,开发中”可能涉及了如何将JFreeChart的功能进行封装,以便在实际项目中更加方便地使用,同时可能引入了注解来简化配置和提高代码的可读性。 首先,我们来理解...

    Jfreechart封装示例

    这个“JFreeChart封装示例”提供了如何在Java应用程序中有效利用JFreeChart库的简单指导。下面我们将深入探讨JFreeChart的核心功能以及如何在项目中实现这些功能。 1. **JFreeChart简介** JFreeChart是一个开源...

    项目中封装的jfreechart。

    项目中多次用到的jfreechart,由于需求的不确定性,所以把图表这块给单独提出来,进行一定的封装,支持动态的配置图形,好多东西都写入了XML中,支持简单的条件表达式,可以根据条件表达式进行组合的产生SQL,不依赖...

    JFreeChart柱状图的类的封装

    在这个主题中,我们将深入探讨"JFreeChart柱状图的类的封装",了解如何利用这个库来创建柱状图以及相关的类和工具。 首先,JFreeChart的核心类之一是`CategoryPlot`,它是柱状图的基础。`CategoryPlot`负责管理类别...

    jFreeChart示例代码,封装成jsp标签

    **JFreeChart 示例代码封装成 JSP 标签** JFreeChart 是一个强大的 Java 图表库,它提供了各种类型的图表,如柱状图、饼图、线形图、散点图等,适用于报告、数据分析和可视化应用。在这个项目中,开发者已经将 ...

    jfreechart-1.5.2.jar,jfreechart|jfreechart

    jfreechart-1.5.2.jar,jfreechart|jfreechart

    Jfreechart

    JFreeChart 是一个流行的 Java 库,用于创建各种类型的图表,包括饼图、折线图、柱状图等。在使用 JFreeChart 进行数据可视化时,可能会遇到乱码的问题,这通常与字体设置不当有关。本文将详细分析 Jfreechart 乱码...

    jfreechart,jfreechart-1.0.13,jfreechart-1.0.13,jfreechart

    《JFreeChart:Java 图形绘制的利器》 在Java编程世界中,高效且美观的图形展示是数据可视化的重要组成部分。JFreeChart作为一款强大的开源图表库,为开发者提供了丰富的图表类型和高度自定义的能力,使得Java应用...

    JFreeChart 官方例子 JFReeChart Dome

    "JFreeChart 官方例子 JFreeChart Dome" 提供了一系列官方示例,帮助开发者更好地理解和运用JFreeChart库的各种功能。 "ChangeLog" 文件通常记录了软件的更新历史,其中包括了每次版本升级中添加的新特性、修复的...

    jfreechart demo

    **JFreeChart 演示程序详解** JFreeChart 是一个强大的 Java 图表库,它提供了丰富的图表类型,包括柱状图、饼图、线图、散点图、甘特图等,适用于各种数据可视化需求。这篇内容将深入探讨 JFreeChart 的基本使用...

    jfreechart使用的3个jar包

    数据集可以由数组、集合或其他数据结构提供,然后通过 `DefaultCategoryDataset` 或 `XYSeriesCollection` 等类来封装。 总之,JFreeChart 是一个强大的图表库,结合 jcommon 和 struts2-jfreechart-plugin,可以在...

    jfreechart

    标题 "jfreechart" 指的是 JFreeChart,这是一个流行的开源 Java 图形库,用于创建高质量的图表。它在各种应用中广泛使用,包括报表、仪表盘、科学出版物等,提供了丰富的图表类型,如饼图、柱状图、线图、散点图和...

    JFreechart教程与实例

    "JFreechart教程与实例" JFreechart是一款功能强大的图形报表组件,主要用于生成各种动态图表。在Java项目的应用中,JFreechart组件几乎可以满足目前图形报表的所有需求。JFreechart组件可以生成各种各样的图形报表...

    jfreechart绘制的风速风向玫瑰图

    jfreechart绘制的风速风向玫瑰图 jfreechart是Java中一个流行的图表库,它提供了许多种类的图表,包括柱状图、折线图、饼图、雷达图等。本文主要介绍如何使用jfreechart绘制风速风向玫瑰图。 首先,了解jfreechart...

    jfreechart所需jar包.zip

    JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的2D图表,包括折线图、柱状图、饼图、散点图等。在Java应用程序中,JFreeChart经常被用于数据分析和可视化,尤其在报表系统、数据分析工具或者任何需要...

    JFreeChart混合图表演示

    JFreeChart是一款强大的Java库,用于创建各种类型的图表,包括柱状图、饼图、线图、散点图等。在“JFreeChart混合图表演示”中,我们重点探讨如何利用JFreeChart来创建一个包含多种图表类型的混合图表,以提供更丰富...

    jfreechart的jar包

    6. **渲染图表**:使用 ChartPanel 将图表封装到 Swing 组件中,或者将其转换为图片输出到文件或流。 7. **整合到报表**:将生成的图表组件或图片嵌入到报表模板中,与其他文本、表格等元素一起展示。 **lib ...

Global site tag (gtag.js) - Google Analytics