首頁
中文書目錄
原文書目錄
 站內快速搜尋
資源中心
Book Series
Special Interest













■好消息,歐萊禮書籍已重新鋪貨至各大書局及網路書店,歡迎讀者選購       ■歡迎各院校採用歐萊禮書籍,學校團購請洽校園服務團隊

Learning Java the O'Reilly's Way

Java 2D Graphics


在看過 Direct3D 和 OpenGL 之後,你一定會以為圖學的 API 都很複雜難用,那麼你應該瞧瞧 Java 2D 和 Java 3D,相信你一定會改變你的想法。Java 2D 和 Java 3D 整合進了物件導向的觀念來以簡馭繁,Java 程式員可以輕易地繪出令人讚嘆的 2D/3D 圖形。想學繪圖程式設計,卻又在接觸 Direct3D 和 OpenGL 之後鎩羽而歸的讀者,不妨改從 Java 2D/3D 下手。

O'Reilly 已經出版了一本 Java 2D 的書,書名叫做「Java 2D Graphics」。「Java 2D Graphics」一書是由 O'Reilly 的王牌作者 Jonathan Knudsen 所著。在讀過 Jonathan 的書之後,讀者都會很喜歡 Jonathan 的寫作風格,因為 Jonathan 可以把複雜的原理用淺顯的方式來表達,「Java 密碼學」如是,「Java 2D 繪圖技術」一書亦如是。目前 O'Reilly 尚未出版任何 Java 3D 的書,我倒很希望 Jonathan 再寫一本「Java 3D Graphics」來造福讀者。

不要以為只有設計繪圖程式或遊戲軟體才會用到 Java 2D,其實 Java 2D 的用途可能遠比你想像來得廣泛。我認為,只要你的程式有 GUI,就很可能會用到 Java 2D。因為 AWT 和 Swing 的元件常常無法完全適合我們,這個時候自己繪製一部分的 GUI 就有絕對的必要。如果,你的 Java 程式需要 GUI,那麼我建議你早點把 Java 2D 學好,以備不時之需。以我自己的例子來說,我正在開發一套軟體,需要提供一個表格狀的 GUI,而 Swing 的 JTable 卻不適合我使用,因為我的表格需要能在同一個 column 的不同 cell 放進不同種類的元件,我也需要 cell 之間能夠合併,我還需要有特殊的 selection model...... 這些都是 JTabel 不支援的,所以我就用 Java 2D 自己繪製這一切。有了 Java 2D 的幫忙,這一切簡單多了,而呈現出來的視覺效果也很不錯(當然,一方面要歸功我的美術細胞,謝謝你們!我的美術細胞們)。

Java 2D 是 Core API,所以使用 Java 2D 的程式不需要額外安裝任何 package。其實,AWT 和 Swing 都是透過 Java 2D 來進行繪圖的。

你可能會問,Java 在 1.0 和 1.1 就有繪圖的 API 了,為什麼在 Java 2 (JDK 1.2) 之後還要多出一個 Java 2D。其實,Java 2D 比起以前的「陽春繪圖 API」可是功能強大許多, 下面列出以前「陽春繪圖 API」的幾點侷限之處:
  • 所有線條只能用單一像素的寬度畫出。
  • 只能使用少數幾種字形
  • AWT 沒有提供很多繪畫控制項目。舉例來說,你無法操縱單一字元的形狀。
  • 如果你想要旋轉、或放大縮小任何物件,必須要自己動手進行數學運算才能達成。
  • 如果你想要進行漸層或花紋等特殊著色方式,必須自己動手做。
  • 只提供最基本的影像功能。
  • 要控制透明度,必須大費周章。
這些都已經在 Java 2D 中得到解決。如果這些文字敘述無法讓你感受到 Java 2D 的威力,那麼請打開你的電腦執行 JDK 所附的一個範例程式:
C:\> cd \jdk1.3\demo\jfc\Java2D
C:\jdk1.3\demo\jfc\Java2D> java -classpath Java2Demo.jar Java2Demo
很驚人,是不是?呵呵!還有更嚇人的呢!請看 Vincent J. Hardy 所著的「Java 2D API Graphics」(Sun Press 出版)一書所附的一堆彩色圖片,保證你會大吃一驚。沒錯!這都是用 Java 2D 做出來的。(可不是 Corel Draw 呦!)

繪圖本來就是很複雜的一件學問,Java 2D 的 API 雖然好用、易擴充,但是前提是:你要徹底懂它的原理和架構。這時候,一本深入淺出,說理清楚的入門書就有必要了,我認為 Jonathan 所著的這本書很適合用來引導程式員學習 Java 2D,是一本初、中階的書。而 Vincent J. Hardy 的「Java 2D API Graphics」(Sun Press 出版)也是一本很棒的書,較偏中、高階。在讀過 Jonathan 的「Java 2D Graphics」之後,我建議讀者再繼續把 Vincent J. Hardy 的「Java 2D API Graphics」一書讀過,因為 Vincent J. Hardy 的書中有介紹光影變化等進階的主題,還附有作者自行開發的 GLF(Graphics Layer Framework),讓程式員可以輕易地疊出漂亮的視覺效果。Vincent J. Hardy 目前是 Sun 的員工,你可以在Sun的網站上免費下載GLF。

本文作者:蔡學鏞
張貼日期:12/11/2002

| 首頁 | 聯絡我們 |
© 2009, O'Reilly Media, Inc. Taiwan Branch