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