Java基本類 Java基本類 (JFC)
由一些軟件包組成
這些軟件包主要包括下面一些應用程序接口(API):
;抽象窗口工具集(AWT)(
及以上版本)
;Swing構件
;Java
D應用程序接口(
D API)
;兼容程序接口
上面列出的這些應用程序接口可能會出現在多個軟件包中
例如:
D API在Java
awt和 Java
awt
image軟件包中都存在
雖然像Java
awt
geom等一些特殊的軟件包也支持
D API
但 是大量的
D API類都存在於Java
awt軟件包中
AWT(
及以上版本)是JFC的核心
AWT為JFC的構成提供了以下的基本結構:
;代理事件模型
;輕量構件
;剪貼板和數據傳輸
;打印和無鼠標操作
抽象窗口工具集 在開發applet和圖形應用程序時
一般需要用到AWT
AWT是免費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時
很少需要直接處理同位體
但它們的存在卻影響其操作結果
例如
如果沒有同位體
則某些java
awt
Component方法不會象我們所預期的那樣進行工作
使用同位體方法可以在記錄時間內實現GUI工具構件
然而
使用同位體也有很多的缺點
同位體設計基礎存在缺陷並且不能縮放
輕量構件 AWT構件全都是重量構件
即它們都具有同位體
並且在本地 (不透明)窗口中進行顯示
這樣使用將花費昂貴的代價
而且在更改其默認行為時
不可以將其派生為子類
此外
它們必須是矩形的
而且不能有透明的背景
同位體可以快速產生一個GUI工具構件
因為本地同位體做了更多的實際工作
而AWT
類所做的僅僅是表面工作
因此
它很容易開發
開發最初的AWT
只用了不到
個星期的時間
但這種效率帶的利益在很大程度上被一些不利因素抵銷了
比如基本的同位體結構
有限的事件模式以及同位體與AWT之間不匹配造成的大量缺陷
版本的AWT引人了輕量構件的概念
輕量構件直接擴展了java
awt
Component或java
awt
Container
輕量構件沒有同位體
在其重量容器窗口中顯示
而不是在其本身窗口中顯示
輕量構件不會導致與它們自己關連的不透明窗口的性能損失
而且還可以有透明的背景
其中有透明背景的性能意味著即使輕量構件的界限域實際上是矩形的
它也可以顯示為非矩形
SWing的歷史 要了解Swing
首先必須了解AWT
AWT是Swing的基礎
Java的發展速度超出了人們的想象
Java API中最可視的部分
AWT突然成為了人們關注的焦點
遺憾的是
原來的AWT不能滿足發展的需要
原來的AWT不是為許多開發人員使用的
功能強大的用戶界面 (UI)工具包而設計的
其設計目的是支持開發小應用程序中的簡單用戶界面
例如
原來的AWT缺少許多面向對象UI工具包中所能見到的特性
例如
剪貼板
打印支持和鍵盤導航等特性在AWT中都不存在
原來的AWT甚至不包括彈出式菜單或滾動窗格等基本特性
而彈出式菜單和滾動窗格是開發現代用戶界面的兩個基本元素
此外
AWT的下層構件還有嚴重的缺陷
人們使AWT適應基於繼承的
具有很大伸縮性的事件模型
甚至更糟
基於對等組件 (peer)的體系結構也被用於AWT
該體系結構注定要成為AWT的致命弱點
為了盡快推向市場和保持本地的界面樣式
於是產生了基於對等組件的體系結構
而該體系結構注定是要失敗的
對等組件是完成薄弱的AWT對象所委托任務的本地用戶界面組件
對等組件負責完成所有的具體工作
包括繪制自己
對事件做出反應等
這使得AWT組件除了在適當的時間與其對等組件交互外無事可做
由於AWT類只是較復雜的本地對等組件的外殼
所以
AWT的早期開發人員能在最快的時間內創建組件
例如
java
awt
Panel類只包含十二行代碼
另外
對等組件的設計也有嚴重的缺點
首先
在大多數平台上
對等組件都是在本地窗口中繪制的
每個組件一個本地窗口實在不能得到高性能
為此
含有大量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