1. 程式人生 > >java畫圖總結之一 java.awt和javax.swing

java畫圖總結之一 java.awt和javax.swing

一,AWT和swing

參考自:  http://blog.csdn.net/iamluole/article/details/8142257                 http://blog.sina.com.cn/s/blog_661a8e550100ktt8.html

AWT和Swing都是Java中的包。

AWT(Abstract Window Toolkit):抽象視窗工具包,早期編寫圖形介面應用程式的包。

Swing :為解決 AWT 存在的問題而新開發的圖形介面包。Swing是對AWT的改良和擴充套件。

awt的重點是對等Peer設計模式:

AWT的圖形函式與作業系統提供的圖形函式有著一一對應的關係。也就是說,當我們利用 AWT構件圖形使用者介面的時候,實際上是在利用作業系統的圖形庫。
       不同的作業系統其圖形庫的功能可能不一樣,在一個平臺上存在的功能在另外一個平臺上則可能不存在。為了實現Java語言所宣稱的"一次編譯,到處執行"的概念,AWT不得不通過犧牲功能來實現平臺無關性。因此,AWT 的圖形功能是各作業系統圖形功能的“交集”。
        因為AWT是依靠本地方法來實現功能的,所以

AWT控制元件稱為“重量級控制元件”。

而Swing ,不僅提供了AWT 的所有功能,還用純粹的Java程式碼對AWT的功能進行了大幅度的擴充。

由於 Swing是用純粹的Java程式碼來實現的,因此Swing控制元件在各平臺通用。
       因為Swing不使用本地方法,故
Swing控制元件稱為“輕量級控制元件”。

但是缺點也很明顯:Swing的速度和效率是所有GUI系統中最慢的。之所以導致這個結果,其原因是:
1、Swing的類層次太深,一個JFrame經過了4層的類繼續關係,假如再加上虛擬機器的圖形功能內部實現,就有6層的轉接關係,每一次的繼續和轉接都會消耗系統資源和速度損失。(過多的繼續會降低系統的速度,因為操作子類往往是使用基類指向來完成通用操作的)
2、Swing是基於自繪製圖形技術的,而Java為了保持可移植性,所以無法使用硬體加速和平臺特性來加快圖形操作的速度。因而Java的圖形技術都是“高層”的圖形技術,就似乎我們用Windows GDI去做動畫一樣,當然速度會很慢。

AWT和Swing之間的區別:
       1)AWT 是基於本地方法的C/C++程式,其執行速度比較快;Swing是基於AWT的Java程式,其執行速度比較慢。
       2)AWT的控制元件在不同的平臺可能表現不同,而Swing在所有平臺表現一致。

       在實際應用中,應該使用AWT還是Swing取決於應用程式所部署的平臺型別。例如:
       1)對於一個
嵌入式應用,目標平臺的硬體資源往往非常有限,而應用程式的執行速度又是專案中至關重要的因素。在這種矛盾的情況下,簡單而高效的AWT當然成了嵌入式Java的第一選擇。
       2)在普通的基於PC或者是工作站的標準Java應用中,硬體資源對應用程式所造成的限制往往不是專案中的關鍵因素。所以在標準版的Java中則提倡使用Swing, 也就是通過犧牲速度來實現應用程式的功能。