- 貫通開源Web圖形與報表技術(shù)全集
- 謝星星 陳育春編著
- 11字
- 2018-12-27 15:37:05
第2章 圖形報表開發(fā)基礎(chǔ)
【本章導(dǎo)讀】
本章講述Java圖形和報表技術(shù)的發(fā)展歷史,并介紹了Java中利用AWT和Swing進(jìn)行圖形的編程實例,接下來簡要介紹了當(dāng)前常用的圖形與報表技術(shù),從而使讀者對Java的圖形報表技術(shù)有一個大致的了解。
2.1 圖形與報表開發(fā)概述
自從早期Java語言出現(xiàn)到現(xiàn)在,圖形和用戶界面功能已取得了飛躍式的發(fā)展。Java2平臺包含一個復(fù)雜的跨平臺的用戶界面體系結(jié)構(gòu),它包括眾多的高級組件、一個先進(jìn)、功能豐富且獨立于設(shè)備的圖形系統(tǒng)和許多多媒體擴(kuò)展。
2.2 發(fā)展歷史
在Java 2平臺發(fā)行之前,AWT(Abstract Window Toolkit,抽象窗口工具包)是Java平臺圖形功能的范圍。例如Swing等各種技術(shù)都是作為可選的擴(kuò)展引入的。
在Java 2平臺上,大部分?jǐn)U展都可以在平臺的核心找到一席之地,成為Java基礎(chǔ)類(Java Foundation Classes,JFC)的一部分。JFC指的是包含在Java2平臺內(nèi)的一整套圖形和用戶界面技術(shù),包括AWT和Swing等,其核心是Swing。AWT的最大缺點是在相同的Java應(yīng)用程序在每個平臺上都有不同的外觀。
現(xiàn)在來看一下Swing,它使用AWT的一個子集來實現(xiàn)這個目標(biāo),這個子集包括基本畫圖操作和java.awt包中的某些類(包括Container、Window、Panel、Dialog和Frame)。Swing沒有完全遵循“Java語言作為一個平臺”的路線,而且它支持可插式Look-and-Feel(它很接近主題的概念,在linux社區(qū)中非常流行)。每一個Swing組件都有一個自己的功能模型和一個獨立的外觀(look-and-feel),這可以預(yù)先設(shè)置或在運行時更改。這樣就成功地解決了AWT的最大缺點。
在Java 2平臺之前,語言中的圖形功能相當(dāng)簡單,僅限于單像素厚度的實線。少數(shù)幾個幾何圖形(如橢圓、弧和多邊形)和基本的畫圖功能。隨著Java 2D API的出現(xiàn),所有的一切都改變了。Java 2D API的核心是由java.awt.Graphics2D類提供的,該類是java.awt.Graphics的一個子類。API的其他部分由java.awt層次結(jié)構(gòu)中的其他包提供,包括java.awt.color、java.awt.font和java.awt.geom。
2.3 AWT、Swing開發(fā)實例
首先,通過簡單的示例展示一下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); //設(shè)置圖形顏色 g.setColor(Color.cyan); g.fillOval(10, 80, 120, 30); int k = 0; for (int i = 1; i <= 8; i++) { //實現(xiàn)了一個顏色的變遷 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的后續(xù)版本進(jìn)行了很大改進(jìn),可以繪制漂亮的2D圖形。下面是一個繪制2D圖形的示例,需要用到j(luò)ava.awt.Graphics2D,并且用到j(luò)ava.awt.geom中有關(guān)二維幾何中的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; //設(shè)置渲染的質(zhì)量 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); //設(shè)置旋轉(zhuǎn) g2.transform(AffineTransform.getRotateInstance(Math.PI/8)); g2.setFont(new Font("宋體", Font.BOLD, 30)); g2.setPaint(Color.blue); //設(shè)置透明度 g2.setComposite(AlphaComposite.getInstance( AlphaComposite.SRC OVER, 0.5f)); g2.drawString("2D圖形演示", 50,70); } }
運行效果如圖2-2所示。

圖2-2 AWT中2D圖形示例
2.4 常用圖形與報表技術(shù)
在本小節(jié)中,筆者將對常用的圖形和報表技術(shù)進(jìn)行介紹。在圖形技術(shù)中,將對JFreeChart、Cewolf和jCharts進(jìn)行簡要介紹,使得讀者對這三種圖形技術(shù)有一個大致的了解。而后,在介紹報表技術(shù)時,主要介紹了iReport、JasperReports、Eclipse BIRT、JFreeReport和OpenReports。這些技術(shù)在而后的各章都將進(jìn)行較詳盡的講述,本章只需要讀者對常用的這幾種圖形和報表技術(shù)有個了解。
2.4.1 圖形技術(shù)
1. JFreeChart
JFreeChart是最常用的一種Web開源圖形技術(shù),它主要采用AWT包作為圖形顯示的后臺支持,在新版本中,也采用Swing來完成一些更高級的圖形功能。支持的圖形種類廣泛,例如柱狀圖、曲線圖、時序圖、餅圖、甘特圖、區(qū)域圖、財政圖表、儀表圖和組合圖等。并且可以在現(xiàn)有圖形中非常容易地進(jìn)行擴(kuò)展,開發(fā)其他所需的圖形,由于其易用性和功能的強大,在Java開發(fā)社區(qū)備受好評。
2. Cewolf
Cewolf是基于JFreeChart的一種開源Web圖形技術(shù)。它所做的工作相對簡單,主要功能是為Java Web開發(fā)人員提供一套JFreeChart圖形的標(biāo)簽,使得開發(fā)人員能非常容易的調(diào)用其圖形標(biāo)簽完成圖形的創(chuàng)建工作。
又由于它是基于JFreeChart的,所以JFreeChart支持的所有圖形它也提供支持。將JFreeChart和Cewolf結(jié)合開發(fā)圖形,能大大的降低開發(fā)工作。
3. jCharts
jCharts為sourceforge上一個開源Web圖形技術(shù),它是100%的制圖工具,它的實現(xiàn)原理與JFreeChart類似,基于AWT包,在AWT的基礎(chǔ)上進(jìn)行二次開發(fā)。不過相對JFreeChart,它支持的圖形類型相對較少,它目前支持的圖形有柱狀圖、餅圖、曲線圖、點狀圖、區(qū)域圖、雷達(dá)圖和組合圖。它相對JFreeChart來說,顯得輕巧,對于開發(fā)過程中常用圖形的繪制已經(jīng)足夠。而且它設(shè)計合理,讀者可以通過繼承其某些類輕松的完成其他種類圖形的擴(kuò)展。
2.4.2 報表技術(shù)
1. iReport
iReport作為一個開源的、優(yōu)秀的報表設(shè)計器,功能強大。它不但有適合于Windows安裝的應(yīng)用程序,同時,還提供完全開放的源代碼,可供參考及原理分析。通過iReport可視化的圖形界面,可以設(shè)計出各種各樣的簡單或復(fù)雜的報表,這些報表可以作JasperReport的報表模板,避免編寫復(fù)雜XML,因此可以Web報表開發(fā)節(jié)省大量的開發(fā)時間。
使用iReport,可以使用各種數(shù)據(jù)源制作報表,并且,還可以可視化的設(shè)置報表的字段、參數(shù)和變量等信息。對于復(fù)雜的報表,例如包含子報表的報表,以及交叉報表等也都可以很容易地通過可視化的界面實現(xiàn)。
2. JasperReports
JasperReports是一個報表制作工具,用戶須按照其規(guī)則編寫一個XML,然后得到用戶所要的報表文件。它可以以PDF、HTML或XML等多種形式產(chǎn)生報表,并支持CSV,XLS等格式展示報表。
在實際應(yīng)用中,一般的情況是:首先利用iReport進(jìn)行模板的設(shè)計,然后采用JasperReports進(jìn)行數(shù)據(jù)填、編譯及展示,將兩者完美的結(jié)合起來,制作出多種形式的報表。
JasperReports能夠豐富且靈活的對報表布局進(jìn)行設(shè)計、支持對數(shù)據(jù)進(jìn)行文字化或圖形化的展示。同時,它支持多種數(shù)據(jù)源、多種報表格式的輸出,并且對子報表等也提供了很好的支持。
iReport+JasperReports是在項目中制作報表的一種常用選擇。
3. Eclipse Birt
Eclipse BIRT是一個基于Eclipse的開放源代碼報表系統(tǒng)。使用BIRT,讀者能制作出多樣化的報表:列表、包括圖形的報表、包括子報表的報表、交叉表等。
BIRT的可視化的程度很高,可以可視化的進(jìn)行如下操作:
● 設(shè)計數(shù)據(jù)源和數(shù)據(jù)集;
● 進(jìn)行報表版面的設(shè)計(例如添加文本信息、添加圖像信息、設(shè)計網(wǎng)格、列表、圖表以及頁眉和頁腳等信息);
● 庫的設(shè)計;
● 模板的設(shè)計;
● BIRT還允許開發(fā)人員進(jìn)行更高層次的編碼,開發(fā)人員可選擇使用Java或JavaScript腳本來進(jìn)行自定義的編碼。
4. JFreeReport
JFreeReport是開源網(wǎng)站SourceForge.net上的一個項目,與JFreeChart一樣屬于jfree公司的產(chǎn)品。它是用來創(chuàng)建報表的一個免費的Java類庫。JFreeReport數(shù)據(jù)繼承自Swing組件的T ableModel接口,并且根據(jù)一個基于XML的報表模板文件被格式化。產(chǎn)生的報表可以在屏幕上預(yù)覽、發(fā)送到打印機(jī)或者保存為PDF、HTML、Excel、CSV和普通的文本格式。JFreeReport不僅支持基于C/S結(jié)構(gòu)的系統(tǒng),而且支持基于B/S結(jié)構(gòu)的系統(tǒng)的在線報表顯示。
JFeeReport可從XML中讀取數(shù)據(jù),還可以從數(shù)據(jù)庫中獲取數(shù)據(jù),還可以創(chuàng)建圖形的報表、包括子報表的報表等。使用JFreeReprot制作的報表還可以通過Web的方式進(jìn)行訪問。
5. OpenReports
OpenReports提供基于web的靈活的開源報表解決方案,通過瀏覽器自動生成動態(tài)PDF、XLS、RTF、HTML、CSV、和Chart報表。利用到的開源技術(shù)有Hibernate、Veloctiy、Struts2、Spring 2等。
OpenReports支持各種報表引擎,如JasperReports、FFreeReport、JXLS以及Eclipse BIRT,能滿足日常項目中各種需求。OpenReports當(dāng)然也支持QueryReports及ChartReports,因此,利用QueryReports無須預(yù)先定義報表模板,而可以直接通過創(chuàng)建SQL語句來構(gòu)建報表。
在OpenReports中,可以對用戶、分組、報表、數(shù)據(jù)源、報表參數(shù)、圖表、系統(tǒng)和管理員等進(jìn)行管理。
2.5 小結(jié)
本章側(cè)重介紹了Java圖形報表技術(shù)的發(fā)展歷史,如在Java 2平臺發(fā)行之前,AWT在Java的圖形方面是主角,Swing作為其擴(kuò)展。Java 2平臺發(fā)行后,成為JFC核心的Swing技術(shù)大行其道,它使用AWT的一個子集來實現(xiàn)“相同的Java應(yīng)用程序在每個平臺上都有相同的外觀”的目標(biāo)。本章還介紹了Swing的Java Look and feel技術(shù),以及Java 2D一些常用的API,介紹了Java中圖形技術(shù)AWT和Swing的一些簡要開發(fā)實例,通過簡單的圖形展示例子介紹了其API的使用。
最后向讀者介紹常用的圖形(JFreeChart、Cewolf和jCharts)和報表(iReport、JasperReports、Eclipse BIRT、JFreeReport和OpenReports)技術(shù),這些技術(shù)將在后續(xù)章節(jié)詳細(xì)描述,本章的介紹起的只是一個提綱挈領(lǐng)的作用,讀者可以根據(jù)介紹為項目選擇合適的圖形或報表技術(shù)。
- 32位嵌入式系統(tǒng)與SoC設(shè)計導(dǎo)論
- Expert AWS Development
- 傳感器技術(shù)應(yīng)用
- 大型數(shù)據(jù)庫管理系統(tǒng)技術(shù)、應(yīng)用與實例分析:SQL Server 2005
- 水晶石精粹:3ds max & ZBrush三維數(shù)字靜幀藝術(shù)
- 中國戰(zhàn)略性新興產(chǎn)業(yè)研究與發(fā)展·智能制造
- 項目管理成功利器Project 2007全程解析
- Extending Ansible
- Applied Data Visualization with R and ggplot2
- Excel 2010函數(shù)與公式速查手冊
- 重估:人工智能與賦能社會
- Creating ELearning Games with Unity
- Deep Learning Essentials
- 網(wǎng)站規(guī)劃與網(wǎng)頁設(shè)計
- Win 7二十一