比較AWT和Swing
AWT和Swing組件體系
a)Swing通過在父組件上動態調用add()和remove()方法來對組件樹進行動態維護因此可以存在沒有父組件的子組件
b)SWT通過在構造函數的參數中指定父組件因此不可能存在沒有父組件的子組件
AWT和Swing組件繪制
a)Swing通過調用組件的paint()方法來進行組件的繪制組件進一步對他的子組件調用paint()從而完成整棵組件樹的繪制通過子類化重寫paint()方法可以完全定制一個組件的繪制
b)SWTSWT組件只是本地平台上實際組件的一個代理實際組件采用win編程方式進行繪制繪制的過程不在JVM中完成因此子類化也不能對繪制進行完全定制當SWT組件進行繪制時他在完成了本地的繪制以後會返回JVM然後對所有已注冊的PaintListener發出通知因此通過注冊PaintListener可以對組件繪制進行一定程度上的修改
AWT和Swing事件模型
a)Swing中的事件會跟據當前的焦點進行發送父組件不能對事件進行過濾Swing中的事件監聽器都是有類型的因此每個組件所能支持的事件類型是通過方法名來限定的不能擴展
b)SWT中的事件也是根據當前的焦點進行發送父組件不能對事件進行過濾SWT中支持有類型的監聽器也支持無類型的監聽器通過addListener(typelistener)我們可以為組件添加任何類型的監聽器
AWT和Swing包設計
a)Swing是一個純粹的組件庫他沒有圖形的操作他的繪制最終轉發給Java D來完成
b)SWT包含了組件庫和圖形庫他的結構與AWT比較接近
其它
AWT和SWT實現原理不同AWT控件相當於是一筆一畫繡出來的參加 javaawtComponentpaint(Graphics g)性能差而SWT調用了操作系統後台原生庫orgeclipseswtwidgetsControl類型中就沒有類似的paint方法了但是有一個接口orgeclipseswtgraphicsDrawable實現原理的不同帶來了性能和用戶視覺的差異
SWING 是基於AWT提供的MVC不完全實現JFACE是基於SWT提供的MVC不完全實現兩者的核心作用都是提供了viewer和模型封裝的概念從設計實現層面看SWING更加唯美一些JFACE則更加側重於實用SWING和 JFACE兩者都偏重於行為控制上下文而對UI數據(例如一個文本框控件中的內容)的管理都沒有做太多的設計JFACE中略有改進提供了 setData的概念JFACE是為了Eclipse而生的雖然後來 RCP出來了又做了其他的包裝宣傳典型的體現就是提供了JFace Text Framework和其他一些用戶構建Eclipse元素的UI支持也提供了一些系統資源管理(ImageRegsitry ResourceManager等)等附加功能
SWING框架與代碼很優美但效率低特別是高級控件如各種選擇框超慢與Windows本身不協調使用體驗差而且再怎麼使用LookAndFeel還是不美觀總是感覺畫的不清晰
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26412.html