国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
AWT與SWING

目前大多數(shù)的嵌入式Java虛擬機(jī)都提供了對(duì)AWT 的支持但是不提供對(duì)Swing 的支持。但是,在標(biāo)準(zhǔn)版的Java平臺(tái)上Swing 才是推薦使用的圖形界面系統(tǒng),在Sun 公司所提供的Java Tutorial 中甚至把基于AWT 的圖形用戶(hù)界面設(shè)計(jì)這一部份從其網(wǎng)站中刪除,需要利用到AWT 進(jìn)行圖形用戶(hù)界面設(shè)計(jì)的用戶(hù)只有將該部份下載到本地硬盤(pán)才能夠使用這部份教程。在標(biāo)準(zhǔn)版Java中正值春風(fēng)得意的Swing 為什么到了嵌入式應(yīng)用中便不再吃香了呢?

AWT 是Abstract Window ToolKit (抽象窗口工具包)的縮寫(xiě),這個(gè)工具包提供了一套與本地圖形界面進(jìn)行交互的接口。AWT 中的圖形函數(shù)與操作系統(tǒng)所提供的圖形函數(shù)之間有著一一對(duì)應(yīng)的關(guān)系,我們把它稱(chēng)為peers。 也就是說(shuō),當(dāng)我們利用 AWT 來(lái)構(gòu)件圖形用戶(hù)界面的時(shí)候,我們實(shí)際上是在利用操作系統(tǒng)所提供的圖形庫(kù)。由于不同操作系統(tǒng)的圖形庫(kù)所提供的功能是不一樣的,在一個(gè)平臺(tái)上存在的功能在另外一個(gè)平臺(tái)上則可能不存在。為了實(shí)現(xiàn)Java語(yǔ)言所宣稱(chēng)的"一次編譯,到處運(yùn)行"的概念,AWT 不得不通過(guò)犧牲功能來(lái)實(shí)現(xiàn)其平臺(tái)無(wú)關(guān)性,也就是說(shuō),AWT 所提供的圖形功能是各種通用型操作系統(tǒng)所提供的圖形功能的交集。由于AWT 是依靠本地方法來(lái)實(shí)現(xiàn)其功能的,我們通常把AWT控件稱(chēng)為重量級(jí)控件。

Swing 是在AWT的基礎(chǔ)上構(gòu)建的一套新的圖形界面系統(tǒng),它提供了AWT 所能夠提供的所有功能,并且用純粹的Java代碼對(duì)AWT 的功能進(jìn)行了大幅度的擴(kuò)充。例如說(shuō)并不是所有的操作系統(tǒng)都提供了對(duì)樹(shù)形控件的支持, Swing 利用了AWT 中所提供的基本作圖方法對(duì)樹(shù)形控件進(jìn)行模擬。由于 Swing 控件是用100%的Java代碼來(lái)實(shí)現(xiàn)的,因此在一個(gè)平臺(tái)上設(shè)計(jì)的樹(shù)形控件可以在其他平臺(tái)上使用。由于在Swing 中沒(méi)有使用本地方法來(lái)實(shí)現(xiàn)圖形功能,我們通常把Swing控件稱(chēng)為輕量級(jí)控件。

說(shuō)到這里我想各位讀者應(yīng)該明白了AWT和Swing之間的基本區(qū)別:AWT 是基于本地方法的C/C++程序,其運(yùn)行速度比較快;Swing是基于AWT 的Java程序,其運(yùn)行速度比較慢。對(duì)于一個(gè)嵌入式應(yīng)用來(lái)說(shuō),目標(biāo)平臺(tái)的硬件資源往往非常有限,而應(yīng)用程序的運(yùn)行速度又是項(xiàng)目中至關(guān)重要的因素。在這種矛盾的情況下,簡(jiǎn)單而高效的AWT 當(dāng)然成了嵌入式Java的第一選擇。而在普通的基于PC或者是工作站的標(biāo)準(zhǔn)Java應(yīng)用中,硬件資源對(duì)應(yīng)用程序所造成的限制往往不是項(xiàng)目中的關(guān)鍵因素,所以在標(biāo)準(zhǔn)版的Java中則提倡使用Swing, 也就是通過(guò)犧牲速度來(lái)實(shí)現(xiàn)應(yīng)用程序的功能。


抽象窗口工具集
  在開(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)件的概念。輕量構(gòu)件直接擴(kuò)展了java.awt.Component或java.awt.Container。輕量構(gòu)件沒(méi)有同位體,在其重量容器窗口中顯示,而不是在其本身窗口中顯示。輕量構(gòu)件不會(huì)導(dǎo)致與它們自己關(guān)連的不透明窗口的性能損失,而且還可以有透明的背景。其中有透明背景的性能意味著即使輕量構(gòu)件的界限域?qū)嶋H上是矩形的,它也可以顯示為非矩形。

  
  SWing的歷史
  要了解Swing,首先必須了解AWT,AWT是Swing的基礎(chǔ)。
  Java的發(fā)展速度超出了人們的想象,Java
API中最可視的部分----AWT突然成為了人們關(guān)注的焦點(diǎn)。遺憾的是,原來(lái)的AWT不能滿(mǎn)足發(fā)展的需要。
  原來(lái)的AWT不是為許多開(kāi)發(fā)人員使用的、功能強(qiáng)大的用戶(hù)界面
(UI)工具包而設(shè)計(jì)的,其設(shè)計(jì)目的是支持開(kāi)發(fā)小應(yīng)用程序中的簡(jiǎn)單用戶(hù)界面。例如,原來(lái)的AWT缺少許多面向?qū)ο骍I工具包中所能見(jiàn)到的特性,例如,剪貼板、打印支持和鍵盤(pán)導(dǎo)航等特性在AWT中都不存在。原來(lái)的AWT甚至不包括彈出式菜單或滾動(dòng)窗格等基本特性,而彈出式菜單和滾動(dòng)窗格是開(kāi)發(fā)現(xiàn)代用戶(hù)界面的兩個(gè)基本元素。

  此外,AWT的下層構(gòu)件還有嚴(yán)重的缺陷。人們使AWT適應(yīng)基于繼承的、具有很大伸縮性的事件模型。甚至更糟,基于對(duì)等組件
(peer)的體系結(jié)構(gòu)也被用于AWT,該體系結(jié)構(gòu)注定要成為AWT的致命弱點(diǎn)。
  為了盡快推向市場(chǎng)和保持本地的界面樣式,于是產(chǎn)生了基于對(duì)等組件的體系結(jié)構(gòu),而該體系結(jié)構(gòu)注定是要失敗的。對(duì)等組件是完成薄弱的AWT對(duì)象所委托任務(wù)的本地用戶(hù)界面組件。

  對(duì)等組件負(fù)責(zé)完成所有的具體工作,包括繪制自己、對(duì)事件做出反應(yīng)等,這使得AWT組件除了在適當(dāng)?shù)臅r(shí)間與其對(duì)等組件交互外無(wú)事可做。由于AWT類(lèi)只是較復(fù)雜的本地對(duì)等組件的外殼,所以,AWT的早期開(kāi)發(fā)人員能在最快的時(shí)間內(nèi)創(chuàng)建組件。例如,java.awt.Panel類(lèi)只包含十二行代碼。

  另外,對(duì)等組件的設(shè)計(jì)也有嚴(yán)重的缺點(diǎn)。首先,在大多數(shù)平臺(tái)上,對(duì)等組件都是在本地窗口中繪制的。每個(gè)組件一個(gè)本地窗口實(shí)在不能得到高性能,為此,含有大量AWT組件的小應(yīng)用程序付出了很高的性能代價(jià)。

  把不同平臺(tái)上的本地對(duì)等組件硬塞進(jìn)Java框架中也是一個(gè)問(wèn)題,使這些AWT組件跨平臺(tái)的表現(xiàn)一致是完全不可能的。結(jié)果,不但沒(méi)有實(shí)現(xiàn)急需的新組件,而且開(kāi)發(fā)時(shí)間都浪費(fèi)在修補(bǔ)對(duì)等組件的錯(cuò)誤上和不兼容問(wèn)題上了。

  更糟的是,AWT有很高的錯(cuò)誤發(fā)生率。于是,第三方開(kāi)始提供他們自己的工具包,這些工具包提供了更可靠的下層構(gòu)件并提供了比AWT更多的功能。這些工具包之一是Netscape的Internet基礎(chǔ)類(lèi)
(IFC),IFC是一組建立在NEXTSTEP中的用戶(hù)界面工具包概念基礎(chǔ)上的一組輕量類(lèi)。IFC組件不是對(duì)等的,在許多方面勝過(guò)了AWT組件。IFC還吸引了更多的開(kāi)發(fā)人員加盟。

  由于認(rèn)識(shí)到Java領(lǐng)域很可能在標(biāo)準(zhǔn)用戶(hù)界面工具包問(wèn)題上出現(xiàn)分裂局面,JavaSoft和Netscape達(dá)成了一個(gè)交易,共同實(shí)現(xiàn)Java基礎(chǔ)類(lèi)
(Apple公司和IBM公司也參加了JFC的開(kāi)發(fā))。Netscape開(kāi)發(fā)人員與Swing工程師一起合作,以便把大部分的IFC的功能嵌人到Swing組件中。

  起初打算讓Swing類(lèi)似于Netscape的IFC。然而,隨著時(shí)間的推移,在增加了插入式界面樣式等特性并修改了設(shè)計(jì)之后,Swing大大地偏離了它原來(lái)的目標(biāo)。隨著Swing1.1版本的推出,雖然大量的IFC技術(shù)仍然嵌在Swing中,但是,Swing與IFC相似的部分已大部分消失了。今天,在一個(gè)功能全面的用戶(hù)界面工具包中,Swing提供了AWT和IFC中最優(yōu)秀的成份。

  
  輕量組件與重量組件的比較
  輕量組件首次出現(xiàn)在AWT1.1版本中。AWT最初只包括與本地對(duì)等組件相關(guān)聯(lián)的重量組件,這些組件在它們自己的本地不透明窗口中繪制。
  相反,輕量組件沒(méi)有本地對(duì)等組件,而且在它們的重量容器的窗口中繪制。
  由于輕量組件不在本地不透明的窗口中繪制,因此,它們可以有透明的背景。透明的背景使顯示的輕量組件可以是非矩形的,雖然所有組件
(重量的或輕量的)都基于一個(gè)矩形邊框。
  Swing組件幾乎都是輕量組件,那些頂層容器:窗體、小應(yīng)用程序、窗口和對(duì)話(huà)框除外。
  因?yàn)檩p量組件是在其容器的窗口中繪制的,而不是在自己的窗口中繪制的,所以輕量組件最終必須包含在一個(gè)重量容器中。因此,Swing的窗體、小應(yīng)用程序、窗口和對(duì)話(huà)框都必須是重量組件,以便提供一個(gè)可以在其中繪制Swing輕量組件的窗口。

  
  好了,這是對(duì)AWT和Swing的一個(gè)概述,更具體的應(yīng)用需要在不斷的實(shí)踐中去體會(huì)。

SWT

SWT在性能和外觀上、以及易用性上比起Swing來(lái)說(shuō)確實(shí)要好得多。但是SWT的致命缺點(diǎn)在于:與平臺(tái)綁定過(guò)緊,跨平臺(tái)發(fā)布的時(shí)候比Swing要麻煩得多。 swt有個(gè)缺點(diǎn):必需使用本地動(dòng)態(tài)庫(kù). SWING可以不考慮這點(diǎn).

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
SWING 學(xué)習(xí)筆記 1
java學(xué)習(xí)中最應(yīng)該注意的Java GUI用戶(hù)界面以何為基礎(chǔ)
JAVA程序設(shè)計(jì) 第八課
JAVA Swt初識(shí)
AWT/SWT/Swing大比較之一:模型設(shè)計(jì)與實(shí)現(xiàn)
Swing 圖形用戶(hù)界面中常用的組件
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服