`

jFreeChart展示web图表---五分钟上手!

阅读更多

jf的教程己是满天飞,我就不多废话了---如果你想用又不想看那些看不懂的文档,就霸王硬上弓吧,我觉这样还快些:


 1.下面这段代码,是用以生成bar、pie、温度计、仪表盘等以及我称不上名字的一些图表;
 2.附件中有一个war包,直接布到webapps下,自己看效果;
 3.附件中的源码包是整个ec中的项目,你自己玩弄--如果不知道jf在哪里下,里面也有了。

 

 

java代码,一个输出图片的Servlet的生成模拟数据的工具类:

package cn.netjava.jFreeChart;

import java.awt.BasicStroke;
import java.awt.Color;
import java.io.IOException;

import javax.servlet.*;
import javax.servlet.http.*;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.MeterPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.ThermometerPlot;
import org.jfree.data.Range;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.DefaultValueDataset;

/**
 * 生成jFreeChart图片的Servlet
 * @author     javaFound
 */
public class ChartServlet extends HttpServlet {
    /**
     * 根据客户端请求的图表类型chartType的值,返回对应的图表,
     */
	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 输出图片格式为png格式
		response.setHeader("Cache-Control", "no-cache");
		response.setContentType("image/png");
		//请求的图表类型
		String chartType = request.getParameter("chartType");
		System.out.println("请求的图表类型是 : " + chartType);
		// for export Chart:
		JFreeChart chart = null;
		if (chartType.equalsIgnoreCase("PieChart3D")) {
			// 创建pie图的数据集方法
			DefaultPieDataset data = ChartTools.getPieDataSet();
			chart = ChartFactory.createPieChart3D("这是PieChart3D图:", data, true,
					false, false);
		} else if (chartType.equalsIgnoreCase("PieChart")) {
			// 创建pie图的数据集方法
			DefaultPieDataset data = ChartTools.getPieDataSet();
			chart = ChartFactory.createPieChart("这是PieChart图:", data, true,
					false, false);
		} else if (chartType.equalsIgnoreCase("RingChart")) {
			// 创建pie图的数据集方法
			DefaultPieDataset data = ChartTools.getPieDataSet();
			chart = ChartFactory.createRingChart("这是RingChart图:", data, true,
					false, false);
		} else if (chartType.equalsIgnoreCase("BarChart3D")) {
			// 创建bar图的数据集方法
			DefaultCategoryDataset data = ChartTools.getCategoryDataset();
			// PlotOrientation.HORIZONTAL这个参数说明是水平还是垂直方向VERTICAL
			chart = ChartFactory.createBarChart3D("这是BarChart3D", "数量", "地点",
					data, PlotOrientation.VERTICAL, true, false, false);
		} else if (chartType.equalsIgnoreCase("LineChart")) {
			// 创建线图
			DefaultCategoryDataset data = ChartTools.getCategoryDataset();
			chart = ChartFactory.createLineChart("这是LineChart", "数量", "地点",
					data, PlotOrientation.VERTICAL, true, false, false);
		} else if (chartType.equalsIgnoreCase("AreaChart")) {
			// 创建区域形图
			DefaultCategoryDataset data = ChartTools.getCategoryDataset();
			chart = ChartFactory.createAreaChart("这是AreaChart", "数量", "地点",
					data, PlotOrientation.VERTICAL, true, false, false);
		} else if (chartType.equalsIgnoreCase("WaterfallChart")) {
			// 搞不明白这是什么图:(
			DefaultCategoryDataset data = ChartTools.getCategoryDataset();
			chart = ChartFactory.createWaterfallChart("这是WaterfallChart", "数量",
					"地点", data, PlotOrientation.VERTICAL, true, false, false);
		} else if (chartType.equalsIgnoreCase("Thermometer")) {
			// 整个温度计。。。。。。。。。。
			// 数据集,初始值为0
			DefaultValueDataset valuedataset = new DefaultValueDataset(0);
			// 创建漫度计的Plot对象
			ThermometerPlot thermometerplot = new ThermometerPlot(valuedataset);
			chart = new JFreeChart("设备温度", JFreeChart.DEFAULT_TITLE_FONT,
					thermometerplot, false);
			thermometerplot.setThermometerStroke(new BasicStroke(2.0F));
			// 图表的轮廓颜色
			thermometerplot.setThermometerPaint(Color.BLUE);
			thermometerplot.setOutlinePaint(null);
			// 图表计数单位
			thermometerplot.setUnits(10);
			// 数值范围
			thermometerplot.setRange(-40, 40);
			thermometerplot.setForegroundAlpha(1f);
			// 图表的当前值
			valuedataset.setValue(20);
		} else if (chartType.equalsIgnoreCase("MeterChart")) {
			// 整个仪表盘
			// 数据集,初始值为30
			DefaultValueDataset valuedataset = new DefaultValueDataset(30);
			// 创建Plot对象
			MeterPlot meterplot = new MeterPlot(valuedataset);
			chart = new JFreeChart("当前流量速度", JFreeChart.DEFAULT_TITLE_FONT,
					meterplot, false);
			// 表盘上显示的数据单位说明
			meterplot.setUnits("条/秒)");
			// 表盘分害的单位,即30为一格
			meterplot.setTickSize(30);
			// 显示数据范围,0~600
			meterplot.setRange(new Range(0, 600));
			// 图表的当前值
			valuedataset.setValue(100);
		}
		if (null != chart) {
			// 将图片对象输出到客户端
			java.io.OutputStream ous = response.getOutputStream();
			ChartUtilities.writeChartAsPNG(ous, chart, 500, 300);
			// 使用这样的代码输出可能会出错!
			// ChartUtilities.writeChartAsJPEG(ous,100,chart,500,300,null);
			ous.flush();
			ous.close();
			System.out.println("******ho ho..*****图片输出完毕....... " + chartType);
		}
	}
}

/**
 * 生成图片数据集的工具类:
 * @author    javaFound
 */
class ChartTools {
	/**
	 * 生成bar图的数据集:
	 * @return:可用于Bar图的数据集
	 */
	public static DefaultCategoryDataset getCategoryDataset() {
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		for (int series = 0; series < seriesTimes.length; series++) {
			for (int i = 0; i < seriesNames.length; i++) {
				nameValueOfTime[series][i] = new java.util.Random()
						.nextInt(300) + 100;
				dataset.addValue(nameValueOfTime[series][i], seriesNames[i],
						seriesTimes[series]);
			}
		}
		return dataset;
	}

	/**
	 * 创建用于填充pie图的数据集
	 * @return DefaultPieDataset对象
	 */
	public static DefaultPieDataset getPieDataSet() {
		// 用来填充pie图的数据集
		DefaultPieDataset dataset = new DefaultPieDataset();
		// 饼图分块名字
		String[] seriesNames = { "芙蓉路", "八一路", "五一路", "大学路", };
		for (int i = 0; i < seriesNames.length; i++) {
			int value = new java.util.Random().nextInt(1000) + 500;
			// 设置pie数据集中的数据对
			dataset.setValue(seriesNames[i], value);
		}
		return dataset;
	}
  
	private ChartTools(){};
	/** X轴时间维数据序型(当然也可以为标签维度)* */
	private static String[] seriesTimes = { "一月", "二月", "三月", "四月", "五月", "六月","七月" };
	/** 柱状标签序列(比如做为地点序列) */
	private static String[] seriesNames = { "芙蓉路立交桥", "五一立交桥", "长岭路口" };
	/** 每个时间点上每个地区/类型序列的值 */
	private static int[][] nameValueOfTime = new int[seriesTimes.length][seriesNames.length];
}

 

 

 

当然,少不了在页面上显示的一个jsp文件,名字叫做viewChart.jsp

 

 

<%@page contentType="text/html" pageEncoding="GBK"%>
<title>jFreeChart图表测试 @NetJava.cn</title>
<br>请选择要生成的图表类型:
<hr>
<select id="scType" onchange="loadChartBySelectType(this)">
<option value="1">请选择一种图表</option>
<option value="PieChart3D">PieChart3D</option>
<option value="PieChart">PieChart</option>
<option value="BarChart3D">BarChart3D</option>
<option value="LineChart">LineChart</option>
<option value="RingChart">RingChart</option>
<option value="AreaChart">AreaChart</option>
<option value="WaterfallChart">WaterfallChart</option>
<option value="Thermometer">Thermometer</option>
<option value="MeterChart">MeterChart</option>
</select>
 <hr>
图表:
<div id="displayChart" />
 
 <script type="text/javascript">
/**选择jf图表类型时,载入图片*/
function loadChartBySelectType(sua) {
    var cType=sua.value;
    if(cType=="1"){
     return ;
    }
    alert("选中的是: "+cType)
     var disabledImageZone=document.getElementById("displayChart");
    //这样多简单,清理div中己有的东东:)
       disabledImageZone.innerHTML="";
      var imageZone = document.createElement('img');
      imageZone.setAttribute('id','imageZone');
      //提取服务器上的图片显示下来:
      imageZone.setAttribute('src',"servlet/ChartServlet?chartType="+cType);
      disabledImageZone.appendChild(imageZone);
      }
      </script>

 

就贴其中一张图了,是个温度计,哈哈:

 

 

  • 描述: jFreeChart绘制的温度计示意图片
  • 大小: 1 MB
  • jFreeChartTest.rar (2.7 MB)
  • 描述: jFreeChart测试的Eclipse中项目源码打包
  • 下载次数: 2898
  • jFreeChartTest.war.png (2.7 MB)
  • 描述: 测试jFreeChart可直接布署到tomcat/webapps下面看效果的war文件; 我晕,war上传不了啊,没办法了,war后面加上了个.png,下载布署时注意去掉哦!
  • 下载次数: 1903
分享到:
评论
6 楼 一剑飘红007 2013-06-08  
正在使用,谢谢
5 楼 ddh9504 2008-07-02  
警戒线可以玩不咯,满哥
4 楼 ddh9504 2008-07-02  
收到,谢谢,不错!
3 楼 lxl686 2008-04-06  
   我的也显示不出来,在IE6.0里面.  我把它部署在weblogic里面跑的..页面能够加载,但是选择后脚本就出错啦!
2 楼 javafound 2008-03-13  
不会吧,我刚试了的,是不是你在FF上试的?
  换IE试下,可能是我的js不标准。
1 楼 yuanjie_1983 2008-03-13  
楼主的代码确实不错!我将你的WAR文件下载以后部署到TOMCAT的WEBAPPS目录下启动服务,可以正常运行,但是生成的图片确显示不出来?生成的图片显示一个x符号 不知道是什么原因?

相关推荐

    jFreeChart展示web图表-五分钟上手.zip

    在Web应用程序中,jFreeChart可以帮助开发者轻松地创建动态、交互式的图表,以直观地展示数据。本教程将带你快速掌握如何在Web项目中使用jFreeChart。 ### 1. 安装与引入jFreeChart 首先,你需要将jFreeChart库...

    jfreechart-1.0.19

    JFreeChart 是一个功能丰富的开源Java类库,专为在Java应用程序和Web应用中创建各种类型的图表而设计。这个库提供了广泛的数据可视化功能,包括折线图、柱状图、饼图、散点图、甘特图以及更多其他类型,使得开发者...

    jfreechart 1.0.19 源码加文档和依赖包

    JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的2D图表,如柱状图、饼图、线形图、散点图等,适用于报表、数据分析和可视化应用。1.0.19版本是其稳定的一个版本,包含了丰富的功能和优化。 1. **...

    jfreechart-1.0.9

    此外,由于JFreeChart是纯Java实现,因此它也适用于跨平台的Web应用,通过Servlet或JSP技术,可以在服务器端生成图表并返回给客户端。 总结起来,JFreeChart-1.0.9是一个强大且灵活的Java图表库,它提供了丰富的...

    jfreechart-1.0.17demo源码

    8. **API使用**:源码中的`JFreeChartFactory`类封装了许多创建常见图表的便捷方法,通过研究其源码,可以快速上手JFreeChart的API使用。 总的来说,JFreeChart 1.0.17 Demo 源码是一个宝贵的教育资源,不仅提供了...

    jfreechart-1.0.12-javadocs

    - **Web应用**:与Servlet结合,可实现在Web页面上动态展示图表。 - **桌面应用**:在Java Swing或JavaFX应用中,JFreeChart能够增强用户界面的视觉效果。 8. **版本更新** - **1.0.12**:这个版本可能修复了...

    Jfreechart--demo

    在Java应用程序、Web应用和报告系统中,JFreeChart经常被用来可视化数据,提供直观的数据展示。 **1. JFreeChart的核心功能** - **多种图表类型**:JFreeChart支持多种常见的图表类型,如条形图、饼图、折线图、...

    jfreechart-1.0.9-demos.zip

    JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的2D图表,如折线图、柱状图、饼图、散点图等。在"jfreechart-1.0.9-demos.zip"这个压缩包中,包含了JFreeChart 1.0.9版本的演示示例代码。这些示例对于...

    java图形jfreechart-0.9.16

    5. **Web应用支持**:在Servlet环境下,JFreeChart可以通过生成动态图像(例如GIF或PNG)来在Web页面上展示图表,这对于基于Web的数据分析和报告系统来说非常有用。 6. **兼容性好**:JFreeChart与Java Swing、...

    jfreechart-1.0.14.zip(含demo)

    总结,JFreeChart 是一个强大且灵活的 Java 图表库,通过提供的 "jfreechart-1.0.14.zip" 压缩包,开发者不仅可以获取最新版本的库,还能通过演示程序快速上手,进一步提升开发效率和图表质量。无论是数据分析、报告...

    jfreechart的jar包

    1. **多样的图表类型**:JFreeChart 提供了多种图表类型,满足不同数据展示需求。例如: - 折线图(Line Chart):适合展示趋势和变化。 - 柱状图(Bar Chart):用于比较类别之间的数量差异。 - 饼图(Pie Chart...

    JFreeChart,Java开源图表框架

    **JFreeChart:Java世界的图表大师** 在Java开发领域,数据可视化是不可或缺的一部分,而JFreeChart正是这样一个强大的开源图表库,它为开发者提供了丰富的图表类型和高度自定义的选项,使得创建美观、专业的数据...

    JFreeChart架包+demo+源码

    通过 JFreeChart 提供的 demo 和源码,开发者可以快速上手并深入了解每个功能的工作原理。这些资源提供了丰富的实例,帮助开发者解决实际问题,并激发创新。 总结起来,JFreeChart 是一个强大且灵活的图表库,为...

    jfreechart的jar包(全+中文教程)

    JFreeChart是一款强大的Java图表库,它为开发者提供了创建各种静态和动态图表的功能。这个压缩包包含JFreeChart所需的所有核心组件,以及相关的依赖库,如jcommon.jar,确保你可以全面地利用JFreeChart的强大功能。 ...

    jfreechart-1.0.3.jar

    **JFreeChart 1.0.3:Java图表库的详解** JFreeChart是一个流行的开源Java库,用于创建高质量的2D图表。标题中的"jfreechart-1.0.3.jar"指的是JFreeChart库的1.0.3版本的Java归档(JAR)文件,这个文件包含了所有...

    jfreechart-1.0.8a

    其次,作为一款插件,JFreeChart 可轻松集成到各种Java应用程序中,无论是桌面应用、Web应用还是服务器端应用。其API设计简洁明了,便于开发人员快速上手。通过调用相应的API方法,可以方便地创建、更新和渲染图表。...

    jfreechart画图文档

    - **Web应用框架**:Spring MVC、Struts等框架中可以集成JFreeChart,方便地在Web应用中展示图表。 5. **学习资源**: - **官方文档**:虽然标题提到是英文版,但官方文档详尽且具有指导性,对于掌握JFreeChart...

    jfreechart-1.0.9.rar

    同时,JFreeChart还支持生成静态和动态的图表,可直接嵌入到Swing、JavaFX等桌面应用,或者通过Servlets和JSP用于Web应用。 4. **数据驱动**:JFreeChart能够处理各种数据源,如数组、集合、数据库查询结果等,这...

    JFreeChart:源自jfreechart-1.0.19的JFreeChart克隆

    同时,通过阅读JFreeChart的API文档和示例代码,可以快速上手并实现自己的图表应用。 总之,JFreeChart作为一款强大的Java图表库,对于需要数据可视化的Java项目来说,是一个不可或缺的工具。其克隆版本"JFreeChart...

Global site tag (gtag.js) - Google Analytics