程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java GUI:SWT/Swing/AWT的介紹及比較

Java GUI:SWT/Swing/AWT的介紹及比較

編輯:關於JAVA

本文通過對 Eclipse 的SWT 和 Java Swing、Abstract Windows Toolkit (AWT)GUI 工具包進行比較,可以幫助新應用程序的開發人員從中選擇適當的 工具。

您可以通過本文了解對每個工具包的基本特性的介紹,以及使用 每個工具包的優缺點。

簡介

developerWorks 上另外一些作者已 經展示了如何在 Swing 和 SWT 之間很好地進行遷移(參見 參考資料)。本文 的目標是幫助您在開始開發項目之前確定選擇使用哪個 GUI 工具包。

但 是首先我們要弄清一個問題:為什麼會有多個 Java™ GUI 工具包呢?最 好的答案是,一個工具包並不能滿足所有的要求,最近也不會開發一個可以滿足 所有要求的GUI 工具包。每個工具包都有各自的優缺點,這樣就可以根據自己的 需求和目標用戶來選擇適當的工具包。

下面就讓我們來學習有關這些工 具包的知識。

AWT 概述

Abstract Windows Toolkit(AWT)是最 原始的Java GUI 工具包。AWT 的主要優點是,它在 Java 技術的每個版本上都 成為了一種標准配置,包括早期的Web 浏覽器中的Java 實現;另外它也非常穩 定。這意味著我們不需要單獨安裝這個工具包,在任何一個 Java 運行環境中都 可以使用它,這一點正是我們所希望的特性。

AWT 是一個非常簡單的具 有有限 GUI 組件、布局管理器和事件的工具包(參見 清單 1、清單 2 和 清單 3)。這是因為 Sun 公司決定為 AWT 使用一種最小公分母(LCD)的方法。因此 它只會使用為所有 Java 主機環境定義的GUI 組件。最終的結果非常不幸,有些 經常使用的組件,例如表、樹、進度條等,都不支持。對於需要更多組件類型的 應用程序來說,我們需要從頭開始創建這些組件。這是一個很大的負擔。

清單 1. 基本的AWT Class 樹(全部在 java.awt 包中, “*” 表示抽象)

Object CheckboxGroup *Component Button Canvas CheckBox Choice Container Panel Applet ScrollPane Window Dialog Frame Label List TextComponent TextArea TextField MenuComponent MenuItem CheckboxMenuItem Menu PopupMenu

注意:另外幾個包中還有其他一些 AWT 組件,但是這是基本的組件集。

清單 2. AWT 提供了下面的布局管理器(全部在 java.awt 包中,“*” 表 示接口)

*LayoutManager FlowLayout GridLayout *LayoutManager2 BorderLayout CardLayout GridBagLayout

注意:另外幾個包中還有一些 AWT 布局管理器,很多都是為它們進行布局的 容器專門定制的,但是這是基本的布局管理器集。

清單 3. AWT 提供了以下事件(大部分在 java.awt.events 包中)

Object EventObject AWTEvent ActionEvent AdjustmentEvent ComponentEvent ContainerEvent FocusEvent InputEvent KeyEvent MouseEvent MouseWheelEvent PaintEvent WindowEvent HierarchyEvent InputMethodEvent InvocationEvent ItemEvent TextEvent

注意:其他幾個包中還有另外一些 AWT 事件,但是這是基本的事件集。這些 是從更通用的事件生成的具體事件。

通常對於 AWT 來說(也適用於 Swing 和 SWT),每個事件類型都有一個相 關的XxxListener 接口(XxxAdapter 的實現可能為空),其中 Xxx 是去掉 Event 後綴的事件名(例如,KeyEvent 事件的接口是 KeyListener),用來把 事件傳遞給處理程序。應用程序會為自己感興趣處理的事件的事件源(GUI 組件 或部件)進行注冊。有時監聽接口要處理多個事件。

AWT 的一個很好的特性是它通常可以對 GUI 組件自動進行銷毀。這意味著您 幾乎不需要對組件進行銷毀。一個例外是高級組件,例如對話框和框架。如果您 創建了耗費大量主機資源的資源,就需要手動對其進行銷毀。

AWT 組件 是 “線程安全的(thread-safe)”,這意味著我們不需要關心在應 用程序中是哪一個線程對 GUI 進行了更新。這個特性可以減少很多 GUI 更新的 問題,不過使 AWT GUI 運行的速度更慢了。

AWT 讓我們可以以自頂向下 (top-down) 或自底向上(bottom-up) 或以任意組合順序來構建 GUI。自頂 向下的意思是在創建子組件之前首先創建容器組件;自底向上的意思是在創建容 器(或父)組件之前創建子組件。在後一種情況中,組件的存在並不依賴於父容 器,其父容器可以隨時改變。

通常來說,AWT GUI 都是不可訪問的。系 統並沒有為 AWT 程序員提供 API 來指定可訪問性信息。可訪問性 (accessibility)處理的是殘疾人可以怎樣使用應用程序的問題。一個應用程 序要想有很好的可訪問性,必須與運行平台一起,讓殘疾人可以通過使用適當的 輔助技術(提供其他用戶接口的工具)來使用這些應用程序。很多政府和企業都 有一些強制要求應用程序為實現可訪問性而采用的標准。

Sun 希望 Java 語言能夠成為一種 “編寫一次就可以隨處運行(write once, run everywhere,即 WORE)” 的環境。這意味著可以在一台機器上開發和測 試 Java 代碼(例如在 Windows® 上),然後不經測試就可以在另外一個 Java 主機上運行同樣的Java 代碼。對於大部分情況來說,Java 技術都可以成 功實現這種功能,但是 AWT 卻是一個弱點。由於 AWT 要依賴於主機 GUI 的對 等體(peer)控件(其中每個 AWT 組件都有一個並行的主機控件或者對等體) 來實現這個 GUI,這個 GUI 的外觀和行為(這一點更重要)在不同的主機上會 有所不同。這會導致出現 “編寫一次隨處測試(write once, test everywhere,即 WOTE)” 的情況,這樣就遠遠不能滿足我們的要求了。

AWT 提供了一個豐富的圖形環境,尤其是在 Java V1.2 及其以後版本中更是 如此。通過 Graphics2D 對象和 Java2D、Java3D 服務,我們可以創建很多功能 強大的圖形應用程序,例如畫圖和制表包;結合使用 JavaSound,我們還可以創 建非常有競爭力的交互式游戲。

Swing 概述

Java Swing 是 Java Foundation Classes(JFC)的一部分,它是試圖解決 AWT 缺點的一個嘗試。在 Swing 中,Sun 開發了一個經過仔細設計的、靈活而 強大的GUI 工具包。不幸的是,這意味著我們又要花一些時間來學習 Swing 了 ,對於常見的情況來說,Swing 有些太復雜了。

Swing 是在 AWT 組件基礎上構建的。所有 Swing 組件實際上也是 AWT 的一 部分。Swing 使用了 AWT 的事件模型和支持類,例如 Colors、Images 和 Graphics。Swing 組件、布局管理器以及事件總結如下(參見 清單 4、清單 5 和 清單 6)。正如您可以看到的一樣,這些組件集比 AWT 提供的組件集更為廣 泛,與 SWT 組件集相比也毫不遜色。

清單 4. 基本的Swing Class 樹(全部在 javax.swing 包或其子包中,“* ” 表示抽象類)

Object *Component Container *JComponent *AbstractButton JButton JMenuItem JCheckBonMenuItem JMenu JRadioButonMenuItem *JToggleButton JCheckBox JRadioButton Box Filler JColorChooser JComboBox JDesktopIcon JFileChooser JInternalFrame JLabel JLayeredPane JDesktopPane JList JMenuBar JOptionPane JPanel JPopupMenu JProgressBar JRootPane JScrollBar JScrollPane JSeparator JSlider JSplitPane JTabbedPane JTable JTableHeader *JTextComponent JEditorPane FrameEditorPane JTextPane JTextArea JtextField JPasswordField JToolBar JToolTip JTree JViewport ScrollableTabViewport Panel Applet JApplet Window Dialog JDialog Frame JFrame JWindow

注意:在另外幾個包中還有其他一些 Swing 組件,但是這是基本的組件集。

清單 5. Swing 提供了以下 LayoutManagers(全部在 javax.swing 包或其 子包中,“*” 表示接口)

*LayoutManager CenterLayout *LayoutManager2 BoxLayout OverlayLayout SpringLayout

注意:在另外幾個包中還有其他一些 Swing 布局管理器,很多都是為它們所 布局的容器而專門定制的,但是這是基本的布局管理器集。

清單 6. Swing 提供了以下事件(大部分在 javax.swing.events 包及其子 包中)

Object EventObject AWTEvent AncestorEvent ComponentEvent InputEvent KeyEvent MenuKeyEvent MouseEvent MenuDragMouseEvent InternalFrameEvent

注意:在另外幾個包中還有其他一些 AWT 事件,但是這是基本的事件集。這 些是從更通用的事件生成的“高級” 事件。

為了克服在不同主機上行為也會不同的缺點,Swing 將對主機控件的依賴性 降至了最低。實際上,Swing 只為諸如窗口和框架之類的頂層 組件使用對等體 。大部分組件(JComponent 及其子類)都是使用純 Java 代碼來模擬的。這意 味著 Swing 天生就可以在所有主機之間很好地進行移植。因此,Swing 通常看 起來並不像是本地程序。實際上,它有很多外觀,有些模擬(盡管通常並不精確 )不同主機的外觀,有些則提供了獨特的外觀。

Swing 對基於對等體的組件使用的術語是重量級(heavyweight),對於模擬 的組件使用的術語是輕量級(lightweight)。實際上,Swing 可以支持在一個 GUI 中混合使用重量級組件和輕量級組件,例如在一個 JContainer 中混合使用 AWT 和 Swing 控件,但是如果組件產生了重疊,就必須注意繪制這些控件的順 序。

Swing 無法充分利用硬件 GUI 加速器和專用主機 GUI 操作的優點。結果是 Swing 應用程序可能比本地 GUI 的程序運行速度都慢。Sun 花費了大量的精力 來改進最近版本的Swing (Java V1.4 和 1.5)的性能,這種缺點正在變得日益 微弱。由於 Swing 的設計更加健壯,因此其代碼基礎也更堅實。這意味著它可 以在一台健壯的機器上比 AWT 和 SWT 上運行得更好。

除了具有更多的組件、布局管理器和事件之外,Swing 還有很多特性使得自 己比 AWT 的功能更加強大。下面是更為重要的幾個特性:

模型與視圖和控件分離

對於這個模型中的所有組件(例如按鈕、列表、表、樹、富文本)來說,模 型都是與組件分離的。這樣可以根據應用程序的需求來采用模型,並在多個視圖 之間進行共享。為了方便起見,每個組件類型都提供有默認的模型。

可編程外觀

每個組件的外觀(外表以及如何處理輸入事件)都是由一個單獨的、可動態 替換的實現來進行控制的。這樣我們就可以改變基於 Swing 的GUI 的部分或全 部外觀。

呈現器和編輯器

大部分顯示模型內容的組件,例如列表、表和樹,都可以處理幾乎所有類型 的模型元素。這可以通過為每種組件類型和模型類型映射一個渲染器或編輯器來 實現。例如,一個具有包含 java.util.Date 值的列的表可以有一些專用的代碼 來呈現數據值和編輯數據值。每一列都可以有不同的類型。

可訪問性

創建一個殘疾人可以訪問的GUI 是非常重要的。Swing 為實現具有可訪問性 的GUI 提供了豐富的基礎設施和 API。這種支持是單獨的,但是如果主機上具有 可訪問性支持,那麼它們應該集成在一起。

與 AWT 一樣,Swing 可以支持 GUI 組件的自動銷毀。Swing 還可以支持 AWT 的自底向上和自頂向下的構建方法。

與 AWT 不同,Swing 組件不是線程安全的,這意味著您需要關心在應用程序 中是哪個線程在更新 GUI。如果在使用線程時出現了錯誤,就可能會出現不可預 測的行為,包括用戶界面故障。有一些工具可以幫助管理線程的問題。

與 AWT 類似,Swing 的一個優點是,它也是 Java 技術的一種標准配置。這 意味著您不需要自己來安裝它了。不幸的是,Swing 已經有了很大的變化,因此 它很容易變得依賴於最新版本的Java 語言所提供的特性,這可能會強制用戶更 新自己的Java 運行時環境。

SWT 概述

與 AWT 的概念相比,SWT 是一個低級的GUI 工具包。JFace 是一組用來簡化 使用 SWT 構建 GUI 的增強組件和工具服務。SWT 的構建者從 AWT 和 Swing 實 現中學習了很多經驗,他們試圖構建一個集二者優點於一體而沒有二者的缺點的 系統。從很多方面來說,他們已經成功了。

SWT 也是基於一個對等體實現的,在這一點上它與 AWT 非常類似。它克服了 AWT 所面臨的LCD 的問題,方法如下:定義了一組控件,它們可以用來構建大部 分辦公應用程序或開發者工具,然後可以按照逐個主機的原則,為特定主機所沒 有提供的控件創建模擬控件(這與 Swing 類似)。對於大部分現代主機來說, 幾乎所有的控件都是基於本地對等體的。這意味著基於 SWT 的GUI 既具有主機 外觀,又具有主機的性能。這樣就避免了使用 AWT 和 Swing 而引起的大部分問 題。特定的主機具有一些低級功能控件,因此 SWT 提供了擴充(通常是模擬的 )版本(通常使用 “C” 作為名字中的第一個字母),從而可以產生更一致的 行為。

在對等體工作方式上,SWT 與 AWT 不同。在 SWT 中,對等體只是主機控件 上的一些封裝程序而已。在 AWT 中,對等體可以提供服務來最小化主機之間的 差異(就是在這裡,AWT 碰到了很多行為不一致的問題)。這意味著 SWT 應用 程序實際上就是一個主機應用程序,它必然會全部繼承主機的優點和缺點。這還 意味著 SWT 不能完全實現 WORE 的目標;它更像是一種 WOTE 解決方案。這就 是說,SWT 盡管不如 Swing 那麼優秀,但是它在創建可移植解決方案方面是很 傑出的。

SWT 部件、布局和事件總結如下(參見 清單 7、清單 8 和 清單 9)。正如 您可以看到的一樣,這些組件集比 AWT 提供的組件集更為廣泛,與 Swing 組件 集相比也毫不遜色。

清單 7. 基本的SWT Class 樹(大部分在 org.ecipse.swt.widgets 或 org.eclipse.swt.custom 包或子包中,“*” 表示抽象類,“!” 表示在 custom 包中,“~” 表示在其他包中)

Object *Dialog ColorDialog DirectoryDialog FileDialog FontDialog MessageDialog PrintDialog *Widget Menu *Item CoolItem !CTabItem MenuItem TabItem TableColumn TableItem TableTreeItem ToolItem TrayItem TreeColumn TreeItem *Control Button Label ProgressBar Sash Scale Scrollable Composite ~Browser Canvas *~AbstractHyperlink ~Hyperlink ~ImageHyperlink *~ToggleHyperline ~TreeNode ~Twistie AnimatedProgress !CLabel Decorations Shell FormText StyledText TableCursor !CBanner ! CCombo Combo CoolBar !CTabFolder ~ExpandableComposite ~Section ~FilteredList ~FilteredTree ~Form Group ~PageBook ProgressIndicator ! SashForm !ScrolledComposite TabFolder Table TableTree ToolBar Tray Tree ViewForm List Text Slider

注意:在另外幾個包中還有其他一些 SWT 部件,但是這是基本的部件集。

與 AWT 和 Swing 布局管理器類似,SWT 也提供了非常豐富的布局部件集。 布局系統與嵌套容器一起使用,可以生成所需要的任何布局算法。所有這 3 個 GUI 庫也可以支持對部件的定位實現絕對控制。SWT 沒有等效的BorderLayout 部件,這一點非常令人失望。FormLayout 對於創建表單基本輸入來說非常好用 。我認為 SWT 的布局機制比 AWT/Swing 布局部件集的使用更難學習。

清單 8. SWT 提供了以下布局管理器(大部分在 org.eclipse.swt.layout 和 org.eclipse.swt.custom 包或子包中,“*” 表示接口,“!” 表示在 custom 包中)

*Layout FillLayout FormLayout GridLayout RowLayout !StackLayout

注意:在另外幾個包中還有其他一些 SWT 布局管理器,很多都是為它們所布 局的容器而專門定制的,但是這是基本的布局管理器集。

與 AWT 和 Swing 事件系統一樣,SWT 提供了非常豐富的事件集。盡管這些 事件並不能與 AWT/Swing 的事件一一對應(例如 AWT 和 Swing 的按鈕都會產 生 ActionEvent 事件,而 SWT 的按鈕產生的則是 SelectionEvent 事件),但 是它們通常都是等價的。

清單 9. SWT 提供了以下事件(大部分在 org.eclipse.swt.events 包或 org.eclipse.swt.custom 包或其子包中,“*” 表示抽象,“!” 表示在 custom 包中)

Object EventObject SWTEventObject TypedEvent AimEvent ! BidiSegmentEvent ControlEvent !CTabFlolderEvent DisposeEvent DragSourceEvent DragTargetEvent !ExtendedModifyEvent focusEvent HelpEvent KeyEvent TraverseEvent VerifyEvent !LineBackgroundEvent ! LineStyleEvent MenuEvent ModifyEvent MouseEvent PaintEvent SelectionEvent TreeEvent ShellEvent !TextChangedEvent ! TextChangingEvent

注意:在另外幾個包中還有其他一些 SWT 事件,但是這是基本的事件集。這 些是從更通用的事件生成的具體事件。

很多 Swing 組件,例如 JTable,都有自己的模型。對應的SWT 控件(例如 Table)則沒有;不過它們有自己的條目。條目通常用來限制顯示文本或通常很 小的圖像(例如圖標)。為了提供一種類 Swing 的模型接口,SWT 使用了 JFace ContentProviders。這些組件可以在應用程序提供的模型(例如 List 或 Table 使用的java.util.Array )和用作視圖的控件之間充當一個橋梁。為了將 任意模型對象格式化成條目,SWT 使用了 JFace LabelProviders,它們可以為 任何模型對象生成一個文本或圖標格式。這可以對復雜模型對象的混合顯示進行 限制。其他類似組件,例如 ColorProviders 和 LabelDecorators,可以增強對 這些條目的顯示。對於 Tables 的特例來說,SWT 提供了 CellEditor,它可以 臨時將任意 SWT 控件鏈接到一個 Table 單元格上,從而當作這個單元格的編輯 器使用。

SWT 不支持 GUI 控件的自動銷毀。這意味著我們必須顯式地銷毀所創建的任 何控件和資源,例如顏色和字體,而不能利用 API 調用來實現這種功能。這種 工作從某種程度上來說得到了簡化,因為容器控制了其子控件的自動銷毀功能。

使用 SWT 只能自頂向下地構建 GUI。因此,如果沒有父容器,子控件也 就不存在了;通常父容器都不能在以後任意改變。這種方法不如 AWT/Swing 靈 活。控件是在創建時被添加到父容器中的,在銷毀時被從父容器中刪除的。而且 SWT 對於 style 位的使用只會在構建時進行,這限制了有些 GUI 控件的靈活性 。有些風格只是一些提示性的,它們在所有平台上的行為可能並不完全相同。

與 Swing 類似,SWT 組件也不是線程安全的,這意味著您必須要關心在 應用程序中是哪個線程對 GUI 進行了更新。如果在使用線程時發生了錯誤,就 會拋出異常。我認為這比不確定的Swing 方法要好。有一些工具可以幫助管理線 程的問題。

如果所支持的操作系統提供了可訪問性服務,那麼 SWT GUI 通常也就具有很好的可訪問性。當默認信息不夠時,SWT 為程序員提供了一個基 本的API 來指定可訪問性信息。

SWT 提供了一個有限的圖形環境。到目 前為止,它對於 Java2D 和 Java3D 的支持還不怎麼好。Eclipse 使用一個名為 Draw2D 的組件提供了另外一種單獨的圖形編輯框架(Graphical Editing Framework,GEF),它可以用來創建一些繪圖應用程序,例如 UML 建模工具。 不幸的是,GEF 難以單獨(即在整個 Eclipse 環境之外)使用。

與 AWT 和 Swing 不同,SWT 和 JFace 並不是 Java 技術的標准配置。它們必須單獨進 行安裝,這可以當作是 Eclipse 安裝的一部分,也可以當作是單獨的庫進行安 裝。Eclipse 小組已經使它的安裝變得非常簡單,並且 SWT 可以與 Eclipse 分 開單獨運行。所需要的Java 檔案文件(JAR)和動態鏈接庫(DLL)以及 UNIX® 和 Macintosh 上使用的類似庫可以從 Eclipse Web 站點上單獨下載 。JFace 庫需要您下載所有的Eclipse 文件,並拷貝所需要的JAR 文件。在下載 所需要的文件之後,我們還需要將這些 JAR 文件放到 Java CLASSPATH 中,並 將 DLL 文件放到系統 PATH 中。

特性的比較

下表對 AWT、SWT 和 Swing 庫的很多特性進行了比較,這種比較並沒有按照 任何特定順序來進行。盡管沒有完全列出所有特性,但是列出了很多最重要的特 性。

功能/角色/外表 AWT Swing SWT(風格)

顯示靜態文本 Label JLabel Label, CLabel

顯示多行靜態文本 Multiple Labels 具有 HTML 內容的Multiple JLabels 或 JLabel 具有新行的Multiple Labels 或 Label

顯示多行格式化靜態文本 具有不同字體的Multiple Labels 具有 HTML 內容 的JLabel 具有不同字體的Multiple Labels

單行文本輸入 TextField JTextField Text(SWT.SINGLE)

多行文本輸入 TextArea JTextArea Text(SWT.MULTI)

顯示圖像 N/A JLabel Label

顯示文本和圖像 N/A JLabel CLabel

提示彈出幫助 N/A 組件的setToolTip,JToolTip 子類 控件的 setToolTip

風格化的文本輸入 N/A JEditorPane StyledText

從條目列表中進行選擇 List JList List

簡單按下具有文本的按鈕 Button JButton Button(SWT.PUSH)

簡單按下具有文本或圖像的按鈕 N/A JButton Button(SWT.PUSH)

繪圖區域;可能用於定制控件 Canvas JPanel Canvas

選中/取消復選框 CheckBox JCheckBox Button(SWT.CHECK)

單選按鈕選擇 CheckBoxGroup ButtonGroup 和 Menu Group 和 Menu

從一個下拉列表中選擇 Choice JComboBox Combo、CCombo

輸入文本或從下拉列表中選擇 N/A JComboBox Combo、CCombo

可滾動區域 ScrollPane JScrollPane 創建 Scrollable 子類

頂層窗口 Dialog、Frame、Window JDialog、JFrame、JWindow 具有不同風 格的Shell

通用窗口 Window JWindow Shell

框架窗口 Frame JFrame Shell(SWT.SHELL_TRIM)

對話框窗口 Dialog JDialog Shell(SWT.DIALOG_TRIM)

菜單 Menu JMenu Menu

MenuItem MenuItem JMenuItem MenuItem

菜單快捷鍵 通用擊鍵 與 AWT 相同 依賴於主機的快捷鍵

彈出菜單 PopupMenu JPopupMenu Menu(SWT.POPUP)

菜單條 MenuBar JMenuBar Menu(SWT.BAR)

顯示插入符號 N/A Caret Caret

Web 浏覽器 N/A JTextPane(HTML 3.2) Browser(通過嵌入式浏覽器)

Web 頁面中的嵌入式控件 Applet JApplet 主機控件(例如 OLE)

其他控件的通用容器 Panel JPanel Composite

其他控件的有邊界通用容器 Panel(如果是手工畫的) 具有 Border 的 JPanel Composite(SWT.BORDER)

其他控件的有邊界和標題的通用容器 N/A 具有 TitledBorder 的JPanel Group

單選按鈕(一個被選中) Checkbox JRadioButton Button(SWT.RADIO)

單選按鈕的控件擴充 CheckboxGroup RadioButtonGroup Group

箭頭按鈕 N/A 具有圖像的JButton Button(SWT.ARROW)

支持文本顯示方向 通過 ComponentOrientation 與 AWT 相同 很多組件都可 以支持這種風格

焦點切換 Policy 和 Manager 對象 與 AWT 相同 下一個控件

定制對話框 Dialog 子類 JDialog 子類 Dialog 子類

訪問系統事件 EventQueue 服務 與 AWT 相同 Display 服務(不如 AWT 健 壯)

系統訪問對話框 FileDialog JColorChooser、JFileChooser ColorDialog、 DirectoryDialog、FileDialog、FontDialog、PrintDialog

顯示簡單消息對話框 N/A(必須是 Dialog 子類) JOptionPane 靜態方法 具有很多風格的MessageBox

顯示簡單提示對話框 N/A(必須是 Dialog 子類) JOptionPane 靜態方法 N/A(JFace 中用來實現這種功能的子類)

布局管理器 BorderLayout、CardLayout、FlowLayout、GridLayout、 GridBagLayout AWT 加上 BoxLayout、CenterLayout、SpringLayout FillLayout、FormLayout、GridLayout、RowLayout、StackLayout

基本的繪圖控件 Canvas JPanel Canvas

基本繪圖 Graphics 和 Graphics2D 對象 —— 基本形狀和文本,任意 Shapes 和 Strokes、Bezier 以及文件 與 AWT 相同 GC 對象 —— 基本形狀和 文本

繪圖轉換 Affine,合成 與 AWT 相同 N/A

離屏繪圖(Off screen drawing) BufferedImage、drawImage 與 AWT 相同 Image、drawImage

雙緩沖區 手工 自動或手工 除非由主機控件提供,否則就是手工

打印 PrintJob 和 PrintGraphics 與 AWT 相同 向 Printer 設備繪圖

定制顏色 Color 與 AWT 相同 Color

定制字體 Font、FontMetrics 與 AWT 相同 Font

光標選擇 Cursor 與 AWT 相同 Cursor

圖像特性 從文件中加載,動態創建,可擴充地編輯 與 AWT 相同 從文件中 加載,動態創建,基本編輯

輸入自動化 Robot 與 AWT 相同 N/A

顯示工具條 N/A JToolBar ToolBar、CoolBar

顯示進度條 N/A JProgressBar ProgressBar

將空間劃分成區域 N/A JSplitPane Sash 或 SashForm

顯示一個分標簽頁的區域 N/A JTabbedPane TabFolder、CTabFolder

顯示制表信息 N/A JTable Table

格式化表的列 N/A TableColumn TableColumn

顯示層次化信息 N/A JTree Tree

從一定范圍的值中進行選擇 N/A JSlider Slider

從一組離散范圍的值中進行選擇 N/A JSpinner Scale

對於基本顯示的訪問 Toolkit、GraphicsConfiguration、GraphicsDevice 與 AWT 相同 Display

將條目添加到系統托盤(system tray)中 N/A N/A Tray

關鍵:N/A —— 不適用。在很多情況中,這種特性都可以通過創建定制控件 或控件容器或利用其他定制編程來實現,不過實現的難度會有所不同。

結束語

本文對 Eclipse 的Standard Windows Toolkit with JFace、Java 的Swing 和 Abstract Windows Toolkit GUI 工具包進行了比較。通過此處提供的比較, 您可以確定在自己的新應用程序中應該使用哪個 GUI 工具包。

在大部分情況中,決定都是在 Swing 與結合了 JFace 的SWT 之間進行的。通常來說,每個工具包都非常完整且功能強大,足以構建功能完善的GUI,但是 Swing 通常要比單獨使用 SWT(不使用 JFace 時)更好。Swing 具有內嵌於 Java 技術的優點,是完全可移植的,無可爭議地是一種更好的架構。Swing 也 具有高級圖形應用程序所需要的優點。SWT 具有可以作為本地應用程序實現的優 點,這可以提高性能,並利用基於 SWT 的GUI 來實現本地兼容性。

如果您只為一種平台來開發系統,那麼 SWT 就具有主機兼容性方面的優點, 包括與主機特性的集成,例如在 Windows 上對 ActiveX 控件的使用。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved