JFreeChart的使用

JFreeChart一个免费的Java图表库.JFreeChart支持饼图(2D和3D),条形图(水平和垂直,整齐堆叠),线图,散点图,时序图,

高低的开闭图,烛台图,甘特图,结合地块,温度计,刻度盘和更多。JFreeChart可以在应用程序中使用,小程序,servlet和JSP。

由于JFreeChart可以生成的图像很多,在此简要列举三个(饼图,柱状图,曲线图)作为入门,学习如何整合Struts如何显示在JSP中

一、搭建Struts

首先要有一个搭建好的Struts框架,在此基础上我们就可以开发使用JFreeChart了,

具体Struts2的搭建参考http://blog.csdn.net/itmyhome1990/article/details/36186059

注:当然也完全可以不用Struts,在JSP中写java脚本一样可以运行JFreeChart,但为了规范性还是建议使用Struts


二、下载JFreeChart

JFreeChart是开放源代码的免费软件,下载地址(含本示例源码) http://download.csdn.net/detail/itmyhome/7598033

本文使用的JFreeChart版本为jfreechart-1.0.17

三、环境配置

MyEclipse中新建一Web工程,将下载的jfreechart-1.0.17下lib目录下的jcommon-1.0.21.jar,jfreechart-1.0.17.jar

导入到工程下。另在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>/DisplayChart</url-pattern>
</servlet-mapping>

四、生成各种图表

★饼图

DefaultPieDataset dpd = new DefaultPieDataset();
dpd.setValue("JDK1.4", 60);
dpd.setValue("JDK1.5", 15);
dpd.setValue("JDK1.6", 25);
dpd.setValue("JDK1.7", 25);
dpd.setValue("JDK1.8", 25);

JFreeChart chart = ChartFactory.createPieChart("开发者目前采用JDK版本分布", dpd, true,false, false);

String fileName = "";
try {
	fileName = ServletUtilities.saveChartAsPNG(chart, 600, 500, session);
} catch (IOException e) {
	e.printStackTrace();
}
//JSP页面显示的URL
pieChartURL = request.getContextPath() + "/DisplayChart?filename=" + fileName;

在JSP中 <img src="${barChartURL }" width=700 height=500 border=0> 即可显示该饼图(下同)

★柱状图

DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(42, "语言", "JAVA");
dataset.addValue(17, "语言", "C#");
dataset.addValue(14, "语言", "C++");
dataset.addValue(12, "语言", "C");
dataset.addValue(3, "语言", "PHP");
dataset.addValue(2, "语言", "JavsScript");
dataset.addValue(1, "语言", "Objective-C");
dataset.addValue(3, "语言", "Python");
dataset.addValue(4, "语言", "其他");
JFreeChart chart = ChartFactory.createBarChart3D("开发者第一编程语言分布情况", "开发语言",
		"百分比", dataset, PlotOrientation.VERTICAL, false, false,false);
String fileName = "";
try {
	fileName = ServletUtilities.saveChartAsPNG(chart, 700, 500,null, session);
} catch (IOException e) {
	e.printStackTrace();
}
barChartURL = request.getContextPath() + "/DisplayChart?filename=" + fileName;

★曲线图

TimeSeries timeSeries = new TimeSeries("最近30天流量趋势", Day.class);
TimeSeriesCollection lineDataset = new TimeSeriesCollection();
timeSeries.add(new Day(01, 06, 2014), 10200);
timeSeries.add(new Day(05, 06, 2014), 11200);
timeSeries.add(new Day(10, 06, 2014), 12000);
timeSeries.add(new Day(15, 06, 2014), 13200);
timeSeries.add(new Day(20, 06, 2014), 11600);
timeSeries.add(new Day(25, 06, 2014), 13200);
timeSeries.add(new Day(30, 06, 2014), 12500);
lineDataset.addSeries(timeSeries);  

JFreeChart chart = ChartFactory.createTimeSeriesChart("访问量统计时间线", "月份", "访问量", lineDataset, true, true, true);

XYPlot plot = chart.getXYPlot();
//设置网格背景颜色
plot.setBackgroundPaint(Color.white);
//设置网格竖线颜色
plot.setDomainGridlinePaint(Color.LIGHT_GRAY);
//设置网格横线颜色
plot.setRangeGridlinePaint(Color.LIGHT_GRAY);  

//设置主标题
chart.setTitle(new TextTitle("最近30天流量趋势"));
chart.setAntiAlias(true);
String fileName = "";
try {
	fileName = ServletUtilities.saveChartAsPNG(chart, 600, 500, null, session);
} catch (IOException e) {
	e.printStackTrace();
}
graphChartURL = request.getContextPath() + "/DisplayChart?filename=" + fileName;

五、乱码问题

在图表生成时可能会发生乱码,解决方法如下:

StandardChartTheme standardChartTheme = new StandardChartTheme("CN");
standardChartTheme.setExtraLargeFont(new Font("隶书", Font.BOLD, 20));
standardChartTheme.setRegularFont(new Font("宋书", Font.PLAIN, 15));
standardChartTheme.setLargeFont(new Font("宋书", Font.PLAIN, 15));
ChartFactory.setChartTheme(standardChartTheme);

在使用的过程中如果报以下错误:

org.apache.struts2.dispatcher.Dispatcher warn
警告: Could not find action or result: /jfreechart/DisplayChart?filename=jfreechart-4239939260100283845.png
There is no Action mapped for namespace [/] and action name [DisplayChart] associated with context path
[/jfreechart]. - [unknown location]

而在jsp中显示不出来图片,则原因是Struts配置错误。

因为在后台生成图片的时候有这么一句话request.getContextPath() + "/DisplayChart?filename=" + fileName;

我们用chorme查看图片路径的时候也可以看到

<img src="/jfreechart/DisplayChart?filename=jfreechart-4239939260100283845.png" width="600" height="500" border="0">

走的是servlet 这个路径被Struts拦截了(因为struts配置的拦截为<url-pattern>/*</url-pattern>) 所以找不到对应的action or result

修改web.xml

<filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>/admin/*</url-pattern>
</filter-mapping>
<!--或者
<filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>*.action</url-pattern>
</filter-mapping>
-->

至此JFreeChart的基本使用就完成了,这只是简单的图表显示,如需要更复杂功能参考其他文章。

项目源码下载:http://download.csdn.net/detail/itmyhome/7598033

将项目导入到myeclipse中 启动tomcat 浏览器中输入http://localhost:8088/jfreechart/index.jsp 即可演示程序

欢迎加入JAVA技术交流群:74955800

转载请注明出处:http://blog.csdn.net/itmyhome1990/article/details/36898497

JFreeChart的使用

时间: 2024-08-15 14:55:30

JFreeChart的使用的相关文章

JAVA平台开放图表绘制类库——JFreeChart

好的东西要分享要推荐,这里向大家推荐一个java平台下的一个开源图表绘制类库JFreeChart,相关资源(源代码.demo源码.开发指南)已经上传至CSDN资源,需要的可以自行下载. JFreeChart的图表绘制功能非常强大,涵盖了几乎所有想的到的图表,并且绘制效果还很炫酷.来看下JFreeChart的主要效果图: 之前都是用excel绘制的图表,还要调整很多属性之类的东西,觉得很麻烦,所以就全部模块化实现了,代码就不贴出来了. JFreeChart相关资源下载地址:http://downl

struts2中 JFreeChart使用

添加3个包 struts2-jfreechart-plugin-2.3.16.3.jar jcommon-1.0.16.jar jfreechart-1.0.13.jar struts.xml中配置 查看struts2-jfreechart-plugin-2.3.16.3.jar中的struts-plugin.xml文件 查看其中的定义的东西 然后写着struts.xml中 1 <package name="freechart" extends="jfreechart-

JFreechart在linux下不显示及中文乱码问题

一.使用JFreeChart建的报表,在window下能正常显示,但是放到linux下就报错,而且有时候会把tomcat挂掉, 原因是jfreechart的在linux系统中需要访问java awt库提供...... 一.使用JFreeChart建的报表,在window下能正常显示,但是放到linux下就报错,而且有时候会把tomcat挂掉,原因是jfreechart的在linux系统中需要访问java awt库提供的图形功能,而linux下的绝大多数版本的java awt类库都需要x serv

JFreeChart之堆叠柱形图(StackedBar)

JFreeChart之堆叠柱形图(StackedBar) JAVA JFreeChart 最近的项目使用有个功能需要使用到堆叠柱形图,看了项目以前的代码实现没有想要的结果.所以自己就先到官网下载了 Demo,Demo里有个打包好的Jar包,直接运行看到效果,但是坑爹的是貌似没有对应的源码,所以只能根据class名称直接google了,所幸在github里找到对应的源码. 点我下载 访问密码 f62b 这是运行Demo找到想要实现的效果的大致图: 我最终想要实现的效果是这样的: 如果想要实现这个效

[六]JFreeChart实践五之与Struts2整合

1.Action,返回Chart package com.java1234.chart.bar; import java.awt.Color; import org.jfree.chart.ChartFactory;import org.jfree.chart.JFreeChart;import org.jfree.chart.labels.ItemLabelAnchor;import org.jfree.chart.labels.ItemLabelPosition;import org.jfr

JFreeChart的简单使用

实例1:简单的饼图 public class Test { public static void main(String[] args) { //建立默认的饼图 DefaultPieDataset ds=new DefaultPieDataset(); ds.setValue("苹果",6000); ds.setValue("三星", 9000); ds.setValue("诺基亚",3200); ds.setValue("其他&quo

jfreechart和springMVC+maven整合

高校的项目中一个功能是对统计的成绩进行图表分析,查找了一些资料之后感觉jfreechar上手挺快的,简单的做了几个demo也都很好实现,也能够满足项目中的需求,所以就决定使用这个工具.这里就将学习到的一些关于jfreechar的知识整理一下. 1.    引入jar包 使用这个工具一定要将他的包引入的到项目,在高校的项目中使采用maven管理这些外部文件的,所以对于引入jar包这一步就变得特别简单了,只要在maven项目的pom.xml文件中添加jfreechar的依赖就可以(maven会自动在

SWT_AWT加载JFreeChart在Window8下显示不出JFreeChart的问题

今天终于把Window8上显示JFreeChart的问题解决了,需求是在SWT中使用JFreeChart,但JFreeChart要使用AWT的样式,不能使用SWT的样式(ChartComposite),即要使用SWT_AWT桥接来实现SWT中显示JFreeChart. 桥接的方式实现的JFreeChart在Win7上没问题,能直接显示出来,但是在Window 8上第一次加载要很长时间,而且显示不出JFreeChart.使用JFreeChart的swt例子的代码改进改成SWt_AWT测试也是同样问

[转]JFreeChart简介及下载、配置

JFreeChart简介 JFreeChart是完全基于Java语言的开源项目,因此可以使用在Java开发环境中,包括Java应用程序,或者是Java Web应用都没有任何问题.结合iText项目,可将生成的统计图表输出到PDF文件中:结合最新的POI项目,也可以将生成的统计图表输出到Excel文档中. JFreeChart可用于生成各式各样的统计图表,只要开发人员提供符合JFreeChart所需格式的数据,JFreeChart即可自动生成相应的统计图表.JFreeChart可生成饼图(pie

利用JFreeChart绘制股票K线图完整解决方案

http://blog.sina.com.cn/s/blog_4ad042e50100q7d9.html 利用JFreeChart绘制股票K线图完整解决方案 (2011-04-30 13:27:17) 标签: 绘制 股票 k线 it 分类: 软件_Software 因为工作的需要,接触了一些股票图形绘制类的工作,其中最主要的还是股票K线图的绘制了,如果利用编程语言最底层的图形绘制方法去绘制这类图形,如果对编程语言不是特别熟悉的话,一般是有很大的困难的,通过在网上搜索发现,以自己最熟悉的两门语言为