JFreeChart 应用全过程
一、新建一个web项目
二、在web.xml中配置servlet
??? <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>
三、新建一个ChartDemo类,写一个获得数据集方法
1、饼状图数据集
??? private static PieDataset getDataSet() {
??????? DefaultPieDataset dataset = new DefaultPieDataset();
??????? dataset.setValue("苹果", 100);
??????? dataset.setValue("梨子", 200);
??????? dataset.setValue("葡萄", 300);
??????? dataset.setValue("香蕉", 400);
??????? dataset.setValue("荔枝", 500);
??????? return dataset;
?? }
2、柱壮图数据集
?? private static CategoryDataset getDataSet2() {
??????? DefaultCategoryDataset dataset = new DefaultCategoryDataset();
??????? dataset.addValue(100, "北京", "苹果");
??????? dataset.addValue(500, "北京", "荔枝");
??????? dataset.addValue(400, "北京", "香蕉");
??????? dataset.addValue(200, "北京", "梨子");
??????? dataset.addValue(300, "北京", "葡萄");
??????? dataset.addValue(500, "上海", "葡萄");
??????? dataset.addValue(600, "上海", "梨子");
??????? dataset.addValue(400, "上海", "香蕉");
??????? dataset.addValue(700, "上海", "苹果");
??????? dataset.addValue(300, "上海", "荔枝");
??????? dataset.addValue(300, "广州", "苹果");
??????? dataset.addValue(200, "广州", "梨子");
??????? dataset.addValue(500, "广州", "香蕉");
??????? dataset.addValue(400, "广州", "葡萄");
??????? dataset.addValue(700, "广州", "荔枝");
??????? return dataset;
?? }
3、折线图数据集
private static CategoryDataset getDataSet2() {
??????? DefaultCategoryDataset dataset = new DefaultCategoryDataset();
??????? dataset.addValue(100, "北京", "苹果");
??????? dataset.addValue(500, "北京", "荔枝");
??????? dataset.addValue(400, "北京", "香蕉");
??????? dataset.addValue(200, "北京", "梨子");
??????? dataset.addValue(300, "北京", "葡萄");
??????? dataset.addValue(500, "上海", "葡萄");
??????? dataset.addValue(600, "上海", "梨子");
??????? dataset.addValue(400, "上海", "香蕉");
??????? dataset.addValue(700, "上海", "苹果");
??????? dataset.addValue(300, "上海", "荔枝");
??????? dataset.addValue(300, "广州", "苹果");
??????? dataset.addValue(200, "广州", "梨子");
??????? dataset.addValue(500, "广州", "香蕉");
??????? dataset.addValue(400, "广州", "葡萄");
??????? dataset.addValue(700, "广州", "荔枝");
??????? return dataset;
?? }
四、写一个主方法用来构造要显示的图形
1、饼状图
?? public static String generatePieChart(HttpSession session, PrintWriter pw,
int w, int h){
??????? String filename = null;
??????? PieDataset dataset = getDataSet();
??????? JFreeChart chart = ChartFactory.createPieChart3D(
??????????????? "水果产量图", // 图表标题
??????????????? dataset, // 数据集
??????????????? true,?? // 是否显示图例
??????????????? false, // 是否生成工具
??????????????? false // 是否生成URL链接
??????? );
??????? chart.setBackgroundPaint(Color.pink);
??????? try {
??????????? /*------得到chart的保存路径----*/??
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
???????????? filename = ServletUtilities.saveChartAsPNG(chart, w, h, info,session);
??????????? /*------使用printWriter将文件写出----*/
??????????? ChartUtilities.writeImageMap(pw, filename, info, true);
??????????? pw.flush();
??????? } catch (IOException e) {
??????????? e.printStackTrace();
??????? }?
??????? return filename;
?? }
2、柱状图
public static String generateBarChart(HttpSession session, PrintWriter pw,
int w, int h){
??????? String filename = null;
??????? CategoryDataset dataset = getDataSet2();
??????? JFreeChart chart = ChartFactory.createBarChart3D(
??????????????? "水果产量图", // 图表标题
??????????????? "水果", // 目录轴的显示标签
??????????????? "产量", // 数值轴的显示标签
??????????????? dataset, // 数据集
??????????????? PlotOrientation.VERTICAL, // 图表方向:水平、垂直
??????????????? true,?? // 是否显示图例(对于简单的柱状图必须是false)
??????????????? false, // 是否生成工具
??????????????? false // 是否生成URL链接
??????? );
??????? try {
??????????? /*------得到chart的保存路径----*/??
??????????? ChartRenderingInfo info = new ChartRenderingInfo
(new StandardEntityCollection());
??????????? filename = ServletUtilities.saveChartAsPNG(chart, w, h, info,session);
??????????? /*------使用printWriter将文件写出----*/
??????????? ChartUtilities.writeImageMap(pw, filename, info, true);
??????????? pw.flush();
??????? } catch (IOException e) {
??????????? // TODO 自动生成 catch 块
??????????? e.printStackTrace();
??????? }?
??????? return filename;
?? }
3、折线图
public static String generateLineChart(HttpSession session, PrintWriter pw,
int w, int h){
??????? String filename = null;
??????? CategoryDataset dataset = getDataSet2();
??????? JFreeChart chart = ChartFactory.createLineChart(
??????????????? "水果产量图", // 图表标题
??????????????? "水果", // 目录轴的显示标签
??????????????? "产量", // 数值轴的显示标签
??????????????? dataset, // 数据集
??????????????? PlotOrientation.VERTICAL, // 图表方向:水平、垂直
??????????????? true,?? // 是否显示图例(对于简单的柱状图必须是false)
??????????????? false, // 是否生成工具
??????????????? false // 是否生成URL链接
??????? );
??????? /*----------设置消除字体的锯齿渲染(解决中文问题)--------------*/
??????? chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,
??????????????? RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
??????? /*------------配置图表属性--------------*/
??????? // 1,设置整个图表背景颜色
??????? chart.setBackgroundPaint(Color.pink);
??????? /*------------设定Plot参数-------------*/
??????? CategoryPlot plot = chart.getCategoryPlot();
??????? // 2,设置详细图表的显示细节部分的背景颜色
??????? //plot.setBackgroundPaint(Color.PINK);
??????? // 3,设置垂直网格线颜色
??????? plot.setDomainGridlinePaint(Color.black);
??????? //4,设置是否显示垂直网格线
??????? plot.setDomainGridlinesVisible(true);
??????? //5,设置水平网格线颜色
??????? plot.setRangeGridlinePaint(Color.blue);
??????? //6,设置是否显示水平网格线
??????? plot.setRangeGridlinesVisible(true);
??????? try {
??????????? /*------得到chart的保存路径----*/??
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
??????????? filename = ServletUtilities.saveChartAsPNG(chart, w, h, info,session);
??????????? /*------使用printWriter将文件写出----*/
??????????? ChartUtilities.writeImageMap(pw, filename, info, true);
??????????? pw.flush();
??????? } catch (IOException e) {
??????????? // TODO 自动生成 catch 块
??????????? e.printStackTrace();
??????? }?
??????? return filename;
?? }
五、写一个调用JfreeChart的显示页面
???? <%@ page contentType="text/html;charset=GBK"%>
<%@ page import="java.io.PrintWriter"%>
<jsp:directive.page import="com.cn.ChartDemo"/>
<html>
<head>
<title>
</title>
<%
//以下部分为折线图象输出(调用不同的方法生成不同类型的图形)
String fileName=ChartDemo.generateLineChart(session,new PrintWriter(out),580,250);
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + fileName;
%>
</head>
<body bgcolor="#ffffff">
<table width="580" border="0" cellspacing="0" cellpadding="0">
<tr>
???? <td>
????? <img src="<%= graphURL %>"width=580 height=250 border=0 >
???? </td>
???? </tr>
</table>
</body>
</html>
六、将项目发布到web服务器,启动web服务器。打开JfreeChart的显示页面就可以看效果了。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/TechChan/archive/2009/02/04/3862100.aspx