以前用JFreeChart的时候每次都需要修改一些显示样式和代码,前段时间项目组要用,于是就进行了一次封装,把几个常用的样式都调整好了,包括三种常用的图表类型都封装到一起了,项目组的其他人员只要处理好要显示的数据就行了。
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>
柱状图封装和设置:
public static JFreeChart getLineChart(String title, String xSubject, String ySubject, CategoryDataset dataset) {
JFreeChart chart = ChartFactory.createLineChart(title, xSubject, ySubject, dataset, PlotOrientation.VERTICAL, true, true, false);
LineRenderer3D renderer = new LineRenderer3D();
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setItemLabelsVisible(true);
renderer.setPositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BOTTOM_CENTER));
CategoryPlot plot = chart.getCategoryPlot();
CategoryAxis domainAxis = plot.getDomainAxis(); //domainAxis.setVerticalCategoryLabels(false);
plot.setDomainAxis(domainAxis);
ValueAxis rangeAxis = plot.getRangeAxis(); //设置最高的一个 Item 与图片顶端的距离
rangeAxis.setUpperMargin(0.15); //设置最低的一个 Item 与图片底端的距离
rangeAxis.setLowerMargin(0.15);
plot.setRangeAxis(rangeAxis);
plot.setRenderer(renderer); //设置透明度
plot.setForegroundAlpha(0.4f); //设置背景透明度
plot.setBackgroundAlpha(0.8f); //设置背景颜色
chart.setBackgroundPaint(new Color(240,247,246));
chart.setBackgroundImageAlpha(0.3f);
return chart;
}
调用代码:
public JFreeChart getSingleChart(String chartType) {
//构造数据
double[][] data = new double[1][7];
for(int i = 0; i < 7; i ++)
{ data[0][i] = Math.round(Math.random()*1000); }
//根据类型显示不同类型图表
String[] rowKeys = new String[]{"Rule001"};
String[] columnKeys = new String[]{"20日","21日","22日","23日","24日","25日","26日"};
CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);
if(chartType.equals("pole"))
return com.util.MyChartFactory.getBarChart("校验规则统计", "日期", "案例(个)", dataset);
else if(chartType.equals("line"))
return com.util.MyChartFactory.getLineChart("校验规则统计", "日期", "案例(个)", dataset);
else //if(chartType.equals("area"))
return com.util.MyChartFactory.getAreaChart("校验规则统计", "日期", "案例(个)", dataset);
}
页面代码:
<%@ page contentType="text/html; charset=gb2312" language="java" errorPage=""%> <%@ page import="org.jfree.chart.*,org.jfree.chart.servlet.ServletUtilities"%> <jsp:useBean scope="page" id="chartTest" class="test.ChartTest" /> <% String chartType = request.getParameter("chartType"); if(chartType == null) chartType = "line"; JFreeChart chart = chartTest.getSingleChart(chartType); String filename = ""; String graphURL = "../images/nodata.gif"; if(chart != null) { filename = ServletUtilities.saveChartAsPNG(chart, 800, 450, null, session); graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename; } %> <HTML> <HEAD> <title></title> <LINK href="../include/site.css" type="text/css" rel="stylesheet"> </HEAD> <body bottomMargin="0" leftMargin="0" topMargin="0" rightMargin="0"> <form name="myform" method="post" action=""> <table width="96%" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td valign="top"> <TABLE class="td" style="WIDTH: 100%; HEIGHT: 21px" cellSpacing="0" cellPadding="0" border="0"> <TR> <TD class="tttable" colspan="3"> <TABLE id="Table1" style="WIDTH: 100%; HEIGHT: 40px" cellSpacing="0" cellPadding="0" width="100%" align="right" border="0"> <TR> <TD vAlign="middle" noWrap> <TABLE id="Table2" style="WIDTH: 100%; HEIGHT: 92.29%" cellSpacing="0" cellPadding="0" width="100%" border="0"> <TR> <TD style="WIDTH: 70px" noWrap align=center noWrap> 图表类型 </TD> <TD noWrap> <select name="chartType"> <option value="line" <%if(chartType.equals("line"))out.print("selected");%>>折线图</option> <option value="pole" <%if(chartType.equals("pole"))out.print("selected");%>>柱状图</option> <option value="area" <%if(chartType.equals("area"))out.print("selected");%>>面积图</option> </select> </TD> <TD> <a href="#" οnclick="chkFrm();"> <img src="../images/btnQuery.gif" border="0" align="absmiddle"></a> </TD> </TR> </TABLE> </TD> </TR> </TABLE> </TD> </TR> <TR> <TD class="tttable" colspan="3"> <table width=100% border=1 class="mainFunctionTable" cellpadding="0" cellspacing="1"> <tr height=25> <td> <img src="<%=graphURL%>" border=0 usemap="#<%=filename%>" align=center> </td> </tr> </table> </TD> </TR> </TABLE> </td> </tr> </table> </form> <script> function chkFrm() { document.myform.submit(); } </script> </body> </HTML>