jfreechart画图tooltip不显示的问题

最近项目中需要用到jfreechart,以前只是简单的玩玩而已,一直没有真正的应用到实际项目中,今天在画图的时候可把自己折磨惨了,就一个小小的tooltip死活不出来。

我用的Spring + Struts,有很多人用jfreechart都是写的Servlet,其实用Struts是一样的。

我起初在Struts的Action中使用org.jfree.chart.ChartUtilities。writeChartAsPNG(java.io.OutputStream out, JFreeChart chart, int width, int height) 方法,将生成的JFreeChart对象写到输出流中,return自然是null,这样做界面可以显示Action写过来的图片,但是没有 tooltip的出现。后来我发现很多人都不是直接把图片写到流中的,而是在JSP页面通过<img>标签来显示图片的。于是我也使用了主流 方式显示图片,使用chartName = ServletUtilities.saveChartAsPNG(chart, width, height,
      info, session);将图片文件名设置请求属性发给JSP页面,页面通过图片标签显示图片,结果图片依旧显示正常,但是tooltip还是没有出来,由于刚 刚用这东西,一点都不了解,于是开以往项目中是如何写的,我发现别人的代码中有这样一 行:ChartUtilities.writeImageMap(pw, chartName, info, false);这是将图片地图写到流中,而且页面的图片标签中也多了个usermap属性,我仿佛有点清醒了,于是效仿着做了一下,tooltip果真出 现了。

JSP代码:

<%
JFreeChart chart
= (JFreeChart)request.getAttribute("chart");
String chartName
= Common.generateChart(chart, session, new PrintWriter(out), 760, 410);
%>

Common的generateChart方法就是放回图片的文件名,并且将图片地图写入到当前的流中。

Java代码:

public static String generateChart(JFreeChart chart, HttpSession session,
PrintWriter pw,
int width, int height) {
String chartName
= "";
try {
ChartRenderingInfo info
= new ChartRenderingInfo(
new StandardEntityCollection());
chartName
= ServletUtilities.saveChartAsPNG(chart, width, height,
info, session);
/** 将图片地图写入PW中 */
ChartUtilities.writeImageMap(pw, chartName, info,
false);
pw.flush();
}
catch (Exception e) {
e.printStackTrace();
}
return chartName;
}

起初我并没有使用Common这个方法,而是直接将这个方法中的代码写在了Struts的Action中,发现无效,而且在pw.flush()一 行出现了异常,流这里太烂!哎!提示刷新后就不能再return了。于是去掉这行后图片正常显示,但没有tooltip。我怀疑是Struts中用 response获取的PrintWriter并不是返回到JSP中用out封装的PrintWriter,根本就不是,还怀疑什么,这不是废话嘛!所以 在当前流中并没有图片地图,自然不显示tooltip了。

显示图片的IMG标签

<img src="<%=request.getContextPath()%>/<%=chartName%>" height="100%" border=0 usemap="#<%=chartName%>" >


posted on 2011-04-16 13:59  IceWee  阅读(1436)  评论(0编辑  收藏  举报

导航