国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

AWT和Swing的概述

2019-11-18 11:56:41
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  java基本類
  Java基本類 (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類都存在于Java.awt軟件包中。
  
  AWT(1.1及以上版本)是JFC的核心。AWT為JFC的構(gòu)成提供了以下的基本結(jié)構(gòu):
  •代理事件模型。
  •輕量構(gòu)件。
  •剪貼板和數(shù)據(jù)傳輸。
  •打印和無(wú)鼠標(biāo)操作。
  
  抽象窗口工具集
  在開發(fā)applet和圖形應(yīng)用程序時(shí),一般需要用到AWT,AWT是免費(fèi)Java開發(fā)工具包(JDK)的一部分。 AWT的作用是給用戶提供基本的界面構(gòu)件,例如按鈕、列表、菜單、文本域等等。AMT 構(gòu)件主要是用來(lái)建立圖形用戶界面的獨(dú)立平臺(tái)。此外,AWT還提供事件處理結(jié)構(gòu)、支持剪貼板、數(shù)據(jù)傳輸和圖像操作。隨著2D API的出現(xiàn),AWT還包括提供高級(jí)字體操作、打印、地理數(shù)據(jù)獲取和輸入方法等功能的軟件包。AWT的初始版本是基于在簡(jiǎn)單用戶界面中開發(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í)用戶界面具有更多的可比性。
  
  同位體和平臺(tái)獨(dú)立
  隨著Applet程序和圖形應(yīng)用程序接口的發(fā)展,AWT提供了一系列的通用類,這些通用類在引用時(shí)不需要考慮特定的窗口平臺(tái),同位體(Peer)就屬于這種AWT類集。同位體是一種本地圖形用戶接口(GUI)構(gòu)件,由AWT類治理。同位體的工作方法和它們對(duì)程序開發(fā)的影響常
  常讓人混淆。
  AWT構(gòu)件中,包含有對(duì)其同位體的大量實(shí)用操作。例如,假如你使用AWT創(chuàng)建一個(gè)menu類的實(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開發(fā)組決定使用同位體方法,這一方法使得交叉平臺(tái)窗口工具開發(fā)變得極為迅速。 使用同位體可以避免重新實(shí)現(xiàn)本地窗口構(gòu)件中已包含的實(shí)用工具,而且,使用同位體還能使applet和應(yīng)用程序保留在本地系統(tǒng)中,這是因?yàn)橥惑w實(shí)質(zhì)上是由本地構(gòu)件組成的,而AWT類僅僅是同位體外圍的包裝與操作工具。
  雖然在使用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í),不可以將其派生為子類。此外,它們必須是矩形的,而且不能有透明的背景。同位體可以快速產(chǎn)生一個(gè)GUI工具構(gòu)件。因?yàn)楸镜赝惑w做了更多的實(shí)際工作,而AWT
  類所做的僅僅是表面工作,因此,它很輕易開發(fā)。開發(fā)最初的AWT,只用了不到6個(gè)星期的時(shí)間。但這種效率帶的利益在很大程度上被一些不利因素抵銷了,比如基本的同位體結(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不能滿足發(fā)展的需要。
  原來(lái)的AWT不是為許多開發(fā)人員使用的、功能強(qiáng)大的用戶界面 (UI)工具包而設(shè)計(jì)的,其設(shè)計(jì)目的是支持開發(fā)小應(yīng)用程序中的簡(jiǎn)單用戶界面。例如,原來(lái)的AWT缺少許多面向?qū)ο骍I工具包中所能見到的特性,例如,剪貼板、打印支持和鍵盤導(dǎo)航等特性在AWT中都不存在。原來(lái)的AWT甚至不包括彈出式菜單或滾動(dòng)窗格等基本特性,而彈出式菜單和滾動(dòng)窗格是開發(fā)現(xiàn)代用戶界面的兩個(gè)基本元素。
  此外,AWT的下層構(gòu)件還有嚴(yán)重的缺陷。人們使AWT適應(yīng)基于繼續(xù)的、具有很大伸縮性的事件模型。甚至更糟,基于對(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ù)的本地用戶界面組件。
  對(duì)等組件負(fù)責(zé)完成所有的具體工作,包括繪制自己、對(duì)事件做出反應(yīng)等,這使得AWT組件除了在適當(dāng)?shù)臅r(shí)間與其對(duì)等組件交互外無(wú)事可做。由于AWT類只是較復(fù)雜的本地對(duì)等組件的外殼,所以,AWT的早期開發(fā)人員能在最快的時(shí)間內(nèi)創(chuàng)建組件。例如,java.awt.Panel類只包含十二行代碼。
  另外,對(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)急需的新組件,而且開發(fā)時(shí)間都浪費(fèi)在修補(bǔ)對(duì)等組件的錯(cuò)誤上和不兼容問(wèn)題上了。
  更糟的是,AWT有很高的錯(cuò)誤發(fā)生率。于是,第三方開始提供他們自己的工具包,這些工具包提供了更可靠的下層構(gòu)件并提供了比AWT更多的功能。這些工具包之一是Netscape的Internet基礎(chǔ)類 (IFC),IFC是一組建立在NEXTSTEP中的用戶界面工具包概念基礎(chǔ)上的一組輕量類。IFC組件不是對(duì)等的,在許多方面勝過(guò)了AWT組件。IFC還吸引了更多的開發(fā)人員加盟。
  由于熟悉到Java領(lǐng)域很可能在標(biāo)準(zhǔn)用戶界面工具包問(wèn)題上出現(xiàn)分裂局面,JavaSoft和Netscape達(dá)成了一個(gè)交易,共同實(shí)現(xiàn)Java基礎(chǔ)類 (Apple公司和IBM公司也參加了JFC的開發(fā))。Netscape開發(fā)人員與Swing工程師一起合作,以便把大部分的IFC的功能嵌人到Swing組件中。
  起初打算讓Swing類似于Netscape的IFC。然而,隨著時(shí)間的推移,在增加了插入式界面樣式等特性并修改了設(shè)計(jì)之后,Swing大大地偏離了它原來(lái)的目標(biāo)。隨著Swing1.1版本的推出,雖然大量的IFC技術(shù)仍然嵌在Swing中,但是,Swing與IFC相似的部分已大部分消失了。今天,在一個(gè)功能全面的用戶界面工具包中,Swing提供了AWT和IFC中最優(yōu)秀的成份。
  
  輕量組件與重量組件的比較
  輕量組件首次出現(xiàn)在AWT1.1版本中。AWT最初只包括與本地對(duì)等組件相關(guān)聯(lián)的重量組件,這些組件在它們自己的本地不透明窗口中繪制。
  相反,輕量組件沒(méi)有本地對(duì)等組件,而且在它們的重量容器的窗口中繪制。
  由于輕量組件不在本地不透明的窗口中繪制,因此,它們可以有透明的背景。透明的背景使顯示的輕量組件可以是非矩形的,雖然所有組件 (重量的或輕量的)都基于一個(gè)矩形邊框。
  Swing組件幾乎都是輕量組件,那些頂層容器:窗體、小應(yīng)用程序、窗口和對(duì)話框除外。
  因?yàn)檩p量組件是在其容器的窗口中繪制的,而不是在自己的窗口中繪制的,所以輕量組件最終必須包含在一個(gè)重量容器中。因此,Swing的窗體、小應(yīng)用程序、窗口和對(duì)話框都必須是重量組件,以便提供一個(gè)可以在其中繪制Swing輕量組件的窗口。
  
  好了,這是對(duì)AWT和Swing的一個(gè)概述,更具體的應(yīng)用需要在不斷的實(shí)踐中去體會(huì)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新野县| 樟树市| 凌源市| 县级市| 湘潭市| 台东市| 湖南省| 莱芜市| 泾源县| 垦利县| 万州区| 科技| 平凉市| 岐山县| 济宁市| 霍山县| 建德市| 康马县| 日照市| 绥江县| 冀州市| 卢氏县| 镇巴县| 鄂托克旗| 津市市| 乐至县| 贵阳市| 郁南县| 留坝县| 乌兰县| 崇信县| 涡阳县| 丹凤县| 上栗县| 陵水| 余姚市| 调兵山市| 南溪县| 永州市| 德江县| 周口市|