用jfreechat制作图形报表

最近对jfreechat制作图形报表进行了总结,将一些要点记录下来,以备不时之需!
JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图(Gantt charts)等等多种图表,并且可以产生PNG和JPEG格式的输出,还可以与PDF和EXCEL关联。
[b]关联jar包[/b]
jfreechart-1.0.11.jar、jcommon-1.0.14.jar

[b]spring与jfreechart结合开发[/b]

web.xml

<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>/servlet/DisplayChart</url-pattern>
</servlet-mapping>


当然,这里的URL前缀可以自己设置!

JFreeChartUtils。这里以折线图为例:

public static String createLineChart(HttpSession session,
CategoryDataset dataset, String title, String xtitle,
String ytitle, int width, int height, PrintWriter pw) {
String filename = "";

JFreeChart jfreechart = ChartFactory.createLineChart(title, xtitle,
ytitle, dataset, PlotOrientation.VERTICAL, true, true, true);

jfreechart.setTitle(new TextTitle(title,
new Font("黑体", Font.ITALIC, 20)));// 重新设置图表标题,改变字体

jfreechart.getTitle().setFont(new Font("黑体", Font.ITALIC, 20)); // 解决标题乱码

jfreechart.setBackgroundPaint(Color.white); // 设定背景色为白色

CategoryPlot plot = (CategoryPlot) jfreechart.getPlot(); // 获得

plot.setBackgroundPaint(Color.lightGray); // 设定图表数据显示部分背景色

plot.setDomainGridlinePaint(Color.white); // 横坐标网格线白色

plot.setDomainGridlinesVisible(true); // 网格线

plot.setRangeGridlinePaint(Color.white); // 纵坐标网格线白色

plot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D)); // 设定坐标轴与图表数据显示部分距离

CategoryAxis categoryAxis = plot.getDomainAxis();// 取得横轴

categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);// 设置分类标签以45度角倾斜

Font font = new Font("宋体", Font.BOLD, 16);

categoryAxis.setLabelFont(font);// 设置横轴显示标签的字体

categoryAxis.setTickLabelFont(font); // 解决横坐标乱码

NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();// 取得纵轴

numberAxis.setLabelFont(font);// 设置纵轴显示标签的字体

numberAxis.setTickLabelFont(font); // 解决纵坐标乱码

numberAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());// 使纵坐标的最小单位格为整数

numberAxis.setAutoRangeIncludesZero(true);

StandardEntityCollection sec = new StandardEntityCollection();
ChartRenderingInfo info = new ChartRenderingInfo(sec);

try {
filename = ServletUtilities.saveChartAsPNG(jfreechart, width,
height, info, session);
ChartUtilities.writeImageMap(pw, filename, info, false);
pw.flush();
} catch (IOException e) {
e.printStackTrace();
}
return filename;
}


这里需要说明的是关于中文乱码的问题,其实很简单,只要设置相应的字体就好了!有很多朋友对 ChartUtilities.writeImageMap(pw, filename, info, false); 这句代码有些疑惑,这里结合页面代码进行说明!

jsp代码:

<img src="${file}" border=0 usemap="#${filename}">


生成的页面源码:

<map id="jfreechart-62526.png" name="jfreechart-62526.png">
<area shape="poly" coords="727,43,733,43,733,49,727,49,727,43,727,43" title="(在线用户数, 07-26 11:55) = 44" alt="" href="index.html?series=%E5%9C%A8%E7%BA%BF%E7%94%A8%E6%88%B7%E6%95%B0&category=07-26+11%3A55"/>
<area .... />
</map>

<img src="/gameCenter/servlet/DisplayChart?filename=jfreechart-62526.png" border=0 usemap="#jfreechart-62526.png">



可以注意到img的usemap标签是关键点!usemap 属性将图像定义为客户端图像映射。图像映射指的是带有可点击区域的图像。详细资料请参考 [url=http://www.w3school.com.cn/tags/att_img_usemap.asp]img的usemap标签[/url]。如而生成的页面代码中<map>......</map>部分正是ChartUtilities.writeImageMap(pw, filename, info, false);所生成!这样当你鼠标移动到生成的图标的某一个部分时,就会显示对应的title,点击会跳转到相应的url等。

当然这里也会出现中文乱码的问题,解决办法也很简单,只要在response中做下编码设置就OK了!


response.setContentType("text/html;charset=UTF-8");
Writer out = response.getWriter();
PrintWriter pw=new PrintWriter(out);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值