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

jfreechart与struts2结合,实现折线图、饼状图、柱状图的页面显示

阅读更多

工作辞了,找工作之余,学习了一下jfreechart图表生成,结合大虾们的著作,小弟进行了系统的总结如下(获益匪浅):

    struts2与jfreechart结合首先需要一个插件包struts2-jfreechart-plugin-2.1.6.jar;然后导入jfreechart的

两个包以及struts2的7个应用包、包结构见附件a.jpg;附件有项目的压缩包,大家可以下载使用一下。

    写一个公用的service类,里面包含生成柱状图、饼状图、折线图的方法,另附件提供一份jfreechart所有类和方法的

详细解释,你可以根据这些方法把图表设置的美轮美奂。

package aokunsang.chartControl;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.io.FileOutputStream;
import java.text.DecimalFormat;
import java.text.NumberFormat;

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.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;

public class JFreeChartService {
	

//----------------------------------------获取饼状图开始-------------------------------------------------------
	/**
	 * 获取饼状图
	 * @return
	 */
	public static JFreeChart createPieChart(){
		PieDataset pieData = getPieDataset();
		JFreeChart pieChart = ChartFactory.createPieChart3D("水果销量图", pieData, true, true, false);
		PiePlot3D piePlot = (PiePlot3D)pieChart.getPlot();
		piePlot.setBackgroundPaint(Color.WHITE);
		piePlot.setLabelFont(new Font("黑体",Font.BOLD,15));
		resetPlot(piePlot);
		
		pieChart.getLegend().setItemFont(new Font("黑体",Font.BOLD,15));  //设置引用标签字体
		
		pieChart.getTitle().setFont(new Font("华文行楷",Font.BOLD,32));
		
		return pieChart;
	}
	private static PieDataset getPieDataset(){
		DefaultPieDataset data = new DefaultPieDataset();
		data.setValue("苹果", 260);
		data.setValue("荔枝", 250);
		data.setValue("橘子", 150);
		data.setValue("香蕉", 140);
		data.setValue("菠萝", 200);
		return data;
	}
	private static void resetPlot(PiePlot3D pieplot){
		String unitStyle = "{0}={1}({2})";
		
		pieplot.setNoDataMessage("没有对应的数据,请重新查询");
		pieplot.setNoDataMessageFont(new Font("华文行楷",Font.BOLD,21));
		pieplot.setNoDataMessagePaint(Color.BLUE);
		
//		pieplot.setToolTipGenerator(new StandardPieToolTipGenerator(
//										unitStyle,
//										NumberFormat.getNumberInstance(),
//										new DecimalFormat("0.00%"))
//									);
		
		//设置图例显示样式
		pieplot.setLabelGenerator(new StandardPieSectionLabelGenerator(
										unitStyle,
										NumberFormat.getNumberInstance(),
										new DecimalFormat("0.00%"))
								    );
		//设置引用标签显示样式
		pieplot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(
				   unitStyle,
				   NumberFormat.getNumberInstance(),
				   new DecimalFormat("0.00%")));
	}
	。。。。。。。

 

然后写三个Action,分别用于显示三种图例,它们的方法几乎相同。Action中都得定义一个JFreeChart,对象名字必须

为chart。

public class BarFreeChartAction extends ActionSupport {

	private JFreeChart chart;
	
	
	public JFreeChart getChart() {
		return chart;
	}


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


	public String execute(){
		this.setChart(JFreeChartService.createBarChart());
		return SUCCESS;
	}
}

    最重要的就是struts.xml配置文件。

   

<package name="jfreechartPackage" extends="jfreechart-default" namespace="/">
		
	<!-- 柱状图 -->
	<action name="barFreeChartAction" class="aokunsang.action.BarFreeChartAction">
		<result name="success" type="chart">
			<param name="width">700</param>
			<param name="height">400</param>
		</result>
	</action>
	

 

    需要继承jfreechart-default.xml,可查看struts2-jfreechart-plugin-2.1.6.jar中org.apache.struts2.dispatcher包下面的struts-plugin.xml文件:

<struts>
    <package name="jfreechart-default" extends="struts-default">
    
    	<result-types>
    		<result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult">
    			<param name="height">150</param>
    			<param name="width">200</param>
    		</result-type>
    	</result-types>
    </package>

</struts>

 

最后就是简单的jsp文件了:

<html>
  <head>
    <title>jfreechart的图例</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="Content-Type" content="UTF-8">      
  <body>
  <center>饼状图和柱状图的效果呈现如下</center>
  饼状图(3D图):<br/>
  <img border="0" src="pieFreeChartAction.action"><p>&nbsp;</p>
  柱状图(3D图):<br/>
  <img border="0" src="barFreeChartAction.action"><p>&nbsp;</p>
  折线图(非3D图):<br/>
  <img border="0" src="lineFreeChartAction.action">
  </body>
</html>

 

 

  • 大小: 36.8 KB
  • 大小: 79.7 KB
  • 大小: 88.7 KB
分享到:
评论
2 楼 dong8yi1ke5 2013-03-29  
1 楼 kingboy0502 2010-12-01  
感觉都一样~!!!

相关推荐

Global site tag (gtag.js) - Google Analytics