熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

AWT和Swing的概述

2013-11-23 19:04:18  來源: Java核心技術 

  
  Java基本類
  Java基本類 (JFC)由一些軟件包組成這些軟件包主要包括下面一些應用程序接口(API):
  &#;抽象窗口工具集(AWT)(及以上版本)
  &#;Swing構件
  &#;JavaD應用程序接口(D API)
  &#;兼容程序接口
  上面列出的這些應用程序接口可能會出現在多個軟件包中例如:D API在Javaawt和 Javaawtimage軟件包中都存在雖然像Javaawtgeom等一些特殊的軟件包也支持D API但 是大量的D API類都存在於Javaawt軟件包中
  
  AWT(及以上版本)是JFC的核心AWT為JFC的構成提供了以下的基本結構:
  &#;代理事件模型
  &#;輕量構件
  &#;剪貼板和數據傳輸
  &#;打印和無鼠標操作
  
  抽象窗口工具集
  在開發applet和圖形應用程序時一般需要用到AWTAWT是免費Java開發工具包(JDK)的一部分 AWT的作用是給用戶提供基本的界面構件例如按鈕列表菜單文本域等等AMT 構件主要是用來建立圖形用戶界面的獨立平台此外AWT還提供事件處理結構支持剪貼板數據傳輸和圖像操作隨著D 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 將產生一個Windows 菜單同位體;Macintosh JDK將產生一個Macintosh菜單同位體等等
  
  一個Java程序創建並顯示AWT構件AWT構件創建並顯示本地構件(同位體)AWT開發組決定使用同位體方法這一方法使得交叉平台窗口工具開發變得極為迅速 使用同位體可以避免重新實現本地窗口構件中已包含的實用工具而且使用同位體還能使applet和應用程序保留在本地系統中這是因為同位體實質上是由本地構件組成的而AWT類僅僅是同位體外圍的包裝與操作工具
  雖然在使用AWT時很少需要直接處理同位體但它們的存在卻影響其操作結果例如如果沒有同位體則某些javaawtComponent方法不會象我們所預期的那樣進行工作使用同位體方法可以在記錄時間內實現GUI工具構件然而使用同位體也有很多的缺點同位體設計基礎存在缺陷並且不能縮放
  
  輕量構件
  AWT構件全都是重量構件即它們都具有同位體並且在本地 (不透明)窗口中進行顯示這樣使用將花費昂貴的代價而且在更改其默認行為時不可以將其派生為子類此外它們必須是矩形的而且不能有透明的背景同位體可以快速產生一個GUI工具構件因為本地同位體做了更多的實際工作而AWT
  類所做的僅僅是表面工作因此它很容易開發開發最初的AWT只用了不到個星期的時間但這種效率帶的利益在很大程度上被一些不利因素抵銷了比如基本的同位體結構有限的事件模式以及同位體與AWT之間不匹配造成的大量缺陷
  版本的AWT引人了輕量構件的概念輕量構件直接擴展了javaawtComponent或javaawtContainer輕量構件沒有同位體在其重量容器窗口中顯示而不是在其本身窗口中顯示輕量構件不會導致與它們自己關連的不透明窗口的性能損失而且還可以有透明的背景其中有透明背景的性能意味著即使輕量構件的界限域實際上是矩形的它也可以顯示為非矩形
  
  SWing的歷史
  要了解Swing首先必須了解AWTAWT是Swing的基礎
  Java的發展速度超出了人們的想象Java API中最可視的部分AWT突然成為了人們關注的焦點遺憾的是原來的AWT不能滿足發展的需要
  原來的AWT不是為許多開發人員使用的功能強大的用戶界面 (UI)工具包而設計的其設計目的是支持開發小應用程序中的簡單用戶界面例如原來的AWT缺少許多面向對象UI工具包中所能見到的特性例如剪貼板打印支持和鍵盤導航等特性在AWT中都不存在原來的AWT甚至不包括彈出式菜單或滾動窗格等基本特性而彈出式菜單和滾動窗格是開發現代用戶界面的兩個基本元素
  此外AWT的下層構件還有嚴重的缺陷人們使AWT適應基於繼承的具有很大伸縮性的事件模型甚至更糟基於對等組件 (peer)的體系結構也被用於AWT該體系結構注定要成為AWT的致命弱點
  為了盡快推向市場和保持本地的界面樣式於是產生了基於對等組件的體系結構而該體系結構注定是要失敗的對等組件是完成薄弱的AWT對象所委托任務的本地用戶界面組件
  對等組件負責完成所有的具體工作包括繪制自己對事件做出反應等這使得AWT組件除了在適當的時間與其對等組件交互外無事可做由於AWT類只是較復雜的本地對等組件的外殼所以AWT的早期開發人員能在最快的時間內創建組件例如javaawtPanel類只包含十二行代碼
  另外對等組件的設計也有嚴重的缺點首先在大多數平台上對等組件都是在本地窗口中繪制的每個組件一個本地窗口實在不能得到高性能為此含有大量AWT組件的小應用程序付出了很高的性能代價
  把不同平台上的本地對等組件硬塞進Java框架中也是一個問題使這些AWT組件跨平台的表現一致是完全不可能的結果不但沒有實現急需的新組件而且開發時間都浪費在修補對等組件的錯誤上和不兼容問題上了
  更糟的是AWT有很高的錯誤發生率於是第三方開始提供他們自己的工具包這些工具包提供了更可靠的下層構件並提供了比AWT更多的功能這些工具包之一是Netscape的Internet基礎類 (IFC)IFC是一組建立在NEXTSTEP中的用戶界面工具包概念基礎上的一組輕量類IFC組件不是對等的在許多方面勝過了AWT組件IFC還吸引了更多的開發人員加盟
  由於認識到Java領域很可能在標准用戶界面工具包問題上出現分裂局面JavaSoft和Netscape達成了一個交易共同實現Java基礎類 (Apple公司和IBM公司也參加了JFC的開發)Netscape開發人員與Swing工程師一起合作以便把大部分的IFC的功能嵌人到Swing組件中
  起初打算讓Swing類似於Netscape的IFC然而隨著時間的推移在增加了插入式界面樣式等特性並修改了設計之後Swing大大地偏離了它原來的目標隨著Swing版本的推出雖然大量的IFC技術仍然嵌在Swing中但是Swing與IFC相似的部分已大部分消失了今天在一個功能全面的用戶界面工具包中Swing提供了AWT和IFC中最優秀的成份
  
  輕量組件與重量組件的比較
  輕量組件首次出現在AWT版本中AWT最初只包括與本地對等組件相關聯的重量組件這些組件在它們自己的本地不透明窗口中繪制
  相反輕量組件沒有本地對等組件而且在它們的重量容器的窗口中繪制
  由於輕量組件不在本地不透明的窗口中繪制因此它們可以有透明的背景透明的背景使顯示的輕量組件可以是非矩形的雖然所有組件 (重量的或輕量的)都基於一個矩形邊框
  Swing組件幾乎都是輕量組件那些頂層容器:窗體小應用程序窗口和對話框除外
  因為輕量組件是在其容器的窗口中繪制的而不是在自己的窗口中繪制的所以輕量組件最終必須包含在一個重量容器中因此Swing的窗體小應用程序窗口和對話框都必須是重量組件以便提供一個可以在其中繪制Swing輕量組件的窗口
  
  好了這是對AWT和Swing的一個概述更具體的應用需要在不斷的實踐中去體會

From:http://tw.wingwit.com/Article/program/Java/hx/201311/26219.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.