淺談Swing和AWT構件
Java基本類
Java基本類 (JFC),由一些軟件包組成。這些軟件包主要包括下面一些應用程序接口(API):
◆抽象窗口工具集(AWT)(1.1及以上版本)。
◆Swing構件。
◆Java2D應用程序接口(2D API)。
◆兼容程序接口。
上面列出的這些應用程序接口可能會出現在多個軟件包中。例如:2D API在Java.awt和 Java.awt.image軟件包中都存在,雖然像Java.awt.geom等一些特殊的軟件包也支持2D API,但 是大量的2D API類都存在于Java.awt軟件包中。
AWT(1.1及以上版本)是JFC的核心。AWT為JFC的構成提供了以下的基本結構:
◆代理事件模型。
◆輕量構件。
◆剪貼板和數據傳輸。
◆打印和無鼠標操作。
抽象窗口工具集
在開發applet和圖形應用程序時,一般需要用到AWT,AWT是免費Java開發工具包(JDK)的一部分。 AWT的作用是給用戶提供基本的界面構件,例如按鈕、列表、菜單、文本域等等。AMT構件主要是用來建立圖形用戶界面的獨立平臺。此外,AWT還提供事件處理結構、支持剪貼板、數據傳輸和圖像操作。隨著2D API的出現,AWT還包括提供高級字體操作、打印、地理數據獲取和輸入方法等功能的軟件包。AWT的初始版本是基于在簡單用戶界面中開發小applet 程序而設計的,與之相比,當前的AWT做了很大的改進,它提供事件模型重新設計、剪貼板和數據傳輸支持以及打印和無鼠標操作等功能。從而與Parc Place的VisualWork或Borland公司的Object Windows Library(OWL)等企業級用戶界面具有更多的可比性。
同位體和平臺獨立
隨著Applet程序和圖形應用程序接口的發展,AWT提供了一系列的通用類,這些通用類在引用時不需要考慮特定的窗口平臺,同位體(Peer)就屬于這種AWT類集。同位體是一種本地圖形用戶接口(GUI)構件,由AWT類管理。同位體的工作方法和它們對程序開發的影響常
常讓人混淆。
AWT構件中,包含有對其同位體的大量實用操作。例如,如果你使用AWT創建一個menu類的實例,那么當Java運行時系統將創建一個菜單同位體的實例,而由創建的同位體實際執行菜單的顯示和管理。在創建菜單實例中,Solaris JDK將產生一個Motif菜單同位體;Windows 95將產生一個Windows 95菜單同位體;Macintosh JDK將產生一個Macintosh菜單同位體等等。
一個Java程序創建并顯示AWT構件,AWT構件創建并顯示本地構件(同位體)。AWT開發組決定使用同位體方法,這一方法使得交叉平臺窗口工具開發變得極為迅速。使用同位體可以避免重新實現本地窗口構件中已包含的實用工具,而且,使用同位體還能使applet和應用程序保留在本地系統中,這是因為同位體實質上是由本地構件組成的,而AWT類僅僅是同位體外圍的包裝與操作工具。
雖然在使用AWT時,很少需要直接處理同位體,但它們的存在卻影響其操作結果。例如,如果沒有同位體,則某些java.awt.Component方法不會象我們所預期的那樣進行工作。使用同位體方法可以在記錄時間內實現 GUI工具構件。然而,使用同位體也有很多的缺點,同位體設計基礎存在缺陷并且不能縮放。
輕量構件
AWT構件全都是重量構件,即它們都具有同位體,并且在本地 (不透明)窗口中進行顯示。這樣使用將花費昂貴的代價,而且在更改其默認行為時,不可以將其派生為子類。此外,它們必須是矩形的,而且不能有透明的背景。同位體可以快速產生一個GUI工具構件。因為本地同位體做了更多的實際工作,而AWT
類所做的僅僅是表面工作,因此,它很容易開發。開發最初的AWT,只用了不到6個星期的時間。但這種效率帶的利益在很大程度上被一些不利因素抵銷了,比如基本的同位體結構、有限的事件模式以及同位體與AWT之間不匹配造成的大量缺陷。
1.1版本的AWT引人了輕量構件的概念。Swing構件直接擴展了java.awt.Component或java.awt.Container。輕量構件沒有同位體,在其重量容器窗口中顯示,而不是在其本身窗口中顯示。輕量構件不會導致與它們自己關連的不透明窗口的性能損失,而且還可以有透明的背景。其中有透明背景的性能意味著即使Swing構件的界限域實際上是矩形的,它也可以顯示為非矩形。
【編輯推薦】