av手机免费在线观看,国产女人在线视频,国产xxxx免费,捆绑调教一二三区,97影院最新理论片,色之久久综合,国产精品日韩欧美一区二区三区

java語(yǔ)言

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

時(shí)間:2025-05-10 22:00:11 java語(yǔ)言 我要投稿
  • 相關(guān)推薦

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

  Java GUI:SWT/Swing/AWT的介紹及比較由百分網(wǎng)小編收集整理,通過(guò)本文了解對(duì)每個(gè)工具包的基本特性的介紹,以及使用每個(gè)工具包的優(yōu)缺點(diǎn)。歡迎閱讀!更多內(nèi)容請(qǐng)關(guān)注應(yīng)屆畢業(yè)生考試網(wǎng)!

  簡(jiǎn)介

  developerWorks 上另外一些作者已經(jīng)展示了如何在 Swing 和 SWT 之間很好地進(jìn)行遷移(參見(jiàn) 參考資料)。本文的目標(biāo)是幫助您在開(kāi)始開(kāi)發(fā)項(xiàng)目之前確定選擇使用哪個(gè) GUI 工具包。

  但是首先我們要弄清一個(gè)問(wèn)題:為什么會(huì)有多個(gè) Java? GUI 工具包呢?最好的答案是,一個(gè)工具包并不能滿足所有的要求,最近也不會(huì)開(kāi)發(fā)一個(gè)可以滿足所有要求的 GUI 工具包。每個(gè)工具包都有各自的優(yōu)缺點(diǎn),這樣就可以根據(jù)自己的需求和目標(biāo)用戶來(lái)選擇適當(dāng)?shù)墓ぞ甙?/span>

  下面就讓我們來(lái)學(xué)習(xí)有關(guān)這些工具包的知識(shí)。

  AWT 概述

  Abstract Windows Toolkit(AWT)是最原始的 Java GUI 工具包。AWT 的主要優(yōu)點(diǎn)是,它在 Java 技術(shù)的每個(gè)版本上都成為了一種標(biāo)準(zhǔn)配置,包括早期的 Web 瀏覽器中的 Java 實(shí)現(xiàn);另外它也非常穩(wěn)定。這意味著我們不需要單獨(dú)安裝這個(gè)工具包,在任何一個(gè) Java 運(yùn)行環(huán)境中都可以使用它,這一點(diǎn)正是我們所希望的特性。

  AWT 是一個(gè)非常簡(jiǎn)單的具有有限 GUI 組件、布局管理器和事件的工具包(參見(jiàn) 清單 1、清單 2 和 清單 3)。這是因?yàn)?Sun 公司決定為 AWT 使用一種最小公分母(LCD)的方法。因此它只會(huì)使用為所有 Java 主機(jī)環(huán)境定義的 GUI 組件。最終的結(jié)果非常不幸,有些經(jīng)常使用的組件,例如表、樹(shù)、進(jìn)度條等,都不支持。對(duì)于需要更多組件類(lèi)型的應(yīng)用程序來(lái)說(shuō),我們需要從頭開(kāi)始創(chuàng)建這些組件。這是一個(gè)很大的負(fù)擔(dān)。

  清單 1. 基本的 AWT Class 樹(shù)(全部在 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

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

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

  *LayoutManager FlowLayout GridLayout *LayoutManager2 BorderLayout CardLayout GridBagLayout

  注意:另外幾個(gè)包中還有一些 AWT 布局管理器,很多都是為它們進(jìn)行布局的容器專(zhuān)門(mén)定制的,但是這是基本的布局管理器集。

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

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

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

  通常對(duì)于 AWT 來(lái)說(shuō)(也適用于 Swing 和 SWT),每個(gè)事件類(lèi)型都有一個(gè)相關(guān)的 XxxListener 接口(XxxAdapter 的實(shí)現(xiàn)可能為空),其中 Xxx 是去掉 Event 后綴的事件名(例如,KeyEvent 事件的接口是 KeyListener),用來(lái)把事件傳遞給處理程序。應(yīng)用程序會(huì)為自己感興趣處理的事件的事件源(GUI 組件或部件)進(jìn)行注冊(cè)。有時(shí)監(jiān)聽(tīng)接口要處理多個(gè)事件。

  AWT 的一個(gè)很好的特性是它通?梢詫(duì) GUI 組件自動(dòng)進(jìn)行銷(xiāo)毀。這意味著您幾乎不需要對(duì)組件進(jìn)行銷(xiāo)毀。一個(gè)例外是高級(jí)組件,例如對(duì)話框和框架。如果您創(chuàng)建了耗費(fèi)大量主機(jī)資源的資源,就需要手動(dòng)對(duì)其進(jìn)行銷(xiāo)毀。

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

  AWT 讓我們可以以自頂向下(top-down) 或自底向上(bottom-up) 或以任意組合順序來(lái)構(gòu)建 GUI。自頂向下的意思是在創(chuàng)建子組件之前首先創(chuàng)建容器組件;自底向上的意思是在創(chuàng)建容器(或父)組件之前創(chuàng)建子組件。在后一種情況中,組件的存在并不依賴于父容器,其父容器可以隨時(shí)改變。

  通常來(lái)說(shuō),AWT GUI 都是不可訪問(wèn)的。系統(tǒng)并沒(méi)有為 AWT 程序員提供 API 來(lái)指定可訪問(wèn)性信息?稍L問(wèn)性(accessibility)處理的是殘疾人可以怎樣使用應(yīng)用程序的問(wèn)題。一個(gè)應(yīng)用程序要想有很好的可訪問(wèn)性,必須與運(yùn)行平臺(tái)一起,讓殘疾人可以通過(guò)使用適當(dāng)?shù)妮o助技術(shù)(提供其他用戶接口的工具)來(lái)使用這些應(yīng)用程序。很多政府和企業(yè)都有一些強(qiáng)制要求應(yīng)用程序?yàn)閷?shí)現(xiàn)可訪問(wèn)性而采用的標(biāo)準(zhǔn)。

  Sun 希望 Java 語(yǔ)言能夠成為一種 “編寫(xiě)一次就可以隨處運(yùn)行(write once, run everywhere,即 WORE)” 的環(huán)境。這意味著可以在一臺(tái)機(jī)器上開(kāi)發(fā)和測(cè)試 Java 代碼(例如在 Windows? 上),然后不經(jīng)測(cè)試就可以在另外一個(gè) Java 主機(jī)上運(yùn)行同樣的 Java 代碼。對(duì)于大部分情況來(lái)說(shuō),Java 技術(shù)都可以成功實(shí)現(xiàn)這種功能,但是 AWT 卻是一個(gè)弱點(diǎn)。由于 AWT 要依賴于主機(jī) GUI 的對(duì)等體(peer)控件(其中每個(gè) AWT 組件都有一個(gè)并行的主機(jī)控件或者對(duì)等體)來(lái)實(shí)現(xiàn)這個(gè) GUI,這個(gè) GUI 的外觀和行為(這一點(diǎn)更重要)在不同的主機(jī)上會(huì)有所不同。這會(huì)導(dǎo)致出現(xiàn) “編寫(xiě)一次隨處測(cè)試(write once, test everywhere,即 WOTE)” 的情況,這樣就遠(yuǎn)遠(yuǎn)不能滿足我們的要求了。

  AWT 提供了一個(gè)豐富的圖形環(huán)境,尤其是在 Java V1.2 及其以后版本中更是如此。通過(guò) Graphics2D 對(duì)象和 Java2D、Java3D 服務(wù),我們可以創(chuàng)建很多功能強(qiáng)大的圖形應(yīng)用程序,例如畫(huà)圖和制表包;結(jié)合使用 JavaSound,我們還可以創(chuàng)建非常有競(jìng)爭(zhēng)力的交互式游戲。

  Swing 概述

  Java Swing 是 Java Foundation Classes(JFC)的一部分,它是試圖解決 AWT 缺點(diǎn)的一個(gè)嘗試。在 Swing 中,Sun 開(kāi)發(fā)了一個(gè)經(jīng)過(guò)仔細(xì)設(shè)計(jì)的、靈活而強(qiáng)大的 GUI 工具包。不幸的是,這意味著我們又要花一些時(shí)間來(lái)學(xué)習(xí) Swing 了,對(duì)于常見(jiàn)的情況來(lái)說(shuō),Swing 有些太復(fù)雜了。

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

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

  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

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

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

  *LayoutManager CenterLayout *LayoutManager2 BoxLayout OverlayLayout SpringLayout

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

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

  Object EventObject AWTEvent AncestorEvent ComponentEvent InputEvent KeyEvent MenuKeyEvent MouseEvent MenuDragMouseEvent InternalFrameEvent

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

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

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

  Swing 無(wú)法充分利用硬件 GUI 加速器和專(zhuān)用主機(jī) GUI 操作的優(yōu)點(diǎn)。結(jié)果是 Swing 應(yīng)用程序可能比本地 GUI 的程序運(yùn)行速度都慢。Sun 花費(fèi)了大量的精力來(lái)改進(jìn)最近版本的 Swing (Java V1.4 和 1.5)的性能,這種缺點(diǎn)正在變得日益微弱。由于 Swing 的設(shè)計(jì)更加健壯,因此其代碼基礎(chǔ)也更堅(jiān)實(shí)。這意味著它可以在一臺(tái)健壯的機(jī)器上比 AWT 和 SWT 上運(yùn)行得更好。

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

  模型與視圖和控件分離

  對(duì)于這個(gè)模型中的所有組件(例如按鈕、列表、表、樹(shù)、富文本)來(lái)說(shuō),模型都是與組件分離的。這樣可以根據(jù)應(yīng)用程序的需求來(lái)采用模型,并在多個(gè)視圖之間進(jìn)行共享。為了方便起見(jiàn),每個(gè)組件類(lèi)型都提供有默認(rèn)的模型。

  可編程外觀

  每個(gè)組件的外觀(外表以及如何處理輸入事件)都是由一個(gè)單獨(dú)的、可動(dòng)態(tài)替換的實(shí)現(xiàn)來(lái)進(jìn)行控制的。這樣我們就可以改變基于 Swing 的 GUI 的部分或全部外觀。

  呈現(xiàn)器和編輯器

  大部分顯示模型內(nèi)容的組件,例如列表、表和樹(shù),都可以處理幾乎所有類(lèi)型的模型元素。這可以通過(guò)為每種組件類(lèi)型和模型類(lèi)型映射一個(gè)渲染器或編輯器來(lái)實(shí)現(xiàn)。例如,一個(gè)具有包含 java.util.Date 值的列的表可以有一些專(zhuān)用的代碼來(lái)呈現(xiàn)數(shù)據(jù)值和編輯數(shù)據(jù)值。每一列都可以有不同的類(lèi)型。

  可訪問(wèn)性

  創(chuàng)建一個(gè)殘疾人可以訪問(wèn)的 GUI 是非常重要的。Swing 為實(shí)現(xiàn)具有可訪問(wèn)性的 GUI 提供了豐富的基礎(chǔ)設(shè)施和 API。這種支持是單獨(dú)的,但是如果主機(jī)上具有可訪問(wèn)性支持,那么它們應(yīng)該集成在一起。

  與 AWT 一樣,Swing 可以支持 GUI 組件的自動(dòng)銷(xiāo)毀。Swing 還可以支持 AWT 的自底向上和自頂向下的構(gòu)建方法。

  與 AWT 不同,Swing 組件不是線程安全的,這意味著您需要關(guān)心在應(yīng)用程序中是哪個(gè)線程在更新 GUI。如果在使用線程時(shí)出現(xiàn)了錯(cuò)誤,就可能會(huì)出現(xiàn)不可預(yù)測(cè)的行為,包括用戶界面故障。有一些工具可以幫助管理線程的問(wèn)題。

  與 AWT 類(lèi)似,Swing 的一個(gè)優(yōu)點(diǎn)是,它也是 Java 技術(shù)的一種標(biāo)準(zhǔn)配置。這意味著您不需要自己來(lái)安裝它了。不幸的是,Swing 已經(jīng)有了很大的變化,因此它很容易變得依賴于最新版本的 Java 語(yǔ)言所提供的特性,這可能會(huì)強(qiáng)制用戶更新自己的 Java 運(yùn)行時(shí)環(huán)境。

【Java GUI:SWT/Swing/AWT的介紹及比較】相關(guān)文章:

java的swing單選框用法示例05-14

使用Java編寫(xiě)GUI對(duì)話框教程講解04-30

如何用Java創(chuàng)建一個(gè)簡(jiǎn)單的Swing應(yīng)用程序05-22

JAVA語(yǔ)言和PHP語(yǔ)言的比較05-09

Java抽象類(lèi)和接口的比較08-01

php和java比較優(yōu)勢(shì)在哪04-20

談Java語(yǔ)言與Java技術(shù)的介紹02-19

Java接口介紹05-08

嵌入式Linux系統(tǒng)中的GUI系統(tǒng)的研究與移植介紹05-30