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