`

使用Jfreechart实现带热点的饼状图

阅读更多

JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图 (Gantt charts)等等多种图表,并且可以产生PNG和JPEG格式 的输出,还可以与PDF和EXCEL关联。

  JFreeChart目前是最好的java图形解决方案,基本能够解决目前的图形方面的需求。

今天给大家介绍一下如何在一个頁面中嵌入一个带热点的饼状图.如下图所示:

 

完整范例如下:

 

1. 在SSH框架中添加Jfreechart 所依賴的Jar包:jfreechart-1.0.9.jar和 jcommon-1.0.12.jar

 

2. 在Action 創建一個餅狀圖的DataSet對象,用來保存從數據庫讀取的數據.

 

package com.crms.web.dwr;

import java.util.List;

import org.jfree.data.general.DefaultPieDataset;
import com.crms.biz.StatisticsBiz;
import com.crms.pojo.Customerinfo;
import com.crms.pojo.msms.Orderdetail;
import com.crms.pojo.msms.Orders;
import com.opensymphony.xwork2.ActionSupport;

/**
 * 统计报表模块
 * 
 * @author Liyongbin
 * @date 2010-01-15
 * 
 */

public class StatisticsAction extends ActionSupport {

	private static final long serialVersionUID = -9195275764281964720L;
	private StatisticsBiz statisticsBiz;
	private List<Orderdetail> orderdetailList;
	private Customerinfo customerinfo;
	// 饼状图数据对象
	private DefaultPieDataset pieDataSet = new DefaultPieDataset();



	public StatisticsBiz getStatisticsBiz() {
		return statisticsBiz;
	}

	public void setStatisticsBiz(StatisticsBiz statisticsBiz) {
		this.statisticsBiz = statisticsBiz;
	}

	public List<Orderdetail> getOrderdetailList() {
		return orderdetailList;
	}

	public void setOrderdetailList(List<Orderdetail> orderdetailList) {
		this.orderdetailList = orderdetailList;
	}

	public Customerinfo getCustomerinfo() {
		return customerinfo;
	}

	public void setCustomerinfo(Customerinfo customerinfo) {
		this.customerinfo = customerinfo;
	}

	public DefaultPieDataset getPieDataSet() {
		return pieDataSet;
	}

	public void setPieDataSet(DefaultPieDataset pieDataSet) {
		this.pieDataSet = pieDataSet;
	}

	/**
	 * 贡献分析--查询所有记录
	 */
	public String queryOfferUp() {
		/**
		 * 1.由从msms数据中查询到的用户ID, 2.再由用户ID从crms数据库获取用户的名称 3.将用户称显示在JSP中
		 */
		String customerId = null;
		try {
			// 1.由从msms数据中查询到的用户ID
			orderdetailList = statisticsBiz.getOrderdetailService().queryAll();
			// 设置迭代因子
			Integer i = 0;
			// 将所有的用户ID(String),迭代替换成用户名称(String)
			for (Orderdetail orderdetail_2 : orderdetailList) {
				customerId = ((Orders) (orderdetail_2.getOrders()))
						.getCustomer_id();
				// 得到用户的名称
				customerinfo = statisticsBiz.getCustomerinfoService()
						.queryById(customerId);
				// 迭代替换
				((Orders) (orderdetailList.get(i).getOrders()))
						.setCustomer_id(customerinfo.getCustomerName());
				// 给JFreeChart传数据
				pieDataSet.setValue(customerinfo.getCustomerName(), orderdetail_2
						.getSub_price());
				i++;
			}
			// 传给JSP页面
			//request_1.put("dataSet", dataSet);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "success";
	}

	@Override
	public String execute() throws Exception {
		return super.execute();
	}

	/**
	 * 用于超链接
	 * 
	 * @return
	 */
	public String success() {
		return "success";
	}

}

 

3. 配置struts.xml文件

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
	"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<!-- 拦截struts的扩展名  -->
	<constant name="struts.action.extension" value="action,"/>
	<!-- 开发模式  -->
	<constant name="struts.devModel" value="true"/>
value="crms"/>
	<package name="statistics" namespace="/statistics" extends="jfreechart-default">
		<action name="userinfo" class="userinfoAction">

			<result name="success">
				/WEB-INF/jsp/index.jsp
			</result>
			<result name="error">
				/login.jsp
			</result>
		</action>

		<action name="link_*" class="statisticsAction">
			<result name="success">
				/WEB-INF/jsp/statisticsReport/{1}.jsp
			</result>
		</action>

	</package>
</struts>

 

4. 寫JSP頁面offerUp.jsp

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>

<%@page import="org.jfree.data.general.DefaultPieDataset"%>
<%@page import="org.jfree.chart.plot.PiePlot3D"%>
<%@page import="java.awt.Font"%>
<%@page import="org.jfree.chart.title.LegendTitle"%>
<%@page import="org.jfree.chart.title.TextTitle"%>
<%@page import="org.jfree.chart.JFreeChart"%>
<%@page import="org.jfree.chart.labels.StandardPieToolTipGenerator"%>
<%@page import="org.jfree.chart.imagemap.StandardURLTagFragmentGenerator"%>
<%@page import="org.jfree.chart.urls.StandardPieURLGenerator"%>
<%@page import="org.jfree.chart.entity.StandardEntityCollection"%>
<%@page import="org.jfree.chart.ChartRenderingInfo"%>
<%@page import="java.io.PrintWriter"%>
<%@page import="org.jfree.chart.servlet.ServletUtilities"%>
<%@page import="org.jfree.chart.ChartUtilities"%>

<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<%--分析贡献 --%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<base href="<%=basePath%>">

		<title>createDictionary</title>
		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">
		<link href="jsp/../css/style.css" type="text/css" rel="stylesheet">
		<style type="text/css">
.btnStyle {
	border: #2C59AA 1px solid;
	padding: 3px 2px 0px 5px;
	margin-left: 2px;
	width: 40px;
	height: 20px;
	FILTER: progid :         DXImageTransform.Microsoft.Gradient (    
		  GradientType =   
				     0, StartColorStr =         #ffffff, EndColorStr =        
		#C3DAF5 );
	cursor: hand;
}

#btnSave,#btnReturn,#btnHelp {
	float: left;
}

#button {
	float: right;
}

#operate div,th,tr td {
	font-size: 13px;
}

#condition {
	clear: both;
}

.statisticsIcon {
	background: url(images/statistics_report.png) no-repeat;
	margin-left: 10px;
	width: 43px;
	height: 40px;
}
 /*饼状图*/
.caky {
	background-position: -88px -2px;
} 
.caky_over {
	background-position: -88px -105px;
} 

#showJfreechart,jfreechart{
	float:left;
}
#statisticsReport{
	height:10px;
}
/*导出office*/
.exportIcon{
	background: url(images/office.gif) no-repeat;
	margin-left: 5px;
	width: 43px;
	height: 40px;
}
.export2Excel{
	background-position: -2px -2px;
}
.export2Excel_over{
	background-position: -2px -78px;
}
#exportSheet,#showJfreechart{
	float:left;
	cursor:hand;
}
</style>
<script type="text/javascript" src="js/jquery-1.3.2.js"></script>
	<script type="text/javascript">
		  $(document).ready(function(){
			 //统计图图标的响应事件
			 $("#showJfreechart").bind("click",function(){
			 var $content = $('#jfreechart');
				 if($content.is(":visible")){
					$content.hide(1000);
				 }else{
					$content.show(1000);
				 }
			 })
			 //鼠标经过统计图标按钮 //鼠标离开按钮
		    $("#showJfreechart").hover(function(){
		    	$(this).addClass("caky_over");
			},function(){
				$(this).removeClass("caky_over");
			})
			 //导出Excel图标的响应事件
			  $("#exportSheet").bind("click",function(){
				  window.location.href="excel_offerUp";
			 })
			 //鼠标经过导出Excel图标按钮 //鼠标离开按钮
		    $("#exportSheet").hover(function(){
		    	 $(this).addClass("export2Excel_over");
			},function(){
				$(this).removeClass("export2Excel_over");
			})
		  });
  </script>
	</head>

	<body>
	<div id="page">
		<div id="operate">
				<div id="position">
				数据统计 &gt;&gt;
					<strong>分析客户贡献</strong>
				</div>
				<div id="button">
					<div id="btnSave" class="btnStyle">
						保存
					</div>
					<div id="btnReturn" class="btnStyle">
						返回
					</div>
					<div id="btnHelp" class="btnStyle">
						帮助
					</div>
				</div>
			</div>

<div id="form">
<table class="query_form_table">
	<tr>
		<th>客户名称</th>
		<td><input /></td>
		<th>年份</th>
		<td>
			<select>
				<option>全部</option>
				<option>2005</option>
				<option>2006</option>
				<option>2007</option>
				<option>2008</option>
				<option>2009</option>
				<option>2010</option>
			</select>
		</td>
		<td>
			<div class="statisticsIcon caky" id="showJfreechart">
				&nbsp;
			</div>
			<div class="exportIcon export2Excel" id="exportSheet">
				&nbsp;
			</div>
		</td>
	</tr>
	</table>

	<div id="statisticsReport">
		<div id="jfreechart" style="display: none;">
		<br/>
			<%
			//创建所需的数据
			DefaultPieDataset data = new DefaultPieDataset();
			data=(DefaultPieDataset)request.getAttribute("pieDataSet");
			//创建3D饼状图的Plot对象
			PiePlot3D plot = new PiePlot3D(data);
			plot.setLabelFont(new Font("隶书", Font.BOLD, 16));
			//生成图表
			JFreeChart chart = new JFreeChart("",
					JFreeChart.DEFAULT_TITLE_FONT, plot, true);
			//标题
			chart.setTitle(new TextTitle("客户贡献统计图", new Font("黑体", Font.BOLD,
					22)));
			//图例
			LegendTitle legend = chart.getLegend(0);
			legend.setItemFont(new Font("宋体", Font.BOLD, 14));
			//生成提示
			plot.setToolTipGenerator(new StandardPieToolTipGenerator());
			//设置热点链接
			plot.setURLGenerator(new StandardPieURLGenerator("statistics/link_offerUpDetail!success"));
			//
			StandardEntityCollection entityCollection = new StandardEntityCollection();
			//将图片放在临时目录下
			ChartRenderingInfo info = new ChartRenderingInfo(entityCollection);
			PrintWriter pw = new PrintWriter(out);
			//720是图片长度,450是图片高度
			String filename = ServletUtilities.saveChartAsPNG(chart,720,450,info,session);
			ChartUtilities.writeImageMap(pw, "map0", info, false);
			//
			String url = basePath+ "/servlet/DisplayChart?filename=" + filename;//request.getContextPath()
			pw.flush();
		%>
		<img src="<%=url%>" alt="<%=url%>" width="750" height="450"	usemap="#map0" border="1" />
		</div>	
	</div>
</div>
	<div id="list">
		<br />
			<table class="data_list_table">
				<tr>
					<th>编号</th>
					<th>客户名称</th>
					<th>订单金额(元)</th>
				</tr>
				<!-- 读取数据库开始 -->
				<s:iterator value="#request.orderdetailList" id="orderdetail" status="i">
				<tr>
					<td class="list_data_text"><s:property value="#i.index+1"/></td>
					<td class="list_data_text"><s:property value="#orderdetail.orders.customer_id"/></td>
					<td class="list_data_text"><s:property value="#orderdetail.sub_price"/></td>
				</tr>
				</s:iterator>
				<!-- 读取数据库结束 -->
			</table>
		</div>
	</div>
	</body>
</html>

 

5. 配置web.xml文件

 

	
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<!-- 显示JFreeChart-->
	<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>

        <filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
                </filter-class>
	</filter>
	<!-- Struts2框架所拦截的文件后缀配置begin-->
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/statistics/*</url-pattern>
	</filter-mapping>

</web-app>	

 

6. 最后運行的結果如下圖所示:

  

 

  • 大小: 38.4 KB
  • 大小: 60.7 KB
0
0
分享到:
评论

相关推荐

    利用JFreeChart实现Java中饼状图、柱状图等图表并在Jsp中显示

    “利用JFreeChart实现Java中饼状图、柱状图等图表并在Jsp中显示”这个标题表明我们将探讨如何使用JFreeChart库来创建各种类型的图表,如饼状图和柱状图,并且这些图表能够在JavaServer Pages (JSP) 中展示。...

    JFreeChart入门_-_使用JFreeChart开发Pie(饼状图)

    在本教程中,我们将深入探讨如何使用 JFreeChart 创建饼状图(Pie Chart),这是一个常用于展示数据部分比例的可视化工具。 **创建 PieDataset 对象(准备数据)** 在 JFreeChart 中,饼状图的数据由 `PieDataset`...

    jfreechart实现3d饼状图

    要使用JFreeChart实现3D饼状图,你需要遵循以下步骤: 1. **引入JFreeChart库**:在Java项目中,你需要将JFreeChart的jar文件添加到类路径中。你可以从JFreeChart的官方网站下载最新的版本,或者通过Maven或Gradle...

    JFreeChart饼状图

    在Java开发领域,JFreeChart库是一个非常受欢迎的图表生成工具,它允许开发者轻松地创建各种图表,包括柱状图、线形图、饼状图等。本篇将重点介绍如何利用JFreeChart来创建3D和平面的饼状图,并提供详细的注释帮助...

    JFreeChart画图 饼状图 单组柱状图 多组柱状图 堆积柱状图 折线图

    JFreeChart 饼状图 柱状图 柱状图 堆积柱状图 折线图 这个是我特地开发的一个用JFreeChart开发的用来画图的项目,已经开发成形了各种项目的各种需求的项目,并且自己可以拓展,根据需求修改代码,完成项目的需要。 ...

    jfreechart 折线图、饼状图、柱状图

    JFreeChart中的`PiePlot`类是实现饼状图的关键。你可以指定数据集,每个数据项的值将决定饼图中相应扇形的大小。还可以调整标签的位置、角度、字体等细节。 3. **柱状图**:柱状图用于比较不同类别的数值。...

    flex +jfreechart生成 饼状图+曲线图+柱状图(完整版)

    在“flex jfreechart生成 饼状图”的场景下,我们首先需要在Java端使用JFreeChart库创建饼状图,然后将其转换为图像格式(如JPEG或PNG)。接着,Flex应用通过HTTP服务请求这个图像,并在前端以Image组件展示。这通常...

    JFreeChart生成3D饼状图及柱状图

    在这个特定的场景中,我们将关注如何使用JFreeChart生成3D饼状图和柱状图,并将这些图像保存到指定的文件目录下。 首先,我们需要了解JFreeChart的基本用法。JFreeChart的核心是`ChartFactory`类,它提供了静态方法...

    jfreechart饼状图

    jfreechart饼状图的生成可以通过使用DefaultPieDataset类来实现。DefaultPieDataset类是jfreechart库中的一个核心类,用于存储饼状图中的数据。通过设置DefaultPieDataset对象的setValue方法,可以添加数据到饼状图...

    java制作jfreechart柱状图 饼状图 折线图

    Java中的JFreeChart库是一个强大的工具,用于生成各种类型的图表,包括柱状图、饼状图和折线图。在本教程中,我们将深入探讨如何使用JFreeChart创建这些图表,以及如何用随机生成的数据作为数据源。 首先,...

    使用 jfreechart 生成 曲线、柱状图、饼状图、分布图 展示到JSP

    《使用JFreeChart生成曲线、柱状图、饼状图、分布图展示到JSP》 JFreeChart是一个强大的Java库,它允许开发者创建各种类型的图表,包括曲线图、柱状图、饼状图和分布图等。在当前JS图表库盛行的时代,JFreeChart...

    JFreeChart编写柱状图和饼状图及3D饼状图方法

    总的来说,JFreeChart是Java开发中实现数据可视化的强大工具,无论是简单的柱状图、饼状图,还是更具立体感的3D饼状图,都可以通过其提供的API轻松实现。通过熟练掌握JFreeChart的使用,开发者可以更好地将复杂的...

    利用jFreeChart做曲线图、饼状图、柱状图

    jFreeChart是java编程语言中一个功能强大、开源免费的图表库,能够生成各种类型的图表,包括曲线图、饼状图、柱状图等。通过jFreeChart,可以快速地生成高质量的图表,以满足不同领域的需求。 jFreeChart核心对象类...

    jfreechart使用SqlServer2000做的饼状图,柱状图,折线图

    2. 使用`JFreeChart`类创建图表实例,指定图表类型(如`ChartFactory.createBarChart()`用于柱状图,`ChartFactory.createPieChart()`用于饼状图,`ChartFactory.createLineChart()`用于折线图)。 3. 创建`...

    使用JFreeChart绘画条形图、饼状图以及折线图

    以上就是使用JFreeChart库在Java Web环境中创建条形图、饼状图和折线图的基本方法。你可以根据实际需求调整颜色、样式、标签等属性,以实现更复杂的图表功能。通过JFreeChart,你可以轻松地为Web应用程序添加强大的...

    jfreeChart生成的线状图,饼状图,柱状图

    JFreeChart是一款强大的Java图表库,它允许开发者在应用程序、Swing组件或Web应用中创建出各种复杂的图表,包括线状图、饼状图和柱状图。这些图表类型广泛应用于数据分析、报告制作以及可视化展示等领域。下面我们将...

    java利用JFreeChart实现各类数据统计图柱形图饼图折线图.pdf

    Java 中可以使用 JFreeChart 库来实现各种数据统计图,如柱形图、饼图、折线图等。下面将详细介绍如何使用 JFreeChart 库实现数据统计图。 首先,需要添加三个第三方包到 Java 项目中,分别是 jfreechart-1.0.13....

    JFreeChart 实现无乱码的柱状图和饼状图实例

    下面我们将详细探讨如何使用 JFreeChart 实现无乱码的柱状图和饼状图,并在 JSP 页面中正确显示。 首先,要解决中文乱码问题,我们需要确保所有环节的编码设置正确。这包括项目的源代码编码、JSP 页面编码以及 ...

    java 实现饼状图、柱状图、折线图

    在Java中,我们可以使用JavaFX或JFreeChart库来创建饼状图。JavaFX的`PieChart`类提供了直接创建饼图的功能,只需要设置各个扇区的值和标签即可。而JFreeChart则提供了更强大的自定义选项,如添加图例、调整颜色等。...

Global site tag (gtag.js) - Google Analytics