ice world

There is nothing too difficult if you put your heart into it.
posts - 104, comments - 103, trackbacks - 0, articles - 0

jfreechart画图tooltip不显示的问题

Posted on 2011-04-16 13:59 IceWee 阅读(915) 评论(0)  编辑  收藏 所属分类: Java
最近项目中需要用到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), 760410);
%>


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%>" >




只有注册用户登录后才能发表评论。


网站导航: