Java图表开发

JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。

组件下载地址:http://sourceforge.net/project/showfiles.php?group_id=15494/

应用基于JAVA的图表开发,基本能够解决目前的图形方面的需求,图形可以导出成PNG和JPEG格式,同时还可以与PDF和EXCEL关联。免费使用,有在线文档,但开发向导文档是收费的。

安装配置,我下载的是最新的jfreechart-1.0.1版本,解压到指定的位置,在开发中需要的lib文件夹下的jcommon-1.0.0和jfreechart-1.0.1两个jar文件。把上述三个文件拷贝到WEB-INF/LIB中,然后修改WEB-INF/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>至此jfreechart的配置就完成了,下面就可以进行jfreechart的开发了。

JFreeChart的配置及核心类库介绍

研究jfreechart源码发现源码的主要由两个大的包组成:

org.jfree.chart, 主要与图形本身有关

org.jfree.data,与图形显示的数据有关。

核心类主要有:

org.jfree.chart.JFreeChart:图表对象,任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象

org.jfree.data.category.XXXDataSet:数据集对象,用于提供显示图表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类

org.jfree.chart.plot.XXXPlot:图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要Axis、Renderer以及数据集对象的支持

org.jfree.chart.axis.XXXAxis:用于处理图表的两个轴:纵轴和横轴

org.jfree.chart.render.XXXRender:负责如何显示一个图表对象

org.jfree.chart.urls.XXXURLGenerator:用于生成Web图表中每个项目的鼠标点击链接

XXXXXToolTipGenerator:用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类

以开发饼图为例子说明JFreeChart开发图表的过程

调用与图形本身有关的API (org.jfree.chart),设置图表的标题,图片的背景颜色,图片的大小(长度和高度),还有一些其它的属性的设置。将图片保存为png 或是jpeg格式,输出图表。使用PieDataset,JDBCPieDataset调用JDBC驱动连接数据库。在jsp页面中获取URL,用img

示例代码:

PieChart.java //设置饼图的属性

package org.jfree.chart.demo;

import java.io.PrintWriter; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpServletRequest; import org.jfree.chart.ChartRenderingInfo; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.entity.StandardEntityCollection; import org.jfree.chart.plot.PiePlot; import org.jfree.chart.servlet.ServletUtilities; import org.jfree.data.general.PieDataset;

public class PieChart { /** * @param request * @param session * @param pw * @return string */ public String generatePieChart(HttpServletRequest request, HttpSession session, PrintWriter pw) {String filename = null;try{ConnDb object = new ConnDb();PieDataset data = object.readData();PiePlot plot = new PiePlot(data);

JFreeChart chart = new JFreeChart("",JFreeChart.DEFAULT_TITLE_FONT, plot, true);//可选,设置图片背景色chart.setBackgroundPaint(java.awt.Color.white);//可选,设置图片标题chart.setTitle("efei公司地区销售统计");ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());//500是图片长度,300是图片高度filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session); ChartUtilities.writeImageMap(pw, filename, info,false); pw.flush();}catch(Exception e) {System.out.println("Exception – " + e.toString());e.printStackTrace(System.out);filename = "public_error_500x300.png";}return filename;}}

连接数据库

ConnDb.java

package org.jfree.chart.demo;

import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;

import org.jfree.data.general.PieDataset;import org.jfree.data.jdbc.JDBCPieDataset;

public class ConnDb {public PieDataset readData() {JDBCPieDataset data = null;String url = "jdbc:oracle:thin:@host:1521:efei";Connection con;try {Class.forName("oracle.jdbc.OracleDriver");}catch (ClassNotFoundException e) {System.err.print("ClassNotFoundException: ");System.err.println(e.getMessage());}try {con = DriverManager.getConnection(url, "jefflan", "efei");data = new JDBCPieDataset(con);String sql = "SELECT description,value FROM efei";data.executeQuery(sql);con.close();}catch (SQLException e) {System.err.print("SQLException: ");System.err.println(e.getMessage());}catch (Exception e) {System.err.print("Exception: ");System.err.println(e.getMessage());}return data;}

}

jsp中显示图片:

pieChart.jsp

<%@ page import="org.jfree.chart.demo.PieChart"%><%@ page import = "java.io.PrintWriter" %><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><HTML><HEAD> <TITLE>pieChart</TITLE></HEAD><BODY><%PieChart pie = new PieChart();String filename = pie.generatePieChart(request,session,new PrintWriter(out));String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;%><P ALIGN="CENTER"> <img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= filename %>"></P></BODY></HTML>

建表语句:

CREATE table EFEI( ID NUMBER(15) PRIMARY KEY not null, DESCRIPTION VARCHAR2(200),VALUE NUMBER(15))

运行程序显示的图表如下:

却只能这样。只有对爱的人,我们才会斤斤计较,锱铢必较。

Java图表开发

相关文章:

你感兴趣的文章:

标签云: