贯通开源Web图形与报表技术全集
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第2章 图形报表开发基础

【本章导读】

本章讲述Java图形和报表技术的发展历史,并介绍了Java中利用AWT和Swing进行图形的编程实例,接下来简要介绍了当前常用的图形与报表技术,从而使读者对Java的图形报表技术有一个大致的了解。

2.1 图形与报表开发概述

自从早期Java语言出现到现在,图形和用户界面功能已取得了飞跃式的发展。Java2平台包含一个复杂的跨平台的用户界面体系结构,它包括众多的高级组件、一个先进、功能丰富且独立于设备的图形系统和许多多媒体扩展。

2.2 发展历史

在Java 2平台发行之前,AWT(Abstract Window Toolkit,抽象窗口工具包)是Java平台图形功能的范围。例如Swing等各种技术都是作为可选的扩展引入的。

在Java 2平台上,大部分扩展都可以在平台的核心找到一席之地,成为Java基础类(Java Foundation Classes,JFC)的一部分。JFC指的是包含在Java2平台内的一整套图形和用户界面技术,包括AWT和Swing等,其核心是Swing。AWT的最大缺点是在相同的Java应用程序在每个平台上都有不同的外观。

现在来看一下Swing,它使用AWT的一个子集来实现这个目标,这个子集包括基本画图操作和java.awt包中的某些类(包括Container、Window、Panel、Dialog和Frame)。Swing没有完全遵循“Java语言作为一个平台”的路线,而且它支持可插式Look-and-Feel(它很接近主题的概念,在linux社区中非常流行)。每一个Swing组件都有一个自己的功能模型和一个独立的外观(look-and-feel),这可以预先设置或在运行时更改。这样就成功地解决了AWT的最大缺点。

在Java 2平台之前,语言中的图形功能相当简单,仅限于单像素厚度的实线。少数几个几何图形(如椭圆、弧和多边形)和基本的画图功能。随着Java 2D API的出现,所有的一切都改变了。Java 2D API的核心是由java.awt.Graphics2D类提供的,该类是java.awt.Graphics的一个子类。API的其他部分由java.awt层次结构中的其他包提供,包括java.awt.color、java.awt.font和java.awt.geom。

2.3 AWT、Swing开发实例

首先,通过简单的示例展示一下AWT的使用,在下面的AWT示例中,展示了利用AWT的java.awt.Graphics对象绘制圆角矩形、矩形和椭圆。代码如下所示:

import java.applet.*;
import java.awt.Color;
import java.awt.Graphics;

/**
 * AWT的演示实例,
 * 绘制圆角矩形、矩形和椭圆.
 */
public class AwtSample extends Applet {
    private static final long serialVersionUID = 1L;

    /**
      * 绘制图形.
      * @param g图形对象
      */
    public void paint(Graphics g) {
          g.drawRect(24, 22, 60, 34);
          g.drawRoundRect(10, 10, 90, 60, 50, 30);

          //设置图形颜色
          g.setColor(Color.cyan);
          g.fillOval(10, 80, 120, 30);

          int k = 0;
          for (int i = 1; i <= 8; i++) {
              //实现了一个颜色的变迁
              Color c = new Color(i * 32 - 1, 0, 0);
              g.setColor(c);
              k = k + 5;
              g.drawOval(80 + k, 77 + k, 120 - 2 * k, 80 - 2 * k);
          }
    }
}

在Eclipse中运行该程序,运行效果如图2-1所示。

图2-1 利用AWT绘制圆角矩形、矩形和椭圆的实例

AWT的后续版本进行了很大改进,可以绘制漂亮的2D图形。下面是一个绘制2D图形的示例,需要用到java.awt.Graphics2D,并且用到java.awt.geom中有关二维几何中的2D椭圆类,代码如下:

import java.applet.Applet;
import java.awt.AlphaComposite;
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.geom.Ellipse2D;

/**
 * AWT中2D图形的演示示例.
 */
public class Awt2DSample extends Applet {
    private static final long serialVersionUID = 1L;

    /**
      * 绘制2D图形.
      * @param g图形对象
      */
    public void paint(Graphics g) {
        //获得Graphics2D对象
        Graphics2D g2 = (Graphics2D) g;
        //设置渲染的质量
        g2.setRenderingHint(RenderingHints.KEY ANTIALIASING,
            RenderingHints.VALUE ANTIALIAS ON);
        //定义线的倾斜度
        GradientPaint gp = new GradientPaint(0, 60, Color.red,
                                        0, 120, Color.yellow);
        //新建一个椭圆实例
        Ellipse2D r = new Ellipse2D.Float(30, 60, 160, 60);
        g2.setPaint(gp);
        g2.fill(r);
        //设置旋转
        g2.transform(AffineTransform.getRotateInstance(Math.PI/8));
        g2.setFont(new Font("宋体", Font.BOLD, 30));
        g2.setPaint(Color.blue);
        //设置透明度
        g2.setComposite(AlphaComposite.getInstance(
                                    AlphaComposite.SRC OVER, 0.5f));
        g2.drawString("2D图形演示", 50,70);
    }
  }

运行效果如图2-2所示。

图2-2 AWT中2D图形示例

2.4 常用图形与报表技术

在本小节中,笔者将对常用的图形和报表技术进行介绍。在图形技术中,将对JFreeChart、Cewolf和jCharts进行简要介绍,使得读者对这三种图形技术有一个大致的了解。而后,在介绍报表技术时,主要介绍了iReport、JasperReports、Eclipse BIRT、JFreeReport和OpenReports。这些技术在而后的各章都将进行较详尽的讲述,本章只需要读者对常用的这几种图形和报表技术有个了解。

2.4.1 图形技术

1. JFreeChart

JFreeChart是最常用的一种Web开源图形技术,它主要采用AWT包作为图形显示的后台支持,在新版本中,也采用Swing来完成一些更高级的图形功能。支持的图形种类广泛,例如柱状图、曲线图、时序图、饼图、甘特图、区域图、财政图表、仪表图和组合图等。并且可以在现有图形中非常容易地进行扩展,开发其他所需的图形,由于其易用性和功能的强大,在Java开发社区备受好评。

2. Cewolf

Cewolf是基于JFreeChart的一种开源Web图形技术。它所做的工作相对简单,主要功能是为Java Web开发人员提供一套JFreeChart图形的标签,使得开发人员能非常容易的调用其图形标签完成图形的创建工作。

又由于它是基于JFreeChart的,所以JFreeChart支持的所有图形它也提供支持。将JFreeChart和Cewolf结合开发图形,能大大的降低开发工作。

3. jCharts

jCharts为sourceforge上一个开源Web图形技术,它是100%的制图工具,它的实现原理与JFreeChart类似,基于AWT包,在AWT的基础上进行二次开发。不过相对JFreeChart,它支持的图形类型相对较少,它目前支持的图形有柱状图、饼图、曲线图、点状图、区域图、雷达图和组合图。它相对JFreeChart来说,显得轻巧,对于开发过程中常用图形的绘制已经足够。而且它设计合理,读者可以通过继承其某些类轻松的完成其他种类图形的扩展。

2.4.2 报表技术

1. iReport

iReport作为一个开源的、优秀的报表设计器,功能强大。它不但有适合于Windows安装的应用程序,同时,还提供完全开放的源代码,可供参考及原理分析。通过iReport可视化的图形界面,可以设计出各种各样的简单或复杂的报表,这些报表可以作JasperReport的报表模板,避免编写复杂XML,因此可以Web报表开发节省大量的开发时间。

使用iReport,可以使用各种数据源制作报表,并且,还可以可视化的设置报表的字段、参数和变量等信息。对于复杂的报表,例如包含子报表的报表,以及交叉报表等也都可以很容易地通过可视化的界面实现。

2. JasperReports

JasperReports是一个报表制作工具,用户须按照其规则编写一个XML,然后得到用户所要的报表文件。它可以以PDF、HTML或XML等多种形式产生报表,并支持CSV,XLS等格式展示报表。

在实际应用中,一般的情况是:首先利用iReport进行模板的设计,然后采用JasperReports进行数据填、编译及展示,将两者完美的结合起来,制作出多种形式的报表。

JasperReports能够丰富且灵活的对报表布局进行设计、支持对数据进行文字化或图形化的展示。同时,它支持多种数据源、多种报表格式的输出,并且对子报表等也提供了很好的支持。

iReport+JasperReports是在项目中制作报表的一种常用选择。

3. Eclipse Birt

Eclipse BIRT是一个基于Eclipse的开放源代码报表系统。使用BIRT,读者能制作出多样化的报表:列表、包括图形的报表、包括子报表的报表、交叉表等。

BIRT的可视化的程度很高,可以可视化的进行如下操作:

● 设计数据源和数据集;

● 进行报表版面的设计(例如添加文本信息、添加图像信息、设计网格、列表、图表以及页眉和页脚等信息);

● 库的设计;

● 模板的设计;

● BIRT还允许开发人员进行更高层次的编码,开发人员可选择使用Java或JavaScript脚本来进行自定义的编码。

4. JFreeReport

JFreeReport是开源网站SourceForge.net上的一个项目,与JFreeChart一样属于jfree公司的产品。它是用来创建报表的一个免费的Java类库。JFreeReport数据继承自Swing组件的T ableModel接口,并且根据一个基于XML的报表模板文件被格式化。产生的报表可以在屏幕上预览、发送到打印机或者保存为PDF、HTML、Excel、CSV和普通的文本格式。JFreeReport不仅支持基于C/S结构的系统,而且支持基于B/S结构的系统的在线报表显示。

JFeeReport可从XML中读取数据,还可以从数据库中获取数据,还可以创建图形的报表、包括子报表的报表等。使用JFreeReprot制作的报表还可以通过Web的方式进行访问。

5. OpenReports

OpenReports提供基于web的灵活的开源报表解决方案,通过浏览器自动生成动态PDF、XLS、RTF、HTML、CSV、和Chart报表。利用到的开源技术有Hibernate、Veloctiy、Struts2、Spring 2等。

OpenReports支持各种报表引擎,如JasperReports、FFreeReport、JXLS以及Eclipse BIRT,能满足日常项目中各种需求。OpenReports当然也支持QueryReports及ChartReports,因此,利用QueryReports无须预先定义报表模板,而可以直接通过创建SQL语句来构建报表。

在OpenReports中,可以对用户、分组、报表、数据源、报表参数、图表、系统和管理员等进行管理。

2.5 小结

本章侧重介绍了Java图形报表技术的发展历史,如在Java 2平台发行之前,AWT在Java的图形方面是主角,Swing作为其扩展。Java 2平台发行后,成为JFC核心的Swing技术大行其道,它使用AWT的一个子集来实现“相同的Java应用程序在每个平台上都有相同的外观”的目标。本章还介绍了Swing的Java Look and feel技术,以及Java 2D一些常用的API,介绍了Java中图形技术AWT和Swing的一些简要开发实例,通过简单的图形展示例子介绍了其API的使用。

最后向读者介绍常用的图形(JFreeChart、Cewolf和jCharts)和报表(iReport、JasperReports、Eclipse BIRT、JFreeReport和OpenReports)技术,这些技术将在后续章节详细描述,本章的介绍起的只是一个提纲挈领的作用,读者可以根据介绍为项目选择合适的图形或报表技术。