1、 bar charts (regular and stacked, with an optional 3D effect); line and area charts; scatter plots and bubble charts; time series, high/low/open/close charts and candle stick charts; combination charts; Pareto charts; Gantt charts; wind plots, meter charts and symbol charts; wafer map charts;JfreeCh
2、art提供的其他特性: complete source code is included, under the terms of the GNU Lesser General Public Licence; access to data from any source via dataset interfaces; support for multiple secondary axes and datasets; tooltips, zooming, printing; direct export to PNG and JPEG; export to PDF via iText and SVG
3、 via Batik (both described in the JFreeChart Developer Guide). 支持servlets, JSP (感谢Cewolf), applets 或者Java Application; 完善的Javadoc文档;第二章 体验JFreeChart本章采用JfreeChart的演示程序说明JfreeChart的基本功能。2.1环境可以采用Javac+UltraEdit方式演示,本文讲述依赖JbuilderX IDE开发。首先,解压缩jfreechart-0.9.16.zip包。( 获得jfreechart包,最新包为0.9.21版本。)1,将sr
4、c/org/jfree/chart/ 目录下的demo目录保留,删除其他目录。2,将jfreechart-0.9.16.jar包放到lib目录下。3,建立Jbuilder工程; 工程应用四个gnujaxp.jar ; jcommon-0.9.1.jar ; jfreechart-0.9.16.jar ;servlet.jar4,编译工程。5,以Application方式运行各个Demo。6,工程增加一个WEB Module ,命名为cewolf,支持Servlet。2.2 运行由于我们主要是WEB应用,所以演示以Servlet运行。1,在src/org/jfree/chart/demo目录下增
5、加下面的文件package org.jfree.chart.demo;import java.io.IOException;import javax.servlet.*;import javax.servlet.http.HttpServlet;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.se
6、rvlet.http.HttpSession;import org.jfree.data.*;import org.jfree.chart.*;/* * 演示通过servlet直接输出图表 * author Winter Lau */public class BarChart3DDemo2S extends HttpServlet /Process the HTTP Post request public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
7、IOException doGet(request, response); /Process the HTTP Get request public void doGet(HttpServletRequest request, HttpServletResponse response) throws response.setContentType(image/jpeg); DefaultPieDataset data = getDataSet(); JFreeChart chart = ChartFactory.createPie3DChart(水果产量图, data, true, false
8、, false ); ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 100,chart,400,300,null); /* * 获取一个演示用的简单数据集对象 * return private static DefaultPieDataset getDataSet() DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue(苹果,100);梨子,200);葡萄,300);香蕉,400);荔枝,500); return dataset;2,
9、编译程序3,配置web.xml文件!DOCTYPE web-app PUBLIC -/Sun Microsystems, Inc./DTD Web Application 2.3/EN web-app servlet-nameBarChart3DDemo2Sservlet-classorg.jfree.chart.demo.BarChart3DDemo2S/servlet/web-app4,启动Tomcat,运行http:/localhost:8080/cewolf/ BarChart3DDemo2S5,在IE浏览器上可以看到如下图片,则恭喜你成功了!6,有兴趣可以实现下面几个图片 曲线图 柱
10、状图2.3 问题遇到问题了么,学会利用Jbuilder自己建立一个WEB工程吧!2.4 JFreeChart实现图形和应用交互很多情况我们不仅仅要求可以在浏览器上显示一个图表,我们更需要客户可以直接在图表上做一下交互的操作,例如获取信息提示,点击图表某个部分进行更详细信息的展示等等。例如前面生成的简单柱状图,用户需要在看到柱状图后点击某种水果例如是苹果即可看到各个地区苹果产量的情况。为此就要求该图形具有交互操作的功能。在HTML中为了让一个图像具有可交互的功能就必须给该图像定义一个Map对象。下表节选一段具有该功能的HTML代码MAP NAME=chartMapAREA SHAPE=RECT
11、COORDS=81,15,126,254 href=series=0&category=100 title=100 = 7,048 onclick=javascript:clickChart(100return false;143,27,188,255category=200200 = 6,721 clickChart (200205,54,250,255category=300300 = 5,929300267,85,312,255category=400400 = 5,005400329,17,374,255category=DietDiet = 7,017Diet/MAP由此就产生了一个
12、问题:如果根据一个图像来生成对应的MAP对象。我们回头看看刚才的代码,在创建一个图表对象时候有两个参数,我们举柱状图的例子来讲这两个参数就是ChartFactory. createBarChart3D方法中的最后两个参数,这两个参数的类型都是布尔值。这两个参数意思分别是:是否创建工具提示(tooltip)以及是否生成URL。这两个参数分别对应着MAP中一个AREA的title属性以及href属性。可是我想知道的是怎么来产生这个MAP啊!哈哈,不要着急,JFreeChart已经帮我们做好生成MAP对象的功能。为了生成MAP对象就要引入另外一个对象:ChartRenderingInfo。因为JFr
13、eeChart没有直接的方法利用一个图表对象直接生成MAP数据,它需要一个中间对象来过渡,这个对象就是ChartRenderingInfo。下图是生成MAP数据的流程图:如上图所示,ChartUtilities类是整个流程的核心,它周围的对象都是一些例如数据对象或者是文件等。这个流程简单描述如下:首先创建一个ChartRenderingInfo对象并在调用ChartUtilities的writeChartAsJPEG时作为最后一个参数传递进去。调用该方法结束后将产生一个图像文件以及一个填充好MAP数据的ChartRenderingInfo对象,有了这个对象我们还是没有办法获取具体的MAP数据,
14、我们还必须借助于ChartUtilities的writeImageMap方法来将ChartRenderingInfo对象读取出来。下面一段程序是Java Application 方式运行,生成一个html文件,运行该html文件可以展示交互效果。import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.OutputStream;import java.io.PrintWriter;import org.jfree.chart.ChartFactor
15、y;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.axis.ValueAxis;import org.jfree.chart.entity.StandardEntityCollection;import org.
16、jfree.chart.labels.StandardCategoryItemLabelGenerator;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.renderer.BarRenderer;import org.jfree.chart.urls.StandardCategoryURLGenerator;import org.jfree.data.CategoryDataset;import org.jfree.data.
17、DatasetUtilities; * A demo showing how to create an HTML image map with JFreeChart. * * author David Gilbertpublic class ImageMapDemo1 * Default constructor. public ImageMapDemo1() * Starting point for the demo. * param args ignored. public static void main(String args) / create a chart double data
18、= new double 56.0, -12.0, 34.0, 76.0, 56.0, 100.0, 67.0, 45.0, 37.0, 45.0, 67.0, 25.0, 34.0, 34.0, 100.0, 53.0, 43.0, 54.0, 34.0, 34.0, 87.0, 64.0, 73.0, 12.0 ; CategoryDataset dataset = DatasetUtilities.createCategoryDataset(Series , Type , data); JFreeChart chart = null; boolean drilldown = true;
19、if (drilldown) CategoryAxis categoryAxis = new CategoryAxis(Category ValueAxis valueAxis = new NumberAxis(Value BarRenderer renderer = new BarRenderer(); renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator(); renderer.setItemURLGenerator(new StandardCategoryURLGenerator(bar_chart_d
20、etail.jsp); CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, renderer); plot.setOrientation(PlotOrientation.VERTICAL); chart = new JFreeChart(Bar Chart, JFreeChart.DEFAULT_TITLE_FONT, plot, true); else chart = ChartFactory.createBarChart(Vertical Bar Chart, / chart title, / dom
21、ain axis label, / range axis label dataset, / data PlotOrientation.VERTICAL, true, / include legend chart.setBackgroundPaint(java.awt.Color.white); / * / * JFREECHART DEVELOPER GUIDE * / * The JFreeChart Developer Guide, written by David Gilbert, is available * / * to purchase from Object Refinery L
22、imited: / * * / * http:/www.object- * / * Sales are used to provide funding for the JFreeChart project - please * / * support us so that we can continue developing free software. * * / save it to an image try ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection(); File file1
23、 = new File(barchart100.png ChartUtilities.saveChartAsPNG(file1, chart, 600, 400, info); / write an HTML page incorporating the image with an image map File file2 = new File(barchart100.html OutputStream out = new BufferedOutputStream(new FileOutputStream(file2); PrintWriter writer = new PrintWriter
24、(out); writer.println(HTMLHEADTITLEJFreeChart Image Map Demo/HEADBODY ChartUtilities.writeImageMap(writer, chart, info);IMG SRC=barchart100.png + WIDTH=600 HEIGHT=400 BORDER=0 USEMAP=#chart/BODY/HTML writer.close(); catch (IOException e) System.out.println(e.toString();第三章 体验CeWolf标签库简单的说,Cewolf 以MVC框架的方式提供一个基于JFree
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1