JSP+Struts2+JFreeChart显示图表+鼠标事件

Struts2+JFreeChart使用的是Struts2的返回类型来显示图片,但是在页面貌似没有鼠标事件,此方式可参考这篇:
1、http://liyanboss.javaeye.com/blog/181282
2、http://www.cnblogs.com/over140/articles/971663.html
以下JSP+Struts2+JFreeChart是能显示鼠标事件的,但是不是Struts2的返回类型,以下是实现。
action:

Java代码 复制代码
  1. package action;   
  2.   
  3. import java.awt.Rectangle;   
  4. import java.awt.Shape;   
  5. import java.io.IOException;   
  6. import java.io.PrintWriter;   
  7.   
  8. import javax.servlet.http.HttpServletRequest;   
  9. import javax.servlet.http.HttpServletResponse;   
  10.   
  11. import org.apache.struts2.ServletActionContext;   
  12. import org.jfree.chart.ChartFactory;   
  13. import org.jfree.chart.ChartRenderingInfo;   
  14. import org.jfree.chart.ChartUtilities;   
  15. import org.jfree.chart.JFreeChart;   
  16. import org.jfree.chart.entity.ChartEntity;   
  17. import org.jfree.chart.entity.StandardEntityCollection;   
  18. import org.jfree.chart.plot.PlotOrientation;   
  19. import org.jfree.chart.servlet.ServletUtilities;   
  20. import org.jfree.data.category.DefaultCategoryDataset;   
  21.   
  22. import com.opensymphony.xwork2.ActionSupport;   
  23.   
  24. public class LoginAction extends ActionSupport{   
  25.     //页面鼠标事件时需要的参数   
  26.     private String hy_filename;   
  27.     /**  
  28.      * 显示图片  
  29.      * @return  
  30.      */  
  31.     public String show(){   
  32.         HttpServletRequest req = ServletActionContext.getRequest();   
  33.         HttpServletResponse res = ServletActionContext.getResponse();   
  34.         hy_filename = createChartImage(req, res);   
  35.         return SUCCESS;   
  36.     }   
  37.        
  38.     private String createChartImage(HttpServletRequest req, HttpServletResponse res){   
  39.         JFreeChart chart = createChart(createData());   
  40.         String filename = createUseMap(chart, 510300, req, res);   
  41.         return filename;   
  42.     }   
  43.        
  44.     private JFreeChart createChart(DefaultCategoryDataset defaultcategorydataset){   
  45.         JFreeChart chart = ChartFactory.createLineChart(null//图形标题名称   
  46.         null,                       //domain轴 Lable,横坐标Lable   
  47.         null,                       //range 轴 Lable,纵坐标Lable   
  48.         defaultcategorydataset,     // dataset   
  49.         PlotOrientation.VERTICAL,   //垂直显示   
  50.         true,                       // legend?   
  51.         true,                       // tooltips?   
  52.         false);                     //URLs?   
  53.         return chart;   
  54.     }   
  55.        
  56.     private String createUseMap(JFreeChart chart, int width, int height, HttpServletRequest req, HttpServletResponse res){   
  57.         //在矩形框中显示信息   
  58.         Shape shape = new Rectangle(2010);   
  59.         ChartEntity entity = new ChartEntity(shape);   
  60.         StandardEntityCollection coll = new StandardEntityCollection();   
  61.         coll.add(entity);   
  62.         //该工具类上面没有介绍,在鼠标移动到图片时显示提示信息是用Map实现的,这些Map是用该类生成的。   
  63.         ChartRenderingInfo info = new ChartRenderingInfo(coll);   
  64.         PrintWriter pw;   
  65.         String filename = null;   
  66.         try {   
  67.             res.setContentType("text/html;charset=utf-8");   
  68.             res.setCharacterEncoding("utf-8");   
  69.             pw = res.getWriter();//输出MAP信息    
  70.             //写入到输出流生成图像文件,同时把图片的具体信息放入ChartRenderingInfo的一个实例为以后生成Map提供信息    
  71.             //ChartUtilities.writeChartAsPNG(out, chart, width, height, info);   
  72.             filename = ServletUtilities.saveChartAsPNG(chart, width , height, info, req.getSession());//保存图表为文件   
  73.             //读取info对象,生成Map信息。这些信息写在pw的输出流中,这里的输出流就是Response.out,也就是直接输出到页面了   
  74.             ChartUtilities.writeImageMap(pw, filename, info, false);   
  75.             pw.flush();   
  76.   
  77.         } catch (IOException e) {   
  78.             e.printStackTrace();   
  79.         }   
  80.         return filename;   
  81.     }   
  82.        
  83.     private DefaultCategoryDataset createData(){   
  84.         String series1 = "血糖";   
  85.         String series2 = "舒张压";   
  86.         String series3 = "收缩压";   
  87.         String type1 = "2009-01-01";   
  88.         String type2 = "2009-02-01";   
  89.         String type3 = "2009-03-01";   
  90.         String type4 = "2009-04-01";   
  91.         String type5 = "2009-05-01";   
  92.         String type6 = "2009-06-01";   
  93.         String type7 = "2009-07-01";   
  94.         String type8 = "2009-08-01";   
  95.         DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();   
  96.         defaultcategorydataset.addValue(1.0D, series1, type1);   
  97.         defaultcategorydataset.addValue(2D, series1, type2);   
  98.         defaultcategorydataset.addValue(3D, series1, type3);   
  99.         defaultcategorydataset.addValue(5D, series1, type4);   
  100.         defaultcategorydataset.addValue(5D, series1, type5);   
  101.         defaultcategorydataset.addValue(7D, series1, type6);   
  102.         defaultcategorydataset.addValue(7D, series1, type7);   
  103.         defaultcategorydataset.addValue(8D, series1, type8);   
  104.   
  105.         defaultcategorydataset.addValue(5D, series2, type1);   
  106.         defaultcategorydataset.addValue(7D, series2, type2);   
  107.         defaultcategorydataset.addValue(6D, series2, type3);   
  108.         defaultcategorydataset.addValue(8D, series2, type4);   
  109.         defaultcategorydataset.addValue(4D, series2, type5);   
  110.         defaultcategorydataset.addValue(4D, series2, type6);   
  111.         defaultcategorydataset.addValue(2D, series2, type7);   
  112.         defaultcategorydataset.addValue(1.0D, series2, type8);   
  113.         return defaultcategorydataset;   
  114.     }   
  115.   
  116.     public String getHy_filename() {   
  117.         return hy_filename;   
  118.     }   
  119.   
  120.     public void setHy_filename(String hy_filename) {   
  121.         this.hy_filename = hy_filename;   
  122.     }   
  123. }  
package action;

import java.awt.Rectangle;
import java.awt.Shape;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.entity.ChartEntity;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.category.DefaultCategoryDataset;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport{
	//页面鼠标事件时需要的参数
	private String hy_filename;
	/**
	 * 显示图片
	 * @return
	 */
	public String show(){
		HttpServletRequest req = ServletActionContext.getRequest();
		HttpServletResponse res = ServletActionContext.getResponse();
		hy_filename = createChartImage(req, res);
		return SUCCESS;
	}
	
	private String createChartImage(HttpServletRequest req, HttpServletResponse res){
		JFreeChart chart = createChart(createData());
		String filename = createUseMap(chart, 510, 300, req, res);
		return filename;
	}
	
	private JFreeChart createChart(DefaultCategoryDataset defaultcategorydataset){
		JFreeChart chart = ChartFactory.createLineChart(null, //图形标题名称
		null,  					    //domain轴 Lable,横坐标Lable
		null, 					    //range 轴 Lable,纵坐标Lable
		defaultcategorydataset,		// dataset
		PlotOrientation.VERTICAL,	//垂直显示
		true,						// legend?
		true,						// tooltips?
		false);	 					//URLs?
		return chart;
	}
	
	private String createUseMap(JFreeChart chart, int width, int height, HttpServletRequest req, HttpServletResponse res){
		//在矩形框中显示信息
	    Shape shape = new Rectangle(20, 10);
	    ChartEntity entity = new ChartEntity(shape);
	    StandardEntityCollection coll = new StandardEntityCollection();
	    coll.add(entity);
	    //该工具类上面没有介绍,在鼠标移动到图片时显示提示信息是用Map实现的,这些Map是用该类生成的。
	    ChartRenderingInfo info = new ChartRenderingInfo(coll);
	    PrintWriter pw;
	    String filename = null;
		try {
			res.setContentType("text/html;charset=utf-8");
			res.setCharacterEncoding("utf-8");
			pw = res.getWriter();//输出MAP信息 
		    //写入到输出流生成图像文件,同时把图片的具体信息放入ChartRenderingInfo的一个实例为以后生成Map提供信息 
		    //ChartUtilities.writeChartAsPNG(out, chart, width, height, info);
		    filename = ServletUtilities.saveChartAsPNG(chart, width , height, info, req.getSession());//保存图表为文件
		    //读取info对象,生成Map信息。这些信息写在pw的输出流中,这里的输出流就是Response.out,也就是直接输出到页面了
		    ChartUtilities.writeImageMap(pw, filename, info, false);
		    pw.flush();

		} catch (IOException e) {
			e.printStackTrace();
		}
		return filename;
	}
	
	private DefaultCategoryDataset createData(){
		String series1 = "血糖";
		String series2 = "舒张压";
		String series3 = "收缩压";
		String type1 = "2009-01-01";
		String type2 = "2009-02-01";
		String type3 = "2009-03-01";
		String type4 = "2009-04-01";
		String type5 = "2009-05-01";
		String type6 = "2009-06-01";
		String type7 = "2009-07-01";
		String type8 = "2009-08-01";
		DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
		defaultcategorydataset.addValue(1.0D, series1, type1);
		defaultcategorydataset.addValue(2D, series1, type2);
		defaultcategorydataset.addValue(3D, series1, type3);
		defaultcategorydataset.addValue(5D, series1, type4);
		defaultcategorydataset.addValue(5D, series1, type5);
		defaultcategorydataset.addValue(7D, series1, type6);
		defaultcategorydataset.addValue(7D, series1, type7);
		defaultcategorydataset.addValue(8D, series1, type8);

		defaultcategorydataset.addValue(5D, series2, type1);
		defaultcategorydataset.addValue(7D, series2, type2);
		defaultcategorydataset.addValue(6D, series2, type3);
		defaultcategorydataset.addValue(8D, series2, type4);
		defaultcategorydataset.addValue(4D, series2, type5);
		defaultcategorydataset.addValue(4D, series2, type6);
		defaultcategorydataset.addValue(2D, series2, type7);
		defaultcategorydataset.addValue(1.0D, series2, type8);
		return defaultcategorydataset;
	}

	public String getHy_filename() {
		return hy_filename;
	}

	public void setHy_filename(String hy_filename) {
		this.hy_filename = hy_filename;
	}
}



页面:index.jsp

Java代码 复制代码
  1. <%@ taglib prefix="s" uri="/struts-tags"%>   
  2. <%@ page language="java" import="java.util.*" contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">   
  4. <html>   
  5.   <head>   
  6.     <title>JfreeChartTest</title>   
  7.     <meta http-equiv="pragma" content="no-cache">   
  8.     <meta http-equiv="cache-control" content="no-cache">   
  9.   </head>   
  10.   <body>   
  11.     <P ALIGN="center">    
  12.      有鼠标事件:   
  13.     <img src="<%=request.getContextPath() %>/servletDisplayChart?filename=<s:property value='hy_filename'/>" usemap="#<s:property value='hy_filename'/>" border="0">    
  14.     无鼠标事件:   
  15.     <img src="<%=request.getContextPath() %>/servletDisplayChart?filename=<s:property value='hy_filename'/>" border="0">    
  16.     </P>    
  17.   </body>   
  18. </html>  
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ page language="java" import="java.util.*" contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JfreeChartTest</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
  </head>
  <body>
	<P ALIGN="center"> 
	 有鼠标事件:
	<img src="<%=request.getContextPath() %>/servletDisplayChart?filename=<s:property value='hy_filename'/>" usemap="#<s:property value='hy_filename'/>" border="0"> 
	无鼠标事件:
	<img src="<%=request.getContextPath() %>/servletDisplayChart?filename=<s:property value='hy_filename'/>" border="0"> 
	</P> 
  </body>
</html>



struts.xml:
加上以下内容:
<action name="show" method="show" class="action.LoginAction">
      <result>index.jsp</result>
      <interceptor-ref name="defaultStack"/>
</action>

web.xml:
加上以下内容:

Java代码 复制代码
  1. <servlet>    
  2.     <servlet-name>DisplayChart</servlet-name>    
  3.     <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>    
  4. </servlet>    
  5. <servlet-mapping>    
  6.     <servlet-name>DisplayChart</servlet-name>    
  7.     <url-pattern>/servletDisplayChart</url-pattern>    
  8. </servlet-mapping>  
<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>/servletDisplayChart</url-pattern> 
</servlet-mapping>



运行效果:
访问:http://localhost:8080/工程名/show.action

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值