`
log_cd
  • 浏览: 1098701 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JFreeChart应用

阅读更多
1.servlet
package com.logcd.servlet;

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

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.ValueAxis;
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.labels.StandardXYItemLabelGenerator;
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.plot.XYPlot;
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.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.Dataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.TextAnchor;
import org.jfree.util.Rotation;

public class JChartServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	private static enum ChartType {
		BarChart,BarChart3D,PieChart,PieChart3D,LineChart,LineChart3D,XYLineChart
	}

	/**
	 * 处理请求
	 */
	public void service(ServletRequest request, ServletResponse response)
			throws ServletException, IOException {
		String type = request.getParameter("type");
		ChartType chartType = getChartType(Integer.parseInt(type)); 
		
		response.setContentType("image/jpeg");

		JFreeChart chart = createChart(getDataSet(chartType),chartType);
		setChartStyle(chart);

		ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 0.9f, chart,
				480, 350, null);
	
	}

	/**
	 * 创建图表
	 * @param dataset
	 * @param chartType
	 * @return
	 */
	public static JFreeChart createChart(Dataset dataset,ChartType chartType){
		JFreeChart chart = null;
		
		switch(chartType){
		    case BarChart:
				chart = ChartFactory.createBarChart("水果产量图",// 图表标题
						"水果种类",// X轴的显示标签
						"产量",// Y轴的显示标签
						(CategoryDataset)dataset, // 数据集
						PlotOrientation.VERTICAL, // 图表方向:水平、垂直
						true,//是否显示图例(对于简单的柱状图必须是false)
						false,
						false);//是否生成URL链接
		    break;
		    
		    case BarChart3D:
				chart = ChartFactory.createBarChart3D("水果产量图",// 图表标题
						"水果种类",// X轴的显示标签
						"产量",// Y轴的显示标签
						(CategoryDataset)dataset, // 数据集
						PlotOrientation.VERTICAL, // 图表方向:水平、垂直
						true,//是否显示图例(对于简单的柱状图必须是false)
						false,//是否启用提示
						false);//是否生成URL链接
	    	break;
            
		    case PieChart:
				chart = ChartFactory.createPieChart("水果产量图", (DefaultPieDataset)dataset, true,
						false, false);
		    break;
		    
		    case PieChart3D:
				chart = ChartFactory.createPieChart3D("水果产量图", (DefaultPieDataset)dataset, true,
						false, false);
		    break;
		    
		    case LineChart:
		    	chart = ChartFactory.createLineChart("水果产量图", "水果种类",   
		                "产量", (CategoryDataset)dataset, PlotOrientation.VERTICAL, true,   
		                false, false);  
		    break;
		    
		    case LineChart3D:
		    	chart = ChartFactory.createLineChart3D("水果产量图", "水果种类",   
		                "产量", (CategoryDataset)dataset, PlotOrientation.VERTICAL, true,   
		                false, false);  
		    break;
		    
		    case XYLineChart:
		    	chart = ChartFactory.createXYLineChart("苹果产量图", "月份",   
		                "产量", (XYDataset)dataset, PlotOrientation.VERTICAL, true,   
		                false, false);  
		    break;
		}
		
		return chart;
	}
	
	/**
	 * 设置chart风格
	 * 
	 * @param chart
	 */
	public static void setChartStyle(JFreeChart chart) {
		// 设置一个背景,从渐到深的倾斜
		chart.setBackgroundPaint(new GradientPaint(0.0F, 0.0F, Color.PINK,
				10000F, 0.0F, Color.YELLOW));

		chart.getTitle().setFont(new Font("SimSun", Font.BOLD, 12));// 标题的字体
		Font font = new Font("黑体", Font.TRUETYPE_FONT, 10);// 公用字体

		LegendTitle legend = (LegendTitle) chart.getLegend();// 图例
		legend.setItemFont(font);

		chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,
				RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
		Plot plot = chart.getPlot();

		if (plot instanceof CategoryPlot) {
			CategoryPlot categryPlot = (CategoryPlot) chart.getPlot();// 图表层
			plot.setBackgroundAlpha(0.6f);
			plot.setForegroundAlpha(0.9F);// 设置透明度

			CategoryAxis domain_axis = categryPlot.getDomainAxis();
			domain_axis.setTickLabelFont(font);// X轴标尺字体
			domain_axis.setLabelFont(font);// X轴标题标签字体
			//横坐标数据倾斜45度 
			//domain_axis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); 

			ValueAxis value_axis = categryPlot.getRangeAxis();
			value_axis.setTickLabelFont(font);// Y轴标尺字体
			value_axis.setLabelFont(font);// Y轴标题标签字体

			// VALUE_TEXT_ANTIALIAS_OFF表示将文字的抗锯齿关闭
			chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,
					RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);

			CategoryItemRenderer renderer = chart.getCategoryPlot().getRenderer();
			renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
            //设置item(bar)标签值的位置是在上面还是在bar内 
			renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER)); 
			if(renderer instanceof LineAndShapeRenderer){
				((LineAndShapeRenderer)renderer).setBaseShapesVisible(true);//显示折线图上的数据标志
			}
			if(renderer instanceof BarRenderer3D){
				((BarRenderer3D)renderer).setItemLabelAnchorOffset(10D);// 设置柱形图上的文字偏离值 
			}
			renderer.setBaseItemLabelFont(new Font("Serif", Font.PLAIN, 10));
			renderer.setBaseItemLabelsVisible(true);

		}

		if (plot instanceof PiePlot) {
			// 得到3D饼图的plot对象
			PiePlot piePlot = (PiePlot) chart.getPlot();
			plot.setBackgroundAlpha(0.6f);
			// 设置旋转角度
			piePlot.setStartAngle(290);
			// 设置旋转方向:顺时针方向
			piePlot.setDirection(Rotation.CLOCKWISE);
			// 设置透明度
			piePlot.setForegroundAlpha(0.5f);
			piePlot.setLabelFont((new Font("宋体", Font.PLAIN, 12)));

			piePlot.setLabelGenerator(new StandardPieSectionLabelGenerator(   
            "{0}:{1}({2})"));//名称、值、百分比
			//设置扇区边框不可见   
	        piePlot.setSectionOutlinesVisible(false);
            if(!(plot instanceof PiePlot3D)){
    	        //设置扇区分离显示
    	        piePlot.setExplodePercent("苹果", 0.2D);  
            }

		}
		
		if(plot instanceof XYPlot){
			 XYPlot xyPlot = (XYPlot) chart.getPlot();
			 xyPlot.setBackgroundAlpha(0.6f);
			 
			 ValueAxis domain_axis = xyPlot.getDomainAxis();
			 domain_axis.setTickLabelFont(font);
			 domain_axis.setLabelFont(font);
			 
			 ValueAxis range_axis = xyPlot.getRangeAxis();
			 range_axis.setTickLabelFont(font);
			 range_axis.setLabelFont(font);
			 
			 XYLineAndShapeRenderer renderer
		       = (XYLineAndShapeRenderer) xyPlot.getRenderer();
             renderer.setBaseShapesVisible(true);//显示数据标志
			 renderer.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());
		     renderer.setBaseItemLabelsVisible(true);
		     renderer.setBaseItemLabelFont(font);

		}
	}

	public static ChartType getChartType(Integer type){
		ChartType chartType = ChartType.PieChart;
		switch(type){
		   case 0: chartType = ChartType.BarChart;
		   break;
		   case 1: chartType = ChartType.BarChart3D;
		   break;
		   case 2: chartType = ChartType.PieChart;
		   break;
		   case 3: chartType = ChartType.PieChart3D;
		   break;
		   case 4: chartType = ChartType.LineChart;
		   break;
		   case 5: chartType = ChartType.LineChart3D;
		   break;
		   case 6: chartType = ChartType.XYLineChart;
		   break;
		}
		return chartType;
	}
	
	/**
	 * 获取一个演示用的简单数据集对象
	 * 
	 * @return
	 */
	private static Dataset getDataSet(ChartType type) {
		switch(type){
		   case BarChart : 
		   case BarChart3D:
		   case LineChart:
		   case LineChart3D:
				DefaultCategoryDataset categorydataset = new DefaultCategoryDataset();
				categorydataset.addValue(100, "北京", "苹果");
				categorydataset.addValue(70, "上海", "苹果");
				categorydataset.addValue(120, "广州", "苹果");
				categorydataset.addValue(220, "北京", "梨子");
				categorydataset.addValue(260, "上海", "梨子");
				categorydataset.addValue(300, "广州", "梨子");
				categorydataset.addValue(320, "北京", "葡萄");
				categorydataset.addValue(370, "上海", "葡萄");
				categorydataset.addValue(320, "广州", "葡萄");
				categorydataset.addValue(490, "北京", "香蕉");
				categorydataset.addValue(450, "上海", "香蕉");
				categorydataset.addValue(400, "广州", "香蕉");
				categorydataset.addValue(200, "北京", "荔枝");
				categorydataset.addValue(230, "上海", "荔枝");
				categorydataset.addValue(340, "广州", "荔枝");
				return categorydataset;
		   case PieChart:
		   case PieChart3D:
				DefaultPieDataset pieDataset = new DefaultPieDataset();
				pieDataset.setValue("苹果", 100);
				pieDataset.setValue("梨子", 200);
				pieDataset.setValue("葡萄", 300);
				pieDataset.setValue("香蕉", 400);
				pieDataset.setValue("荔枝", 500);
				return pieDataset;
		   case XYLineChart:
			   XYSeriesCollection xyDataset = new XYSeriesCollection();
			   XYSeries apple = new XYSeries("苹果");
			   for(int i=0;i<12;i++){
				   apple.add(i+1, (int)(500*Math.random()));
			   }
			   xyDataset.addSeries(apple);
			   return xyDataset;
		}
		return null;
	}

}

2.web.xml
	<servlet>
        <servlet-name>JChartServlet</servlet-name>
        <servlet-class>com.logcd.servlet.JChartServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>JChartServlet</servlet-name>
        <url-pattern>/jChartImg</url-pattern>
    </servlet-mapping>

3.html中调用
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
  <head> 
    <title>JChart Test</title> 
	<meta http-equiv="pragma" content="no-cache"> 
	<meta http-equiv="cache-control" content="no-cache"> 
	<meta http-equiv="expires" content="0">    
  </head> 
  
  <body> 
    <img src="./jChartImg?type=0"/> 
    <img src="./jChartImg?type=1"/> 
    <img src="./jChartImg?type=2"/> 
    <img src="./jChartImg?type=3"/> 
    <img src="./jChartImg?type=4"/> 
    <img src="./jChartImg?type=5"/> 
    <img src="./jChartImg?type=6"/> 
  </body> 
</html> 
分享到:
评论

相关推荐

    jFreeChart应用

    **jFreeChart应用详解** jFreeChart是一款强大的Java图表库,它允许开发者在Java应用程序、Swing组件、Web应用程序以及服务器端生成各种高质量的图表,包括柱状图、饼图、线形图、散点图、甘特图等。这款开源库在...

    JfreeChart 应用详解 例子

    **JFreeChart 应用详解 例子** JFreeChart 是一个功能强大的开源 Java 图形库,它为开发者提供了丰富的图表绘制能力,包括折线图、柱状图、饼图、散点图、甘特图等多种类型。这个中文教程将帮助初学者快速掌握 ...

    jfreechart应用_经典例题

    ### jfreechart应用_经典例题 #### 一、引言 `jfreechart`是一款用Java编写的开源图表库,它可以用来创建各种各样的图表,包括饼图、条形图、柱状图、折线图等。这些图表广泛应用于数据分析、数据可视化等领域。...

    jfreechart应用

    **JFreeChart 应用详解** JFreeChart 是一个开源的 Java 图表库,它为开发者提供了丰富的图表绘制功能,包括折线图、柱状图、饼图、散点图、甘特图等多种类型的图表。这个库在Java应用程序、Web应用、报表系统以及...

    JFreeChart应用实例

    **JFreeChart应用实例** JFreeChart是一款强大的Java图表库,它允许开发者在应用程序、Swing组件、Web应用以及服务器端生成高质量的图表。在这个"JFreeChart应用实例"中,我们将深入探讨如何利用JFreeChart在Java ...

    图形报表JFreeChart应用DEMO

    《图形报表JFreeChart在Eclipse环境下的应用DEMO》 在Java开发中,数据可视化是至关重要的,它能够帮助开发者和用户更好地理解和分析数据。JFreeChart是一款强大的开源图表库,提供了丰富的图表类型,如饼图、柱状...

    JFreechart-web图表书第4章

    通过本章的学习,读者将掌握如何在Tomcat上部署和发布基于JSP/Servlet的Web图表应用程序,为后续的JFreeChart应用打下基础。JFreechart是一个Java库,用于创建各种图表,如饼图、柱状图、线图等,适用于Web应用程序...

    jfreechart应用_经典例题_生成饼状图、生成单组柱状图、生成多组柱状图、生成堆积柱状图

    总的来说,JFreeChart 提供了一套完整的 API,使得在 Java 应用中创建复杂的图表变得简单易行。无论是用于数据分析还是展示,都能满足开发者的需求,实现高效、美观的可视化效果。通过熟练掌握 JFreeChart 的使用,...

    Java报表之JFreeChart视频教程 java1234出品

    6. **兼容性**:JFreeChart 与大多数 Java GUI 框架(如 Swing 和 JavaFX)兼容,可以轻松集成到现有的应用程序中。 在本教程中,java1234 将引导你完成以下学习路径: 1. **安装与引入**:如何将 JFreeChart 库...

    jfreechart-1.0.17

    4. 互联网产品:在Web应用或移动应用中,JFreeChart 可以生成交互式图表,提升用户体验。 总的来说,JFreeChart 1.0.17 是Java开发者实现数据可视化的重要工具,其强大的功能和易用性使其在众多图表库中脱颖而出。...

    ssh-jfreechart

    在提供的"压缩包子文件的文件名称列表"中,"jfreechart应用"可能包含了使用JFreeChart的示例代码或者预打包的JFreeChart库。这些资源对于初学者来说非常有帮助,因为它们可以直接运行,以便理解如何在SSH环境下集成...

    JFreeChartDemo

    标签“源码”意味着我们可以从 JFreeChartDemo 的源代码中学习到如何将 JFreeChart 应用到实际项目中,而“工具”则表明 JFreeChart 是一个强大的图形生成工具,可用于快速构建数据可视化应用。 至于提供的三个 rar...

    JFreeChart 各种图形的 web工程

    这个特定的例子是将JFreeChart应用于Web工程中,解决了在Web环境下可能出现的乱码问题,确保了图表的清晰易读。 **1. 折线图** 折线图是一种常用的数据可视化方式,常用于显示数据随时间变化的趋势。在JFreeChart中...

    jfreechart部署linux服务器生成图片乱码解决方案

    在Linux服务器上部署JFreeChart应用时,由于系统默认字体与Windows或其他操作系统可能存在差异,可能会导致中文字符无法正常显示,即出现乱码现象。 首先,问题的根源在于Linux服务器可能缺乏支持中文字符的字体。...

    jfreechart

    在给定的示例中,你可以找到一个完整的JFreeChart应用,它已经被设计为在MyEclipse环境中运行。MyEclipse是一款功能强大的Java集成开发环境,特别适合进行Java Web项目的开发,包括JSP和Servlet。 **JSP图形示例** ...

    JFreeChart

    4. **Web应用**:在Web应用中,JFreeChart 可以动态生成图表,实时反馈系统状态。 总的来说,JFreeChart 是一个功能强大且易用的Java图表库,无论是在桌面应用还是Web开发中,都能帮助开发者轻松实现数据可视化。...

    java图形工具jfreechart做的简单的例子

    在描述中提到的例子是一个基础的JFreeChart应用,旨在帮助初次使用者理解如何在Java项目中集成和使用这个库。 首先,要使用JFreeChart,你需要将下载的JFreeChart jar包添加到你的项目类路径中。这可以通过IDE(如...

    jfreechart-1.0.5-demo-all

    `jfreechart-1.0.5-demo-all` 包含了 JFreeChart 库的 1.0.5 版本的演示代码和可执行的 JAR 文件,这对于学习和理解如何在实际项目中应用 JFreeChart 非常有帮助。 1. **JFreeChart 概述** - JFreeChart 是一个...

Global site tag (gtag.js) - Google Analytics