创建三种图片的工厂类
import java.awt.Color;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.Shape;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.entity.ChartEntity;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.PieDataset;
/**
* @author:创建者 tanghairong
* @date:2011-4-7
*/
public class JFreeChartFactory {
/**
* 创建曲线图
*
* @param defaultCategoryDataset
* @return
*/
public static JFreeChart createLineChart(
DefaultCategoryDataset defaultCategoryDataset) {
JFreeChart chart = null;
chart = ChartFactory.createLineChart("点击量统计", null, null,
defaultCategoryDataset, PlotOrientation.VERTICAL, true, true,
false);
return chart;
}
/**
* 创建饼状图
*
* @param pieDataset
* @return
*/
public static JFreeChart createPieChart(PieDataset pieDataset) {
JFreeChart pieChart = ChartFactory.createPieChart3D("点击量统计",pieDataset, true, true, false);
PiePlot3D piePlot = (PiePlot3D) pieChart.getPlot();
piePlot.setBackgroundPaint(Color.WHITE);
piePlot.setLabelFont(new Font("黑体", Font.BOLD, 15));
String unitStyle = "{0}={1}({2})";
piePlot.setNoDataMessage("没有对应的数据,请重新查询");
piePlot.setNoDataMessageFont(new Font("华文行楷", Font.BOLD, 21));
// 设置图例显示样式
piePlot.setLabelGenerator(new StandardPieSectionLabelGenerator(
unitStyle, NumberFormat.getNumberInstance(), new DecimalFormat(
"0.00%")));
// 设置引用标签显示样式
piePlot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(
unitStyle, NumberFormat.getNumberInstance(), new DecimalFormat(
"0.00%")));
pieChart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15)); // 设置引用标签字体
pieChart.getTitle().setFont(new Font("华文行楷", Font.BOLD, 32));
return pieChart;
}
/**
* 创建条形图
* @param categoryDataset 显示数据
* @param info 数据名称
* @return
*/
public static JFreeChart createBarChart(CategoryDataset categoryDataset,String info)
{
JFreeChart chart = ChartFactory.createBarChart3D("hello", info, "广告点击率",
categoryDataset, PlotOrientation.VERTICAL, true, false, false);
chart.setTitle(new TextTitle("job36广告点击量统计", new Font("宋体", Font.BOLD
+ Font.ITALIC, 20)));
CategoryPlot plot = (CategoryPlot) chart.getPlot();
CategoryAxis categoryAxis = plot.getDomainAxis();
categoryAxis.setLabelFont(new Font("微软雅黑", Font.BOLD, 12));
NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis();
numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12));
return chart;
}
/**
* 将图片写入到输出流
* @param chart 统计图
* @param width 宽度
* @param height 高度
* @param req
* @param res
* @return
*/
public static String createUseMap(JFreeChart chart, int width, int height, HttpServletRequest req, HttpServletResponse res){
//在矩形框中显示信息
Shape shape = new Rectangle(20, 10);
ChartEntity entity = new ChartEntity(shape);
StandardEntityCollection coll = new StandardEntityCollection();
coll.add(entity);
//该工具类上面没有介绍,在鼠标移动到图片时显示提示信息是用Map实现的,这些Map是用该类生成的。
ChartRenderingInfo info = new ChartRenderingInfo(coll);
PrintWriter pw;
String filename = null;
try {
res.setContentType("text/html;charset=utf-8");
res.setCharacterEncoding("utf-8");
pw = res.getWriter();//输出MAP信息
//写入到输出流生成图像文件,同时把图片的具体信息放入ChartRenderingInfo的一个实例为以后生成Map提供信息
//ChartUtilities.writeChartAsPNG(out, chart, width, height, info);
filename = ServletUtilities.saveChartAsPNG(chart, width , height, info, req.getSession());//保存图表为文件
//读取info对象,生成Map信息。这些信息写在pw的输出流中,这里的输出流就是Response.out,也就是直接输出到页面了
ChartUtilities.writeImageMap(pw, filename, info, false);
pw.flush();
} catch (IOException e) {
e.printStackTrace();
}
return filename;
}
}
Action调用:
写道
/**
* 将数据转换为图片数据
* @param listRecordVO
* @return
*/
private String getImageData(RecordDTO recordDTO,String info) {
HttpServletRequest req = getRequest();
HttpServletResponse res = getResponse();
DefaultCategoryDataset dataset = null;
String bar_filename= null;
if (null != recordDTO) {
List<RecordVO> listRecordVO = recordDTO.getListRecordVO();
if (null != listRecordVO && listRecordVO.size() > 0) {
dataset = new DefaultCategoryDataset();
for (RecordVO recordVO : listRecordVO) {
dataset.setValue(recordVO.getClickCount(), recordVO.getDataName(),recordVO.getDataName());
}
bar_filename= JFreeChartFactory.createUseMap(JFreeChartFactory.createBarChart(dataset,info), 900, 520, req, res);
}
bar_filename= "fail";
}
return bar_filename;
}
配置文件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>/servletDisplayChart</url-pattern>
</servlet-mapping>
在项目中用到的,所以直接就贴出来了,仅供自己以后参考.
分享到:
相关推荐
《JFreeChart生成图片并显示》 在Java开发中,我们常常需要生成各种图表来直观地展示数据,比如折线图、柱状图、饼图等。JFreeChart是一个强大的开源Java库,它提供了丰富的图表生成功能,可以满足开发者在各种应用...
标题“JFreechart在Linux下不显示及中文乱码问题”指出的是在使用JFreechart库创建图表时,在Linux操作系统环境下遇到的两个主要问题:图表无法正常显示以及中文字符出现乱码。JFreechart是一个Java库,用于生成高...
本教程将详细讲解如何在Struts2框架中使用JFreeChart来显示图片。 首先,我们需要了解JFreeChart的基本用法。JFreeChart提供了丰富的API,可以方便地创建和定制图表。以下是一般步骤: 1. **创建图表对象**:例如...
标题“解决jfreechart在Linux下无法显示中文”所涉及的知识点主要集中在Java图形库JFreeChart和在Linux操作系统中的字体配置。JFreeChart是一个强大的Java库,用于创建各种图表,如柱状图、饼图、线图等。在Windows...
在"jFreeChart生成报表图片"的项目中,我们可以看到一个已经准备好的示例,包含了多种图表类型的实现,帮助开发者快速理解和应用jFreeChart。项目中的柱状图用于比较不同类别的数量或值,饼图则用于显示各部分占整体...
linux环境下jfreechart无法生成与windows环境下的临时目录,从而导致图片无法显示,解决思路: 重写jfreechart的方法:ServletUtilities;ChartDeleter;DisplayChart 自定义三个类JfreeServletUtilities;...
这篇博客“利用JFrame直接显示JFreeChart的图片”显然是介绍如何将`JFreeChart`生成的图表展示在`JFrame`中,以创建用户界面。下面我们将深入探讨这两个关键知识点。 首先,我们来看`JFreeChart`。这个库提供了丰富...
### JFreeChart在JSP(Tomcat)中图片不显示问题详解 #### 一、问题背景及概述 在使用JFreeChart与JSP结合时,可能会遇到一个常见问题:使用JFreeChart生成的图片虽然已经存在于Tomcat的临时目录(\Tomcat 6.0\temp...
这个“jfreechart生成报表图片.zip”压缩包包含了一组资源,可以帮助你快速创建各种类型的图表,如柱状图、饼图、折线图等,非常适合用于数据可视化。 1. **JFreeChart库介绍**: JFreeChart是开源的Java库,它...
在Linux服务器上部署JFreeChart应用时,由于系统默认字体与Windows或其他操作系统可能存在差异,可能会导致中文字符无法正常显示,即出现乱码现象。 首先,问题的根源在于Linux服务器可能缺乏支持中文字符的字体。...
5. **显示和导出**:最后,你可以将图表显示在Java Swing组件上,或者导出为各种图像格式,如PNG、JPEG或PDF。对于导出,可以使用`ChartUtilities`类中的静态方法。 **数据导出** 在JFreeChart中,数据导出通常是...
1. **设置JFreeChart使用的字体**:在生成图表时,可以通过自定义`Font`对象,并在`TextBlock`或`LegendItem`等元素中设置该字体,确保使用的是能正确显示中文的字体。例如,可以这样设置: ```java Font font = ...
6. 显示或保存图表:最后,你可以将图表显示在Swing组件中,或者导出为图片文件,如JPEG、PNG等。 在“JFreeChart混合图表”这个示例中,可能包含了创建这样一个混合图表的完整代码和结果图像。解压缩文件后,通过...
**JFreeChart是一种广泛使用的Java库,用于创建各种高质量的2D图表,如折线图、柱状图、饼图、散点图等。在"JfreeChart各种图形案例"这个资源中,包含了多种JFreeChart图形的示例,旨在帮助开发者直观地理解如何在...
通过以上步骤,你应该能够成功解决JFreeChart在Linux服务器上生成图片时的中文乱码问题。值得注意的是,这种方法不仅适用于JFreeChart,还适用于其他依赖于Java运行环境显示中文字符的程序。在实际操作中,应根据...
该项目可作为JFreeChart的一种补充,提供更便捷的集成方案。 #### 二、版本与文档 截至2003-05-08,JFreeChart的版本号为0.98。值得注意的是,尽管JFreeChart本身是开源免费的,但官方提供的文档需要付费获取,...
2. **安装配置**:解压下载的`jfreechart-1.0.9.zip`文件后,将解压目录下的`lib`文件夹中的`gnujaxp.jar`、`jcommon-1.0.12.jar`和`jfreechart-1.0.9.jar`三个JAR文件导入到Eclipse项目中。操作步骤如下: - 打开...
**三、使用JFreeChart的步骤** 1. **引入依赖**:在项目中添加JFreeChart的依赖库。 2. **创建数据源**:准备要展示的数据,可以是数组、列表或其他集合类型。 3. **创建图表工厂**:根据需要选择合适的图表类型,...
在【标题】"JFreeChart 双坐标Y轴 折点显示数据"中,所涉及的知识点是JFreeChart如何实现双Y轴坐标系以及在折点处显示数据的技巧。 首先,双Y轴坐标系常用于对比不同尺度的数据,例如一个数据系列的值范围可能远...