對Swing、AWT和SWT的認識

作者: LL_java  來源: 博客園  發布時間: 2010-10-28 15:59  閱讀: 5065 次  推薦: 0   原文鏈接   [收藏]  
摘要:現在java提供了除swing之外的圖形GUI開發工具,那么他們之間有什么區別呢?本文主要分析了Swing,AWT和SWT他們之間的區別。

  1、 三者的概述:

  AWT(Abstract Window Toolkit) 是 API為Java 程序提供的建立圖形用戶界面GUI (Graphics User Interface)工具集,基于一個對等體實現的。AWT可用于Java的applet和applications中。它支持圖形用戶界面編程的功能包括: 用戶界面組件;事件處理模型;圖形和圖像工具,包括形狀、顏色和字體類;布局管理器,可以進行靈活的窗口布局而與特定窗口的尺寸和屏幕分辨率無關;數據傳送類,可以通過本地平臺的剪貼板來進行剪切和粘貼。

  SWT("Standard Widget Toolkit",是一個最初由IBM開發的工具包,現在由Eclipse基金會維護。)是一個獨立于平臺的,也是基于一個對等體實現的,可以脫離 Eclipse 框架單獨使用的圖形組件,用JNI技術提供與本機系統同樣的用戶界面組件的觀感,較好的運行效率,穩定的平臺表現。一個SWT應用程序的基本組成部分為顯示界面(Display)、命令界面(Shell,使命令進入并使運行初始化)和窗口部件(Widgets)。Display負責管理事件循環和控制UI線程和其他線程之間的通訊。Shell是應用程序中被操作系統窗口管理器管理的窗口。每個SWT應用程序至少需要一個Display和大于等于1個的Shell實例。

  Swing是基于AWT的架構之上的,在不改變大量的程序代碼前提下允許程序中每個組件觀感的變化。支持可更換觀感技術的引入允許Swing組件在模擬原生組件外觀的同時又保持了平臺獨立的優點。

  2、 三者的區別

  AWT、SWTt都依賴底層平臺,都基于對等體實現的,在不同的操作系統上開發出來的程序顯示效果不一樣,SWT提供比AWT更為豐富的組件集;而Swing對底層平臺的依賴很少,所以給不同用戶一致的感覺,還擁有一個豐富、便捷的用戶界面元素集合。由于AWT和SWT都持有對本地組件的引用,它們必須以正確的方式釋放這些引用以避免內存泄露和JVM崩潰。AWT將絕大多數資源管理任務交給系統,不過這使得AWT的實現復雜化了。一旦它實現了,開發者很少有機會犯錯誤并使他們的程序崩潰。而SWT是采用另外的方法,它有一條法則就是:誰創建,誰釋放。因此開發者必須謹慎地顯式調用dispose方法釋放每一個由他創建的組件和資源。這雖然簡化了SWT的實現模型,但把開發者擺在了因錯誤編碼而易于造成程序崩潰這一風險之上。

  awt只提供所以操作系統都有的控件,即全部調用的是本地操作系統的控件;Swing只是窗口和框架等的頂層的組件調用操作系統控件,大部分都是使用java代碼來模擬的;swt大部分是用的本地操作系統的控件,有些在別的操作系統的控件要經過自己的繪制。Swing和SWT都在實現上都使用模擬。SWT是模擬平臺上缺失的組件。區別是SWT的模擬更像是AWT的Canvas實現的模擬。SWT的Composite類有它自己在操作系統中相應的對等體。它從自己的對等體中獲得所有它所需要的資源如圖形處理的對象,字體和顏色等。它直接從操作系統獲取所有的事件并進行處理。然而,Swing組件在操作系統中沒有相應的對等體。它只是一塊頂層容器中的邏輯區域,實際上它從頂層容器的對等體中借用資源。Swing的事件并不是底層系統產生的事件。它們實際是由頂層容器處理AWT事件所產生的偽事件。另一個不同之處是Swing組件的z-order系統是來自于AWT組件的。Swing是基于awt的架構之上的,故Swing組件與頂層AWT容器共享一個對等體。因此,Swing組件也和頂層容器有相同的z-order。SWT和AWT組件都有不同于頂層容器的z-order,通常是高于頂層容器。故而如果AWT組件和Swing組件混合在一起的話,Swing組件將可能被AWT組件遮住。當操作系統開始更新UI的時候,頂層容器和Swing組件總是先于AWT組件繪制。當它們完成繪制,AWT組件會覆蓋Swing可能繪制過的地方。因此不提倡Swing和AWT組件的混用。如果有一個浮動的Swing組件如菜單,AWT組件很可能遮蓋菜單。

0
0
 
標簽:Swing AWT SWT
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()