Java 2 圖形設計卷Ⅱ- SWING》第1章 簡介

      網友投稿 759 2025-04-04

      第1章 簡 介

      Java的基礎類(JFC)是開發圖形用戶界面的API集。Java的基礎類包括以下API:

      ·抽象窗口工具包(版本1.1及以后的版本)。

      ·2D API。

      ·Swing組件。

      ·可訪問性API。

      抽象窗口工具包(Abstract Window Toolkit,AWT)是Java開發用戶界面最初的工具包。AWT是建立JFC的主要基礎,《Java 2圖形設計,卷Ⅰ:AWT》對AWT有詳細的介紹。

      2D API提供了AWT所缺乏的附加圖形功能。例如,AWT對圖形操作只提供了一種規格的筆——即一個像素大小的正方形。而2D API除提供了不同大小的筆外,還提供了豐富的二維著色能力。《Graphic Java2,Volume IV:2D API》一書中對2D API有詳細的介紹。

      Swing是建立在AWT之上的(參見1.2節“輕量組件與重量組件的比較”中對輕量組件與重量組件比較的討論)、包括大多數輕量組件的組件集。除提供了AWT所缺少的、大量的附加組件外,Swing還提供了替代AWT重量組件的輕量組件。Swing還包括了一個使人印象深刻的、用于實現包含插入式界面樣式等特性的圖形用戶界面的下層構件。因此,在不同的平臺上,Swing組件都能保持組件的界面樣式特性,如雙緩沖、調試圖形和文本編輯包等。

      可訪問性(Accessibility)API是一個類集,其中的類使Swing組件能夠與用于殘疾用戶的援助技術交互。JFC還包括許多可訪問性工具,這些工具與可訪問性API聯合使用。

      1.1 Swing的歷史

      要了解Swing,首先必須了解AWT,AWT是Swing的基礎。

      Java的發展速度超出了人們的想象,Java API中最可視的部分——API突然成為了人們關注的焦點。遺憾的是,原來的AWT不能滿足發展的需要。

      原來的AWT不是為許多開發人員使用的、功能強大的用戶界面(UI)工具包而設計的,其設計目的是支持開發小應用程序中的簡單用戶界面。例如,原來的AWT缺少許多面向對象UI工具包中所能見到的特性,例如,剪貼板、打印支持和鍵盤導航等特性在AWT中都不存在。原來的AWT甚至不包括彈出式菜單或滾動窗格等基本特性,而彈出式菜單和滾動窗格是開發現代用戶界面的兩個基本元素。

      此外,AWT的下層構件還有嚴重的缺陷。人們使AWT適應基于繼承的、具有很大伸縮性的事件模型。甚至更糟,基于對等組件(peer)的體系結構也被用于AWT,該體系結構注定要成為AWT的致命弱點。

      為了盡快推向市場和保持本地的界面樣式,于是產生了基于對等組件的體系結構,而該體系結構注定是要失敗的。對等組件是完成薄弱的AWT對象所委托任務的本地用戶界面組件。對等組件負責完成所有的具體工作,包括繪制自己、對事件做出反應等,這使得AWT組件除了在適當的時間與其對等組件交互外無事可做。由于AWT類中是較復雜的本地對等組件的外殼,所以,AWT的早期開發人員能在最快的時間(原來的AWT是在不足六個星期的時間內開發出來的。)內創建組件。例如,java.awt.Panel類只包含十二行代碼。

      另外,對等組件的設計也有嚴重的缺點。首先,在大多數平臺上,對等組件都是在本地窗口中繪制的。每個組件一個本地窗口實在不能得到高性能,為此,含有大量AWT組件的小應用程序付出了很高的性能代價。

      把不同平臺上的本地對等組件硬塞進Java框架中也是一個問題,使這些AWT組件跨平臺的表現一致是完全不可能的。結果,不但沒有實現急需的新組件,而且開發時間都浪費在修補對等組件的錯誤上和不兼容問題上了。

      更糟的是,AWT有很高的錯誤發生率。于是,第三方開始提供他們自己的工具包,這些工具包提供了更可靠的下層構件并提供了比AWT更多的功能。這些工具包之一是Netscape的Interner基礎類(IFC),IFC是一組建立在NEXTSTEP中的用戶界面工具包概念基礎上的一組輕量類。IFC組件不是對等的,在許多方面勝過了AWT組件。IFC還吸引了更多的開發人員加盟。

      由于認識到Java領域很可能在標準用戶界面工具包問題上出現分裂局面,Javasoft和Netscape達成了一個交易,共同實現Java基礎類(Apple公司和IBM公司也參加了JFC的開發)。Netscape開發人員與Swing工程師一起合作,以便把大部分的IFC的功能嵌入到Swing組件中。

      起初打算讓Swing類似于Netscape的IFC。然而,隨著時間的推移。在增加了插入式界面樣式等特性并修改了設計之后,Swing大大地偏離了它原來的目標。隨著Swing1.1版本的推出,雖然大量的IFC技術仍然嵌在Swing中,但是,Swing與IFC相似的部分已大部分消失了。今天,在一個功能全面的用戶界面工具包中,Swing提供了AWT和IFC中最優秀的成份。

      1.2 輕量組件與重量組件的比較

      輕量組件首次出現在AWT1.1版本中。AWT最初只包括與本地對等組件相關聯的重量組件,這些組件在它們自己的本地不透明窗口中繪制。

      相反,輕量組件沒有本地對等組件,而且在它們的重量容器的窗口中繪制。

      由于輕量組件不在本地不透明的窗口中繪制,因此,它們可以有透明的背景。透明的背景使顯示的輕量組件可以是非矩形的,雖然所有組件(重量的或輕量的)都有一個矩形的邊框。

      Swing組件幾乎都是輕量組件,那些頂層容器:窗體,小應用程序、窗口和對話框除外。因為輕量組件是在其容器的窗口中繪制的,而不是在自己的窗口中繪制的,所以輕量組件最終必須包含在一個重量容器中。因此,Swing的窗體、小應用程序、窗口和對話框都必須是重量組件,以便提供一個可以在其繪制Swing輕量組件的窗口。

      1.3 Swing組件

      Swing包含250多個類,是組件和支持類的集合。Swing提供了40多個組件,是AWT組件的四倍。除提供替代AWT重量組件的輕量組件外,Swing還提供了大量有助于開發圖形用戶界面的附加組件。

      1.3.1 AWT的替代組件

      圖1-1展示了用于替代AWT重量組件的Swing輕量組件。其中許多組件與它們所替代的AWT組件幾乎是源代碼兼容的。這使得替換AWT組件的工作相當簡單。

      除模仿AWT組件所提供的功能外,幾乎所有的Swing替代組件都有其他一些特性。例如,Swing按鈕和標簽可顯示圖標和文本,而AWT按鈕和標簽只能顯示文本。

      圖1-1中所示的所有組件均使用Windows的界面樣式(圖略)。

      1.3.2 Swing增加的組件

      除提供AWT重量組件的替代組件外,Swing還提供了許多其他組件,如表格、樹、定制對話框等。圖1-2示出了一些新的Swing組件(圖略)。

      1.4 J組件

      如前所述,Swing包括250多個類,其中有些是UI組件,有些是支持類。為了把UI組件和支持類區分開,Swing組件的名字以J開頭。表1-1列出了Swing提供的J組件。用斜體字表示的組件是AWT組件的替代組件。

      表1-1 Swing UI組件

      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

      組件類         描述

      ─────────────────────────────────

      JApplet Java.applet.Applet類的擴展,它含有JRootPane的一個實例

      JButton 能顯示文本和圖形的按鈕,它是AWT按鈕組件的替代組件

      JCheckBox 能顯示文本和圖形的復選框,它是AWT選擇組件的替代組件

      JCheckBoxMenuItem 一個復選框菜單項,它是AWT的復選框菜單項組件的替代組件

      JComboBox 帶下拉列表的文本框,它是AWT選擇組件的替代組件

      JComponent 所有輕量J組件的基類

      JDesktopPane 內部窗體的容器

      JDialog Swing對話框的基類,它擴展了AWT Dialot類

      JEditorPane 用于編輯文本的文本窗格

      JFrame 擴展java.awt.Frame的外部窗體

      JInternalFrame 在JDesktopPane中出現的內部窗體

      JLabel 可顯示文本和圖標的標簽,它是AWT標簽組件的替代組件

      JLayeredPane 能夠在不同層上顯示組件的容器

      JList 顯示選項列表的組件,它是AWT列表組件的替代組件

      JMenu 菜單條中顯示的一個菜單,它是AWT菜單組件的替代組件

      JMenuBar 用于顯示菜單的菜單條,它是AWT菜單條組件的替代組件

      JMenuItem 菜單項,它是AWT菜單項組件的替代組件

      JOptionPane 顯示標準的對話框,如:消息和問題對話框

      JPanel 通用容器,它是AWT面板和畫布組件的替代組件

      JPasswordfield JTextField的擴展,使輸入的字符不可見

      JPopupMenu 彈出式菜單,它是AWT彈出式菜單組件的替代組件

      JProgressBar 進度指示器

      JRadioButton 單選按鈕,它是AWT復選框組件的替代組件

      JRootPane 頂層容器,它包含一個玻璃窗格,一個層窗格,一個內容窗格和一個可選的菜單條

      JScrollBar 滾動條,它是AWT滾動條組件的替代組件

      JScrollPane 滾動窗格,它是AWT滾動窗格組件的替代組件

      JSeparator 水平或垂直分隔條

      JSlider 滑桿

      JSplitPane 有兩個分隔區的容器,這兩個分隔區可以水平排列或者垂直排列且分隔區的大小能自動調整

      JTabbedPane 帶選項卡的窗格

      JTable 表格

      JTableHeader 表格頭

      JTextArea 用于輸入多行文本的文本域,它是AWT文本域組件的替代組件

      JTestComponent 文本組件的基類,它替代AWT的TextComponent類

      JTextField 單行文本域,它替代AWT的單行文本域組件

      JTextPane 簡單的文本編輯器

      JToggleButton 兩種狀態的按鈕,它是JCheckBox和JRadioButton組件的基類

      JToolBar 工具條

      JToolTip 當光標停留在一個組件上時,該組件上顯示的一行文字

      JTree 用于按鈕層次組織數據的結構控件

      JViesport 用于瀏覽可滾動組件的視口

      JWindow 外部窗口,它是java.awt.Window的擴展

      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

      注:斜體字表示的是AWT的替代組件

      插入式界面模式

      Swing支持插入式界面樣式,界面模式的基礎是“模型-視圖-控制器”體系結構的變體。圖1-3圖解說明了在不同的界面樣式下運行的小應用程序。

      修改小應用程序或應用程序的界面樣式不需要修改程序代碼,通過把$ JDK_HOME/lib目錄下的swing.properties文件中的swing.defaultlaf屬性設置為所需要的界面樣式類型,就可以在運行時刻設置缺省的界面樣式。下面是swing.properties文件的一個例子,它通過指定defaultlaf屬性來設置缺省的界面樣式:

      # swing.properties example file. Lines that begin with '#' are

      # comments.

      # The Mac look and feel is specifed as the default look and

      《Java 2 圖形設計卷Ⅱ- SWING》第1章 簡介

      # feel below. If no look and feel is specifed.then the default

      # look and feel (metal) is used.

      # the next line specifies which look and feels are installed.

      swing.installedlafts=metal,motif,windows,mac

      # default set to Mac look and feel

      swing.defaultlaf=javax.swing.plaf.mac.MacLookAndFeel

      # swing.defaultlaf=javax.swing.plaf.windows.WindowsLookAndFeel

      # swing.defaultlaf=javax.swing.plaf.motif.MotifLookAndFeel

      在第7章“插入式界面樣式”中介紹了插入式界面樣式的Swing實現。

      1.5 Swing包概覽

      Swing由許多包組成,表1-2中列出了這些包

      表1-2 Swing包

      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

      包              描述

      ─────────────────────────────────

      com.sun.java.swing.plaf.motif 用戶界面代表類,它們實現Motif界面樣式

      com.sun.java.swing.plaf.windows 用戶界面代表類,它們實現Windows界面樣式

      javax.swing Swing組件和實用工具

      javax.swing.border Swing輕量組件的邊框

      javax.swing.colorchooser JColorChooser的支持類/接口

      javax.swing.event 事件和偵聽器類

      javax.swing.filechooser JFileChooser的支持類/接口

      javax.swing.pending 未完全實現的Swing組件

      javax.swing.plaf 抽象類,它定義UI代表的行為

      javax.swing.plaf.basic 實現所有標準界面樣式公共功能的基類

      javax.swing.plaf.metal 用戶界面代表類,它們實現Metal界面樣式

      javax.swing.table JTable組件的支持類

      javax.swing.text 支持文檔的顯示和編輯

      javax.swing.text.html 支持顯示和編輯HTML文件

      javax.swing.text.html.parser html文件的分析器類

      javax.swing.text.rtf 支持顯示和編輯RTF文件

      javax.swing.tree JTree組件的支持類

      javax.swing.undo 支持取消操作

      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

      swing包是Swing提供的最大包,它包含將近100個類和25個接口。幾乎所有的Swing組件都在swing包中,只有JTableHeader和JTextComponent是例外,它們分別在swing.table包和swing.text包中。

      swing.border包中含有數個在輕量Swing組件的邊襯中畫邊框的類。border包由一個Border接口、一個AbstractBorder類和AbstractBorder的許多具體擴展組成。

      swing.event包中定義了事件和事件-類,swing.event包與AWT的event包類似。awt.event和swing.event都包含事件類和-接口,它們分別響應由AWT組件和Swing組件激發的事件。例如,當在樹組件中需要節點擴展(或折疊)的通知時,則要實現Swing的TreeExpansionListener接口,并把一個TreeExpansionEvent實例傳送給TreeExpansionListener接口中定義的方法。TreeExpansionListener和TreeExpansionEvent都是在swing.event包中定義的。

      Swing.pending包包括仍沒有完全實現的Swing組件。在Swing1.1 FCS中,pending包包含選擇器(日期、貨幣選擇器)計算器、彈出式按鈕等等。pending包中的組件最終會放到swing包中。

      雖然Swing的表格組件(JTable)在swing包中,但它的支持類卻在swing.table包中。表格模型、單元繪制器和編輯器等都在swing.table包中。

      與JTable類一樣,Swing的樹類JTree(用于按層次組織數據的結構組件)也在swing包中,而它的支持類卻在swing.tree包中。swing.tree包提供樹模型、樹節點、樹單元編輯器和繪制器等支持類。

      Swing有四個用于顯示和編輯文檔的包:swing.text、swing.text.html、swing.text.html.parser和swing.text.rtf。swing.text包為Swing的文檔模型提供了所有必須的下層構件。包括用于文檔、元素、加字符、增亮、編輯工具包等的類和接口。swing.text.html和swing.text.rtf包是Swing最小的兩個包:它們分別提供用于實現HTML(超文本標記語言)和rtf(多文本格式)文檔編輯器的編輯器工具包。swing.text.html.parser包中含有分析html文件的支持類。

      Swing.undo包為實現取消操作提供支持。

      swing.plaf包中的類形成了Swing插入式界面樣式的UI代表部分的基礎。UI代表為它們的相關組件實現界面模式。

      swing.plaf包中的大多數類定義UI資源或擴展swing.ComponentUI類。swing.ComponentUI類定義所有UI代表的公共行為。在swing.plaf包中的UI代表類(即名字以UI結尾的類)通常為特定的組件定義附加的抽象方法。例如,swing.plaf.ButtonUI類擴展swing.ComponentUI類并添加了抽象方法getDefaultMargin(),該方法返回按鈕邊框與按鈕內容之間的間距。

      swing.plaf.basic包擴展在swing.plaf包中定義的類,并且實現所有標準Swing界面樣式共有的特性。例如:swing.plaf.basic.BasicButtonUI類提供了swing.ComponentUI類和swing.plaf.ButtonUI類定義的一些方法的缺省實現。BasicButtonUI類還為paint等方法提供了多個不同的實現(paint方法繪制按鈕的文本和圖標)。BasicButtonUI還以無操作形式實現其他與界面樣式有關的方法,如paintButtonPressed()方法。這些方法將被特定的界面樣式擴展所重載。

      metal和motif包實現相應界面樣式的UI代表類。通常,UI代表類擴展swing.plaf.basic包中的類。例如,metal.ButtonUI類重載swing.plaf.basic.ButtonUI類中的paintButtonPressed方法的無操作實現。

      Swing.plaf.multi包支持界面樣式復用。界面樣式復用允許多個UI代表與一個組件相關聯。例如。一個按鈕UI代表可能同時與一個視覺UI代表和一個音頻UI代表相關聯,這樣,當這個按鈕被激活時,不難能產生可視的反饋信息,還能播放一個聲音。UI復用的主要用途是使組件更具可訪問性。

      Swing還提供了其他兩種界面樣式實現,即mactintosh和Organic的界面樣式。

      1.6 Swing與AWT

      對Swing最普遍的錯誤概念是認為其設計目的是用來替代AWT的。事實上,Swing建立在AWT之上,如圖1-4所示。

      ┌─────────┬──────────┐

      │Swing重量組件│ Swing輕量組件│

      ┌───┼─────────┼─────────┬┤

      │AWT│窗體、窗口、對話框│         ││

      │   ├─────────┘         ││

      │   │組件、容器、圖形、顏色、字體、工具包、││

      │   │布局管理器等             ││

      │   └───────────────────┘│

      └────────────────────────┘

      Swing利用AWT的下層構件,包括圖形、顏色、字體、工具包和布局管理器;然而,Swing沒有使用AWT的組件。唯一與Swing有關的AWT組件是Frame、Window和Dialog類,它們分別被Swing的重量組件:JFrame、JWindow和JDialog所擴展。Swing使用AWT最好的部分來建立一個新的輕量組件集,并且丟棄了AWT中有問題的部分——重量組件。

      Swing是用來替代AWT的重量組件,而不是用來替代AWT本身。要了解Swing,就必須具有AWT的基本知識。

      Swing除利用圖形、字體、布局管理器等AWT功能外,所有的Swing輕量組件基本上都是從AWT的Container類繼承來的,而AWT的Container類又擴展了AWT的Component類。換句話說,Swing不僅利用了AWT提供的下層構件,而且所有的Swing組件實際上都是AWT容器。注意:AWT Container類本身是輕量的(即它沒有對等組件(注:實際上,java.awt.Container有一個什么都不做的,待替換的對等組件))且在其容器的窗口中繪制。

      對等組件與插入式界面樣式的比較

      Swing組件和AWT組件都把與顯示組件有關的許多工作和處理組件事件的工作交給其他對象來執行。對AWT組件而言,代表是一個本地對等組件,而對Swing組件而言,代表是ComponentUI類的一個擴展。雖然Swing組件和AWT組件都使用代表機制,但把工作交給其他對象處理所產生的結果在兩個工具包中有明顯的不同。

      由于AWT組件把工作交給對等組件來完成,所以它們的行動很難擴展。例如,不可能把一幅圖像添加到AWT的按鈕上,這是因為按鈕的繪制是由本地對等組件來完成的,而該對等組件可能是用C++編寫的,它的行為不能擴展。同樣,因為文本域的對等組件負責增亮文本,所以,文本域增亮文本的方式也不能修改。要點是,任何由本地對等組件實現的行為是不能修改或擴展的。

      另一方面,Swing組件的代表(它的ComponentUI)是Swing工具包中的一個Java類,它以擴展以修改組件的行為。Swing的插入式界面樣式設計使用了改進的“模型-視圖-控制器”體系結構,在這個體系結構中,組件的UI代表負責顯示組件和處理輸入事件的視圖-控制器。當Swing組件配備了一個修改過的組件UI時,組件的可視外觀或事件處理都是可以修改的。

      1.7 開始學習

      Swing可與JDK1.1或1.2版一起使用。JDK1.2版包含了Swing,而1.1版本卻沒有。要在1.1版中使用Swing,必須從JFC web站點下載Swing,其地址是:http://java.sun.com/products/jfc/index.hmtl 。

      在Internet瀏覽器中使用Swing

      在Netscape Navigator和Internet Explorer中都能用Swing小應用程序,但是,必須使用合適的瀏覽器版本,并確保包含了對JDK 1.1的支持。

      1.Netscape Navigator

      必須有Netscape Navigator 4.04或更新的版本,并且已安裝了JDK1.1的補丁程序,要下載Netscape Navigator和JDK 1.1補丁程序請訪問地址:http://developer.netscape.com/software/jdk/download.html

      圖1-5示出了一個在Netscape Navigator中運行的Swing小應用程序。

      在下載了一個合適的Netscape Navigator版本和JDK1.1補丁程序之后,還必須確保Netscape可找到Swing的jar文件。使Netscape能找到Swing有兩種方法:第一種方法是把Swing的jar文件拷貝到一個確定的Netscape目錄中;第二種方法是修改系統的CLASSPATH變量。本節介紹第一種方法,由于 第二種方法對Internet Explorer和Netscape Navigator是相同的,所以我們將在“Internet Explorer”一節中介紹第二種方法。

      可把Swing的jar文件拷貝到Netscape的java\Classes目錄中。例如,如果氫Netscape安裝在C盤中,Swing安裝在c:\swing目錄下,則就把所有的Swing jar文件從c:\swing拷貝到c:\program files\Netscape\Communicator\Program\Java\Class下。只要有Netscape Navigator的最新版本,安裝了JDK 1.1補丁程序,并且Netscape可找到Swing的jar文件,就具備了在Netscape Navigator中運行Swing小應用程序的條件。

      2、Internet Explorer

      Internet Explorer的4.0版或得高版本支持JDK1.1。只要有合適的Internet Explorer版本并設置了系統的CLASSPATH變量,以便Internet Explorer能找到Swing的jar文件,就能在Internet Explorer中運行Swing小應用程序。下面介紹如何設置系統的CLASSPAHT變量。

      對Windows NT系統,進入Windows的“控制面板”,雙擊“系統”圖標,在“系統屬性”窗口中單“Environment(環境)”選項卡,把CLASSPATH變量添加到“User Variables for Administrator”列表框中,如圖1-6所示。

      CLASSPATH變量應該包括JDK的class.zip文件和swingall.jar文件。例如,圖1-6顯示了JDK和Swing均安裝在D:\下時設置CLASSPATH變量的情況。添加(或修改)完CLASSPATH變量后,單擊OK按鈕關閉“System Properties”窗口,此時,需要重新啟動系統,重啟后,就可以在Internet Explorer中運行Swing小應用程序了。

      對Windows 95系統,必須手工編輯c:\下的autoexec.bat文件,只需在autoexec.bat文件中添加一項,如下所示:

      SET CLASSPATH=C:\jdk\lib\classes.zip;c:\swing\swingall.jar

      同樣,在autoexec.bat文件中添加(或修改)了CLASSPATH變量后,必須重新啟動系統。

      圖1-7示出了在Internet Explorer中運行的Swing小應用程序。

      3、Java插件

      當在Netscape Navigator或Internet Explorer中運行Swing小應用程序時,毫無疑問地還會發現許多錯誤。這些問題可能與Swing本身無關,可能是開發Internet上使用的Java小應用程序的主要缺點。

      小應用程序開發人員面臨的最困難的任務之一是使小應用程序在不同的瀏覽器中的表現是一致的。此外,由于歷史的原因,瀏覽器制造商已減慢了更新瀏覽器(與最新版本JDK同步的)的速度。幸運的是,針對這個Sun公司已推出了一個漂亮的解決方案,即它的Java插件(以前稱作Activator)。

      通過把一個插件插入Netscape的Netscape Navigator中或在Internet Explorer中運行一個ActiveX控件來使用Java插件。插件或ActiveX控件有效地把Sun的JDK最新版本安裝到瀏覽器中。使用Java插件保證了小應用程序在不同的瀏覽器中的一致性。

      Java插件唯一的缺點是要求對HTML文件做一些修改。當然Sun也提供了一個實用工具來進行這種修改。要更多地了解免費獲得Java插件的情況,請訪問下面的Web站點:

      http://java.sun.com/features/1998/04/plugin.html

      1.8 Swing資源

      除本書外,還能找到許多學習Swing的資源。當需要解答對本書中沒有介紹到的問題時,就需要去尋找其他資源。

      開始學習Swing的最好方法是學習Swing本身隨帶的例子代碼。這些例子提供了許多小而完善的小應用程序和應用程序,它們對Swing很多方面的特性做了練習。Swing的這些例子可在Swing主目錄的examples目錄下找到。例如,如果Swing安裝在c:\swing目錄下,則可以在c:\swing\examples目錄下找Swing的例子。

      Internet上也有許多Swing資源,其中包括郵件列表和新聞組。下面列出的新聞組是解決Swing問題的好地方:

      comp.lang.java.programmer

      comp.lang.java.gui

      此外,還有許多由件列表供喜愛Swing的初高級用戶使用,要了解郵件列表的有關信息,請訪問下面的Web站點:

      http://www.eos.dk/

      Swing Connection是由Sun維護的Swing的正式站點。可在下面的Web站點中找到:

      http://java.sun.com/products/jfc/tsc/

      1.9 本章回顧

      Java于1995年出現,并迅速發展成為程序開發人員所喜愛的語言。Java的重新定位于Internet和重命名為Java以前五年多時間里,它是以Oak語言的身份出現的(Oak是一種研究語言,Sun公司打算使它成為C++的一種更易于使用的和功能更強大的變體)。

      雖然Java語言開發許多年并且在Sun公司內部使用,但是該語言沒有用戶界面工具包。當Java的優勢開始顯現時,很明顯,它必須有用戶界面工具包并應在最短的時間內開發出來。開發用戶界面最快的方法是在本地組件(又叫做對等組件)上做大部分工作,并在本地組件的頂層放一層Java類。這樣,在六個星期不到的時間內開發小組實現了AWT。

      對等組件體系結構沒有擴展性,并導致了不同平臺上不一致的問題產生。此外,AWT沒有可靠的面向對象基礎;例如,最初的事件模型需要一個switch語句,以便根據事件類型來決定激活哪段代碼。這種switch語句是對面向對象的破壞;這種根據對象類型進行切換的swich語句應該通過多態性機制來處理(注:swigch語句有時在面向對象設計中是有效的,但AWT的事件模型不是這種情況。)

      Java開發人員、Sun公司或Sun公司的競爭者逐漸注意到原來的AWT的缺點。不久,出現了許多用來替代AWT的工具包。同時,Sun發布了AWT的1.1版,它做了許多改進,包括一個新事件模型和對輕量組件(非對等組件)的支持。然而,AWT1.1版還不夠好用。

      JavaSoft認識到Java領域在用戶界面工具包的使用上將會出現分裂,于是他們與Netscape合作開發Swing組件集。Netscape和Sun公司的工程師用了將近一年半的時間來開發Swing,Swing在AWT上進行了巨大的改進。

      雖然有些Swing組件替代了AWT的重量組件,但Swing不是AWT的替代品,而是AWT的擴展,Swing使用了大量的AWT下層構件,包括對圖形、字體和布局管理器的支持。要更深入了解Swing,就必須對AWT的下層構件有基本的了解。

      與所有其他軟件一樣,Swing還不完美。到現在為止,Swing中仍有一些程序錯誤。在某些地方還表現出了一些設計缺陷,但它是一個可靠的用戶界面工具包,比原來的AWT有了很大改進。

      Java 容器

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:對號的符號怎么做?(對號這個符號)
      下一篇:怎么把文件發給別人(電腦怎么把文件發給別人)
      相關文章
      日本中文一区二区三区亚洲| 亚洲一卡二卡三卡四卡无卡麻豆 | 亚洲一级片在线观看| 亚洲精品色播一区二区| 亚洲人成电影在线观看青青| 亚洲美女大bbbbbbbbb| 亚洲精品福利在线观看| 亚洲精品午夜久久久伊人| 日韩精品一区二区亚洲AV观看| 亚洲午夜视频在线观看| 色婷婷亚洲十月十月色天| 亚洲AV无码久久精品成人| 久久综合九九亚洲一区| 亚洲日本乱码一区二区在线二产线 | 一区二区三区亚洲视频| 国产成人精品亚洲| 妇女自拍偷自拍亚洲精品| 亚洲国产电影av在线网址| 亚洲国产中文v高清在线观看| 亚洲国产成人久久综合一区77| 亚洲片一区二区三区| 国产亚洲精品免费视频播放| 亚洲理论电影在线观看| 久久亚洲国产成人亚| 337p欧洲亚洲大胆艺术| 亚洲免费网站在线观看| 亚洲精品无码日韩国产不卡?V| 亚洲国产主播精品极品网红| 亚洲日韩国产精品第一页一区| 国产AV无码专区亚洲AV毛网站| 亚洲国产成人片在线观看无码| 亚洲视频在线播放| 亚洲国产日韩女人aaaaaa毛片在线| 亚洲日日做天天做日日谢| 亚洲另类无码专区丝袜| 亚洲国产av无码精品| 国产精一品亚洲二区在线播放| 亚洲国产精品久久66| 精品日韩99亚洲的在线发布| 亚洲熟妇无码八V在线播放| 亚洲AV无码不卡在线观看下载|