`
caiying0504
  • 浏览: 341490 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JfreeChar结合struts2展示柱状图和饼状图(已解决乱码问题)

阅读更多

1.导入需要的jar包(下载见附件)

struts2-jfreechart-plugin-2.0.11.jar

jcommon-1.0.0.jar

jfreechart-1.0.14.jar

 

2.编写xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <package name="AnalysisAction" > 
    
	<result-types> 
  		<result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult"/> 
	</result-types> 
		
	<action name="getGenderBar" method="getGenderBar" class="analysisAction"> 
	  <result name="success" type="chart"> 
	    <param name="chart">chart</param> 
	    <param name="height">300</param> 
	    <param name="width">480</param> 
	  </result> 
	</action> 
	
	<action name="getGenderPie" method="getGenderPie" class="analysisAction"> 
	  <result name="success" type="chart"> 
	    <param name="chart">chart</param> 
	    <param name="height">300</param> 
	    <param name="width">480</param> 
	  </result> 
	</action> 
	</package>
</struts>

* 注意开头部分result-type name="chart",status2的返回类型没有“char”类型,需要添加此返回类型。

 

3.编写生成图片的工具类BarChartUtil.java和status2的Acion

BarChartUtil.java

 

import java.awt.BasicStroke;
import com.rlzy.basic.AnalysisInfo;

public class BarChartUtil {

	public static CategoryDataset createBarDataset(List<AnalysisInfo> list,
			int type) {
		DefaultCategoryDataset localDefaultCategoryDataset = new DefaultCategoryDataset();
		String rowkey = "";
		String columnkey = "";
		for (AnalysisInfo analysisInfo : list) {
			columnkey = AnalysisTypeConstants.getTypeName(type, analysisInfo
					.getType());
			rowkey = columnkey;
			localDefaultCategoryDataset.addValue(analysisInfo.getCount(),
					rowkey, columnkey);
		}
		return localDefaultCategoryDataset;
	}
	
	public static PieDataset createPieDataset( List<AnalysisInfo> list,int type)
	  {
	    DefaultPieDataset localDefaultPieDataset = new DefaultPieDataset();
	    String key="";
	    for(AnalysisInfo analysisInfo:list){
	    	key = AnalysisTypeConstants.getTypeName(type, analysisInfo.getType());
	    	localDefaultPieDataset.setValue(key,analysisInfo.getCount());
	    }
	    
	    return localDefaultPieDataset;
	  }


	public static JFreeChart createBarChart(String title,
			String categoryAxisLabel, String valueAxisLabel,
			CategoryDataset paramCategoryDataset) {
		// 创建主题样式
		StandardChartTheme standardChartTheme = new StandardChartTheme("CN");
		// 设置标题字体
		standardChartTheme.setExtraLargeFont(new Font("隶书", Font.BOLD, 20));
		// 设置图例的字体
		standardChartTheme.setRegularFont(new Font("宋书", Font.PLAIN, 15));
		// 设置轴向的字体
		standardChartTheme.setLargeFont(new Font("宋书", Font.PLAIN, 15));
		// 应用主题样式
		ChartFactory.setChartTheme(standardChartTheme);
		JFreeChart jfreechart = ChartFactory.createBarChart3D(title, // 图表标题
				categoryAxisLabel, // 目录轴的显示标签
				valueAxisLabel, // 数值轴的显示标签
				paramCategoryDataset, // 数据集
				PlotOrientation.VERTICAL, // 图表方向:水平、垂直
				true, // 是否显示图例(对于简单的柱状图必须是false)
				true, // 是否生成工具
				true // 是否生成URL链接
				);
		// chart.getTitle().setFont(new Font("宋体", Font.BOLD,12));
		NumberAxis axis = (NumberAxis) jfreechart.getCategoryPlot()
				.getRangeAxis();

		axis.setTickUnit(new NumberTickUnit(5));// 0.5为一个间隔单位 Y

		return jfreechart;
	}

	public static JFreeChart createPaiChart(String title,
			PieDataset pieDataset) {
		// 创建主题样式
		StandardChartTheme standardChartTheme = new StandardChartTheme("CN");
		// 设置标题字体
		standardChartTheme.setExtraLargeFont(new Font("隶书", Font.BOLD, 20));
		// 设置图例的字体
		standardChartTheme.setRegularFont(new Font("宋书", Font.PLAIN, 15));
		// 设置轴向的字体
		standardChartTheme.setLargeFont(new Font("宋书", Font.PLAIN, 15));
		// 应用主题样式
		ChartFactory.setChartTheme(standardChartTheme);
		JFreeChart chart = ChartFactory.createPieChart3D(
				title, // 图表标题
				pieDataset, true, // 是否显示图例
				false, false);
		PiePlot plot = (PiePlot) chart.getPlot();
		resetPiePlot(plot);
		return chart;
	}

	private static void resetPiePlot(PiePlot plot) {
		String unitSytle = "{0}={1}({2})";

		plot.setNoDataMessage("无对应的数据,请重新查询。");
		plot.setNoDataMessagePaint(Color.red);

		// 指定 section 轮廓线的厚度(OutlinePaint不能为null)
		plot.setOutlineStroke(new BasicStroke(0));

		// 设置第一个 section 的开始位置,默认是12点钟方向
		plot.setStartAngle(90);

//		plot.setToolTipGenerator(new StandardPieToolTipGenerator(unitSytle,
//				NumberFormat.getNumberInstance(), new DecimalFormat("0.00%")));

		// 指定图片的透明度
		plot.setForegroundAlpha(0.65f);

		// 引出标签显示样式
//		plot.setLabelGenerator(new StandardPieSectionLabelGenerator(unitSytle,
//				NumberFormat.getNumberInstance(), new DecimalFormat("0.00%")));

		// 图例显示样式
		plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(
				unitSytle, NumberFormat.getNumberInstance(), new DecimalFormat(
						"0.00%")));
	}

}

 

 AnalysisAction.java

public class AnalysisAction extends ActionSupport {

	private BasicInfo basicInfo;
	private BasicService basicService;


	private static final long serialVersionUID = 1L; 
    private JFreeChart chart; 

	@Override 
	public String execute() throws Exception { 
		return SUCCESS; 
	} 
	
	public String getGenderBar() throws Exception { 
		List<AnalysisInfo> analysisList = basicService.getAnalysisByGender();
		CategoryDataset dataset = BarChartUtil.createBarDataset(analysisList, 1); 
	    chart = BarChartUtil.createBarChart("性别统计图", "性别", "人数", dataset);
		return SUCCESS; 
	} 
	
	public String getGenderPie() throws Exception { 
		List<AnalysisInfo> analysisList = basicService.getAnalysisByGender();
		PieDataset dataset = BarChartUtil.createPieDataset(analysisList, 1); 
	    chart = BarChartUtil.createPaiChart("性别统计图", dataset);
		return SUCCESS; 
	} 
			
	public BasicService getBasicService() {
		return basicService;
	}

	public void setBasicService(BasicService basicService) {
		this.basicService = basicService;
	}

	public void setChart(JFreeChart chart) {
		this.chart = chart;
	}

	public JFreeChart getChart() { 
		return chart; 
	} 


}

 

AnalysisInfo .java

import com.rlzy.util.Util;

public class AnalysisInfo {

	private String type; // 类型
	private int count; // 个数

	public AnalysisInfo(String type, int count) {
		super();
		this.type = type;
		this.count = count;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}

	public AnalysisInfo() {
		super();
	}

}

 

4.编写展示jsp页面

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

<% 
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>人力资源管理系统</title>
<base href="<%=basePath%>">
<link href="<%=path%>/styles/sty.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="<%=path %>/js/development-bundle/jquery.js"></script>
<style type="text/css">
<!--
body { background:#f2f2f2; }
-->
</style>
</head>
<script type="text/javascript">

$().ready(function() {

	$("#gender").change(function(){
		var gender =  $("#gender").val();		
		if(gender=="1"){
			$("#genderSrc").attr("src", "getGenderBar.action")
		}else{
			$("#genderSrc").attr("src", "getGenderPie.action");
		}
		
	});
	
	})

</script>
<body>

<div class=" title_ljt">
	<div class=" w50 floatleft">
            <div class="border">
                <div class=" title9">
                    <div class=" title9_a"></div>
                    <div class=" title9_b">按性别统计图示</div>
                    <div class=" title9_c">
                    	<select id="gender" name="gender"><option value="1">柱状图</option> <option value="2">饼状图</option> </select>
					</div>
                </div>
                <div class="h5"></div>
              	<div class="w100 aligncenter">
                  <img id="genderSrc" src="getGenderBar.action" />
              	</div>
                <div class="h10"></div>
            </div>
    	</div></div>
</body>
</html>

 

分享到:
评论
1 楼 songzht 2012-12-09  
看了上面的代码,这两个类型是怎么定义的?
private BasicInfo basicInfo;
private BasicService basicService;

相关推荐

    JFreeChar图表生成柱状图和饼状图源码

    在"JFreeChar图表生成柱状图和饼状图源码"的压缩包中,我们很可能找到了创建这两种图表的示例源代码。 柱状图是一种常用的数据可视化工具,它将数据的每个类别表示为一个垂直或水平的矩形条,长度表示数值大小。...

    JFreeChar制作饼图和柱状图

    JFreeChart是一款强大的Java图形库,它允许开发者创建各种类型的统计图表,如饼图、柱状图、线图、...在实际项目中,可以结合数据库或其他数据源动态加载数据,从而生成动态图表,使数据的分析和展示更加灵活和生动。

    JFreeChar 动态横向柱状图

    JFreeChar 动态横向柱状图,带纵向滚动条,可根据数据自动计算滚动条长度,可自定义系统柱子颜色,定时刷新

    jfreechar 实现生成柱状图,饼图,曲线,

    JFreeChart 是一个开源的Java库,用于生成各种类型的图表,包括柱状图、饼图和曲线图等。它提供了一种灵活的方式来创建高质量的2D图表,可以在各种Java应用程序中使用,例如桌面应用、Web应用或者服务器端应用。下面...

    jfreechar 整合struts2.1.8版本生成线图,饼图,柱形图

    jfreechar 整合struts2.1.8版本生成线图,饼图,柱形图 直接导入eclipse 或myeclipse 即可运行,里面含有lib ,及运行详细说 如:&lt;!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts ...

    Struts2 与JFreeChart结合使用实例

    结合Struts2和JFreeChart,开发者可以创建交互式、数据丰富的Web应用,将后台处理的数据以图形方式展示给用户,提升用户体验。下面我们将深入探讨如何在Struts2框架中集成JFreeChart,并通过一个实际的运行实例来...

    JFreeChar柱状图实例

    通过以上步骤,我们就成功地使用JFreeChart创建了一个展示销售数据的柱状图。在实际项目中,可以根据需求调整数据源、图表样式以及交互功能,如添加工具提示、点击事件等。JFreeChart的强大之处在于它的灵活性,可以...

    java实现柱状图

    Java 实现柱状图是指使用 Java 语言创建柱状图、饼状图、曲线图等图形的一种技术。通过使用 JFreeChart 库,可以轻松地创建各种类型的图形。下面将对 Java 实现柱状图的相关知识点进行详细介绍。 1. JFreeChart 库 ...

    Struts2整合JFreeChar实例

    次实例是Struts2和JFreeChar的整合,下载后解压导入到ide中,输入http://localhost:8080/Struts2_JFreeChart/jfreechart/jfreeChart.action或者...就能看到相应的效果

    JFreeChar jar包 中文不乱码

    JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的高质量图表,如柱状图、饼图、线图、散点图等,广泛应用于数据分析、报表制作和可视化应用中。在处理中文数据时,可能会遇到乱码问题,这通常与字符...

    jfreeChar 折线图+柱形图(混合图) +最新Jar包及例子

    在这个特定的案例中,我们关注的是如何利用JFreeChart来创建折线图和柱形图的混合图表,这种图表在数据可视化中非常常见,能够同时展示两个不同数据系列的趋势和比较。 首先,让我们深入了解一下JFreeChart的基本...

    struts1整合jfreechar,读取EXCEL数据

    而JFreeChart是一个强大的Java库,用于创建各种类型的图表,如饼图、柱状图、线图等,非常适合在Java应用中展示数据。在本项目中,我们将Struts1与JFreeChart结合,用于读取Excel数据并生成图表。 首先,我们需要...

    jfreechar画图源代码

    JFreeChart是一款强大的Java图形库,它允许开发者创建多种类型的图表,如饼状图、柱状图、曲线图等,广泛应用于数据可视化和报告生成。本资料提供的"jfreechar画图源代码"包含了作者自己编写的能运行并显示结果的...

    jfreechar最新jar包

    jfreechar最新jar包 JFreeChart目前是最好的java图形解决方案,基本能够解决... (态图表,饼图(二维和三维) , 柱状图 (水平,垂直),线图,点图,时间变化图,甘特图, 股票行情图,混和图, 温度计图, 刻度图等常用商用图表)

    jfreechar各种图

    JFreeChart是一款强大的Java库,用于创建各种类型的图表,如折线图、柱状图、饼图、散点图、甘特图等。这个库在IT行业中被广泛使用,特别是在需要进行数据可视化的应用程序中。它允许开发人员通过简单的API调用来...

    JFreeChar 动态曲线图

    JFreeChar 动态曲线图,定时刷新,带节点事件

    JFreeChar 柱图实现

    在数据分析与展示领域,柱状图(Bar Chart)是一种非常常见的数据可视化工具,它能够直观地比较不同类别的数值大小,尤其适用于显示离散数据集。JFreeChart作为Java平台上的一个开源图表库,提供了丰富的API来创建...

    JfreeChar示例

    通过以上步骤,我们可以构建一个功能完善的图表展示系统,利用 JFreeChart 的强大功能,结合 JSP、Servlet 和 DAO 设计模式,实现动态生成并展示各种类型的图表。这个示例项目是一个很好的起点,帮助开发者快速上手 ...

    jfreechar 世纪应用中的线性图

    jfreechar 世纪应用中的线性图 jfreechar 世纪应用中的线性图 jfreechar 世纪应用中的线性图

    JFreeChar做各种图表

    JFreeChart是一款强大的开源Java图表库,它允许开发者创建各种复杂的图表,包括折线图、饼状图、柱状图、散点图、甘特图等多种类型。这个项目已经预置了各种图表示例,部署后可以直接运行,为用户提供直观的数据可视...

Global site tag (gtag.js) - Google Analytics