圖形用戶界面程序設計_第1頁
圖形用戶界面程序設計_第2頁
圖形用戶界面程序設計_第3頁
圖形用戶界面程序設計_第4頁
圖形用戶界面程序設計_第5頁
已閱讀5頁,還剩10頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、圖形用戶界面程序設計9.1 進入 Java GUI 編程世界為了使讀者對Java GUI程序設計有一個比較全面的了解,本節先簡要介紹一下 Java GUI程序設計的發展歷程及 Java GUI 程序設計中的幾個基本概念。9.1.1 AWT 與 Swing 介紹1. AWT在Java語言出現以前,各種操作系統平臺如Windows、Linux、Solaris等有其專有的圖形用戶界面。 Java 語言為了達到獨立于平臺的目的, 最初設計了一種名叫 AWT 的 GUI 程序 開發類庫, AWT (Abstract Window Toolkit) 是指抽象窗口工具包, 在 AWT 中提供了建立 GUI

2、程序的工具集,它主要包括基本的 GUI 程序組件,如按鈕、標簽、菜單、顏色、字體類、 布局管理器等,另外還提供了事件處理機制及圖像操作等功能。AWT 可用于 Java 的 Applet 程序和 Application 程序中。 AWT 提供的組件都在位于 java.awt 包中。AWT 只是一組通用的無關于特定平臺類。在具體某一平臺上使用AWT 組件時 (如Button,即按鈕),由運行時系統調用本地代碼(native code)來實現該組件。例如,如果在Windows 平臺中運行的一個 Java GUI 程序中使用了一個按鈕組件,則運行時系統會調用 Windows 中實現按鈕的代碼顯示一個

3、Windows 風格的按鈕,而同樣的代碼在 Solaris 平臺中 運行時,系統會調用 Solaris 中實現按鈕的代碼顯示一個 Motif(Solaris 中窗口風格的名稱 )風 格的按鈕。這就會出現在 Java 中相同名稱的組件,由于不同平臺上本地實現的不同,而產 生不同的外觀效果。因此, AWT 組件要在不同的平臺上給用戶提供一個一致的外觀效果就 遇到了困難。也正是因為 AWT 所提供的窗口組件,并非由 AWT 完全真實的實現了這些組 件工具,因此才將 AWT稱為抽象的(abstract)窗口工具。AWT的設計思想可以使 Java語言系統的設計人員很快實現在不同平臺下的GUI組件,但缺點

4、隨操作系統平臺的不同會顯示出不同的樣子。另外,AWT 中的組件比較呆板,如按鈕 Button ,只能是一個方框中顯示按鈕的名稱這種樣子, 而無法改變。 為此, 在 Java 2以后, SUN 公司開發出了一種功能更為強大的名叫 Swing 組件。2. SwingSwing 組件與 AWT 組件相比有如下特點:Swing 組件完全用 Java 語言編寫。Swing 組件的實現沒有使用本地代碼。Swing 組件的外觀靈活多樣, 如按鈕可以顯示圖形, 形狀除了矩形外還可以是圓形 或其他形狀的按鈕。Swing 提供的組件比 AWT 更豐富,如 Swing 提供 AWT 中所沒有導航、打印等功 能。但是

5、讀者要注意,Swing并不是為了完全替代 AWT,而是對AWT的擴展,因為Swing 中的組件繼承自AWT ,Swing中的版面布局管理和事件處理使用的還是AWT中定義的內容。一般將 AWT 組件稱為重量級組件, 而將 Swing 中不依賴于本地 GUI 資源的組件稱為輕量級 組件。Swing 組件位于 javax.swing 包中,該包中定義 250多個類,其中的組件類近 50 個(以 J開頭)°javax表示java extension是縮寫,因此對Java的所有擴展功能都放在 javax中,Swing 就是其中之一。3. 組成GUI程序的組件簡介在Java GUI程序設計中,一

6、個程序通常由以下4個基本部分組成:(1)基本組件基本組件是構成 GUI程序的按鈕(Button)、標簽(Label)、文本框(TextField)、選擇框(Choice) 等。基本組件都是抽象類Component的子類,而 Component類又繼承 Object類,如圖9-1所示。I TextAreajava.apple包TextComponent 一ButtonTextFieldAppletcontext重量級組件CanvasAppletStubObjectEventobjectFontFontMetricsColorGraphicsCheckBoxChoiceLabelListScrol

7、lbarjavax.swing 包AudioClipPanelAppletWindowFrameJAppletJWindowJFrameRootPaneContainerDialogJDialogGraphics 2DFileDialogComponent 1ContainerScrollpane:Menucomponent 廠MenuBart JComponent F T !MenuMenuItemCheckboxMenuItemLayoutManager2LayoutManagerGridLayout輕量級組件FlowLayout:表示類CardLayout:表示抽象類BorderLayo

8、utGridBaglayout:表示接口圖9-1 AWT類層次結構圖(2) 容器類組件一個GUI程序中的基本組件,通常要放在一個容納這些基本組件的容器中,所以把在 AWT中專門容納其他組件的一些特定組件叫容器(Co ntai ner),容器的基類是 Con tai ner類,Con tai ner類是Compo nent的子類。如圖 9-1所示。(3) 布局管理類一個容器中的組件,按照什么樣的方式排列(即容器中的組件如何擺放),由AWT中的布局管理類組件負責。布局管理類組件也叫布局管理器。布局管理器類在圖 9-1的左下方, 布局管理器類實現了LayoutManager接口或LayoutMana

9、ger2接口。(4)事件處理類當用戶按下 GUI程序中的一個按鈕時,程序中就要對該“事件”進行處理,如按下一 個“保存”按鈕時,要進行文件的存盤操作。 AWT中定義的事件類 AWTEvent是EventObject 類的子類,而EventObject類繼承了 Object類。圖9-2是Swing中主要類的層次結構圖。由于Swing中的JApplet、JWindow、JFrame和JDialog等類直接繼承了 AWT中的相關類,所以 Swing中的這幾個類在圖 9-1中。從圖 9-2中可以看出 AWT中的基本組件,在 Swing中用相應的組件來代替,如AWT的Button組件,在Swing中相應

10、的組件為 JButton。Swing組件類的名稱前都加了“ J”這個字母,以 示與AWT組件的區別。JLayeredPane :I_ JPopupMenuJMenuBarJloolBarJLabelRootPane Container'JComponentJInternalFrameJToolTip JMenultemAbstractButtonJButton,_ JloggleButton LJJCheckBoxMenultemJMenuJRadioButtonMenultemJCheckBoxJRadioButton:java.swing.text.j'JTextCompo

11、nenfJEditorpane L,_JlextFieldJTextPaneJPasswordFieldJTextAreaJSeparator- |JPopupmenu.SeperatorJProgressBar |JSliderJPanel | JTabbedPaneJSplitPan可 | JDeskTopPanp | JOptionPaneJScrollBarJScrollPaneJViewPortJFileChooserj JTree | | JColorChooser| -JComboBoxJTableJList圖9-2 Swing類層次結構圖在這里給出 AWT和Swing組件層次結

12、構圖的主要目的是讓讀者對組件(components)、容器(containers)、布局管理器(LayoutManager)之間的關系、以及 AWT組件與Swing組 件之間的關系有一個初步了解,因為學習GUI程序設計理解類之間的繼承關系非常重要。AWT及Swing就好像一大片樹林,其中有各種資源,而其間又有許多是互動的關系。 我們需要了解這片樹林到底有哪些可用資源,這些資源放在哪里,它們之間的關系是怎么樣的,這樣才不會見樹不見林,得心應手的設計Java GUI程序。下面介紹一個簡單 Java GUI程序,通過該程序使讀者先對Swing程序有一個直觀的印象。9.1.2【案例9-1】文本轉換器程

13、序1. 案例描述設計一個GUI程序,在一個文本框中輸入一行英文,單擊轉換按鈕后可以將文本框中輸入的內容轉換為大寫字母后顯示出來。2. 案例效果圖9-3(a)所示的窗口是案例程序在執行后的效果,圖9-3(b)所示的窗口是輸入文本內容后轉換的結果。(a)(b)圖9-3案例9-1的顯示效果3. 技術分析該GUI程序也由前面介紹有4個部分組成:基本組件:組成該 GUI程序的基本組件有:一個按鈕(JButton)、兩個標簽(JLabel)和一個文本框(JTextField)。一個標簽用于顯示提示信息,另一個標簽用于顯示轉換 后的結果,文本框用于輸入要轉換的文本內容,按鈕用于發出轉換命令。容器:上述基本組

14、件可以放在一個名叫JFrame的容器中,該窗口一般作為應用程序的框架窗口。布局管理:放置基本組件的容器可以使用一個名叫GridLayout布局管理類管理。事件處理:該程序中要完成將輸入的文本內容輪換為大寫后顯示的功能,因此事件處理程序中首先要取得在文本框中輸入的內容,這可以使用文本框(JTextField)定義的getText方法。對取得的字符串可以使用String類定義的toUpperCase方法轉換為大寫,然后使用標簽類(JLabel)定義的setText方法,將轉換后的內容設置為標簽要 顯示的內容。4. 程序解析下面是該案例的程序代碼:03040506070809101112131415

15、16171819202122232425262728293031323334353637383940414243444502 /案例 :9.1/ 程序名: toUpperCase.java/功能 :轉換器程序,將句子中小寫字母轉換為大寫字母 /*import java.awt.*;import javax.swing.*;import java.awt.event.*;public class toUpperCase public static void main(String args) /創建一個框架作為頂層容器JFrame frm = new JFrame(" 文本轉換器程序

16、");/ 取得 frm 中放置內容的面板Container contentPane = frm.getContentPane();/ 設置 frm 的布局管理 contentPane.setLayout(new GridLayout(4,1);/創建基本組件final JLabel label1 = new JLabel(" 請在下面的文本框中輸入要轉換的內容: "); final JLabel label2 = new JLabel("");JButton button = new JButton(" 顯示轉換后的文本內容 &quo

17、t;);final JTextField textField = new JTextField(40);/將基本組件添加到內容面板contentPane.add(label1); contentPane.add(textField);contentPane.add(label2);contentPane.add(button);/ 設置 frm 的大小 frm.setSize(300,200);/ 設置 frm 的可見性frm.setVisible(true);/ 設置 frm 的關閉功能 frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/

18、給按鈕添加事件處理功能button.addActionListener(new ActionListener()public void actionPerformed(ActionEvent enent) /獲取輸入的文本內容 String inf = textField.getText(); /設置標簽顯示的文本內容46label2.setText(”您輸入的文本轉換成大寫后是:"+inf.toUpperCase();47 48 );49 50 盡管該程序中有比較詳細的注釋,但讀者在閱讀這些代碼時可能還是不太理解,本案例的主要目的是讓讀者對 Java GUI程序的基本架構有一個初步

19、的了解,至于程序中所涉及到 的基本組件、容器、布局管理和事件處理等知識在以后的內容中要進行詳細的分析。通過該程序,我們可以大致到 GUI程序的組成總結如下:引入相關的包:案例 9-1中的07、08和09行引入的3個包在一般的Swing程序設 計中都要引入。設置頂層容器:頂層容器常用JFrame。創建基本組件:如按鈕和標簽等。將基本組件添加到容器中:一般使用容器類定義的add方法完成添加。如案例9-1中的27到30行。給組件添加事件處理功能:如案例9-1中的40行。編寫事件處理程序:如案例9-1中的41到48行。9.1.3【相關知識】組件類的層次結構與Swing程序結構簡介使用Swing進行GU

20、I程序設計時,一般可按照如下的流程進行:1. 組件類的層次結構與分類大多數Swing組件的繼承層次結構如下:java.la ng.ObjectL java.awt.Comp onentL java.awt.C ontainerL javax.swi ng.JComp onentCompo nent類是所的組件的頂層類,Con tai ner類是AWT中容器類的頂層類 (該類下一節介紹),其子類JComponent是Swing組件的頂層類。在這些頂層類中定義了大多數組件 可以使用常用操作。如在Component類中定義了在第 8章Applet程序中所使用過的paint等方法;如在 Con tai

21、 ner類中定義了本章案例 9-1中所用的給容器添加組件的add和設置容器布局管理的setLayout等方法。Swing組件從功能上分可分為:頂層容器、中間層容器和基本組件。2. Comp onent 類Java圖形用戶界面的最基本組成部分是組件(Component),組件是一個可以以圖形化的方式顯示在屏幕上并能與用戶進行交互的對象,例如一個按鈕,一個標簽等。Java語言中的GUI組件不能獨立地顯示出來,必須將組件放在一個容器中才可以顯示出來。java.awt.Component類是所有AWT組件的頂層抽象類,其他組件類(包括Swing組件,容器也算是一種組件)都直接或間接的繼承了該類。在這個

22、類中定義了許多組件共用的屬性 及大量的方法(如設置或獲取圖形組件對象的大小、顯示位置、前景色和背景色、邊界、可 見性等),因此許多組件類也就繼承了Component類的成員方法和成員變量。Component類里面所定義的東西太多,我們無法在此一一列舉,讀者在使用過程應該經常查看JDK幫助文件。表9-1列舉了一些最常用到的屬性及方法。表9-1 Component類的常用屬性與方法屬性設置/取得的方法說明位置void setLocation(Point) void setLocation(int, int) Point getLocation() Point getLocationOnScreen

23、()Point是java.awt中定義的點類。getLocation()方法獲得組件的位置,該位置是相對于父 級組件坐標空間左上角的一個點。getLocationOnScreen()方法獲得組件的位置,形式是一 個指定屏幕坐標空間中組件左上角的一個點。邊界void setBounds(Rectangle) void setBounds(int,int,int,int) Rectangle getBounds()Rectangle是java.awt中定義的矩形類。背景顏色void setBackground(Color)Color getBackground()Color是java.awt中定義

24、的顏色類,見第 8章介紹。前景顏色void setForeground(Color)Color getForeground()字體void setFont(Font)Font getFont()Font是java.awt中定義的字體類,見第 8章介紹。名稱void setName(String name)StringgetName(Stringname)設置于獲取組件的名稱。3. JComp onent 類JComponent是一個抽象類,用于定義Swing中一些基本子類組件可用的方法。但并不是所有的 Swing 組件都繼承于 JComponent 類(如 JFrame、JApplet、JDi

25、alog 和 JWindow 類 就不是該類的子類,見圖 9-1),JComp on e nt類繼承于Con tai ner類,所以凡是此類的組件都 可作為容器使用,這也是 Swing組件對AWT組件的一個最重要的改進。JComponent類的增加的功能主要有:邊框設置:使用 setBorder()方法可以設置組件外圍的邊框,使用一個EmptyBorder對象能在組件周圍留出空白。提示信息:使用setTooltipText()方法,為組件設置對用戶有幫助的提示信息。設置應用程序的外觀風格(Look and Feel):用UlManager.setLookAndFeel()方法可以設置用戶所喜歡

26、的外觀風格(有metal、wi ndows、motif、mac這幾種)。設置組件布局:通過設置組件最大、最小、推薦尺寸的方法能指定布局管理器的約 束條件,為布局提供支持。支持組件的打印功能。JComponent類為Swing組件增加了很多實用的功能,讀者可以查看JDK幫助。4. 頂層容器頂層容器有JFrame、JApplet、JDialog和JWindow共4個,這4個頂層容器都是屬于重 量級組件(Swing中只有這4個是屬重量級組件),程序運行時要使用當地的GUI資源(見圖9-1右邊部分)。要設計一個 GUI應用程序,該程序中一般至少要包含一個頂層容器,因為每一個GUI組件(如JButton

27、等)都需放入一個頂層容器中。5. 中間層容器雖然說每一個 Swing組件都是一種容器,但其樣式與所能承裝的內容卻有所分別。有 些Swing組件是被設計專門來盛裝別的組件用的,作為一種容器,好讓被承裝的組件能合 適地、有組織地被顯示出來。這些只作為容納別的組件的容器,是介于頂層容器與一般 Swing組件之間的,所以叫中間層容器。中間層容器有JMenuBar 、 JOptionPane、 JRootPane、JLayeredPane、 JPanel、JInternalFrame 、 JScrollPane、 JSplitPane、 JTabbedPane、 JToolBar 、 JDeskTopP

28、ane、 JViewPort 、 JEditorPane、 JTextPane。6. 基本組件基本組件是在 GUI 窗口中用來實現與用戶交互的組件,如 Jbutton、JComboBox 、JList 、JMenu、 JSlider 、 JtextField 等。9.2 創建應用程序窗口 應用程序窗口一般是一個容器類對象,容器是一種特殊的 GUI 組件,用來容納、組織 其他組件。本節介紹 Swing 中創建應用程序窗口和對話框的方法。9.2.1 創建應用程序窗口的方法1. 創建應用程序窗口( JFrame)在 Java GUI 應用程序設計, 要以一個頂層容器作為程序的窗口來容納其他的 GUI

29、 組件。 在容器類中, JFrame 類就是專門用作應用程序窗口的一個類,因此它也被稱作程序應用框 架窗口。設計一個 GUI 程序,先要在程序中創建一個 JFrame 對象,以該對象作為程序的框 架窗口,然后在框架窗口中放入其他組件。JFrame窗口有標題欄,通過鼠標可以自由拖動并放置,在JFrame窗口的右上角有最小化、最大化和關閉按鈕。(1) JFrame 類的層次結構JFrame容器類的繼承層次結構如下:java.lang.ObjectL java.awt.Comp onentL java.awt.C ontainerL javax.awt.WindowL javax.awt.Frame

30、L javax.swing.JFrame頂層容器類 JFrame 間接的繼承了 Container 類, Container 類是所有容器類的父類,該 類中定義了容器所要用到的屬性及方法,其中最常用的三個方法是:add(Component omp) :將一個組件添加到一個容器中。 setLayout(LayoutManager mgr) :設置容器的布局管理器。remove(Component omp) :從此容器中移去指定組件。從以上方法可以看出, 任何容器中都可以添加組件, 也可以設置一個容器的布局管理器, 或從一個容器中將一個組件移動。 由于 JFrame 間接的繼承了 Containe

31、r 類,因此它也可以使 用 Container 類定義的方法。(2) 創建一個框架窗口創建 JFrame 時,常用的構造方法是 :JFrame():新建一個框架窗口,在默認狀態下,創建后的框架窗口是不可見的(即 在創建一個框架窗口后,并不會立即將其顯示在屏幕上) 。JFrame(String title) :創建一個新的、初始不可見的、具有指定標題的框架窗口。( 3)框架窗口可以進行的操作JFrame除了可以使用表 9-1所示的方法外,其他常用的操作方法有:setVisible(boolean b):由于默認情況下新建的JFrame窗口是不可見的,因此要使用 setVisible(true)

32、方法將窗口設置為可見狀態,可以顯示在屏幕上。setTitle(String title) :設置框架窗口的標題。setSize(int width, int height) :設置框架窗口的大小。 setIconImage(Image image) :設置框架窗口要顯示在最小化圖標中的圖像。pack():調整此窗口的大小,以適合其子組件的顯示。 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) :在默認狀態時,框架窗口右 上角的關閉按鈕是不能正常關閉窗口的, 使用該方法后, 單擊關閉按鈕時, 應用程 序正常退出。注意:JFrame提供了大量的方法,在

33、使用過程可以查看Java API文檔。( 4)給框架窗口添加組件 在創建好一個框架窗口后,如何向框架窗口中添加組件呢?Swing 組件不能直接添加到一個框架窗口中, 而要添加到一個包含在框架窗口內的內容 面板(content pane)中。內容面板是框架窗口這種頂層容器包含的一個普通容器,當我們 要給框架窗口添加組件時,只能添加到內容面板,具體操作過程是:用getContentPane()方法獲得JFrame的內容面板。如案例 9-1的第16行。用add()方法將組件添加到內容面板。如案例9-1的第27行到30行。向JFrame容器中添加組件的另一種方法是, 先建立一個JPanel之類面板(即

34、中間容器), 再將創建好的其他組件添加到 JPanel面板中,然后用 setContentPane()方法將JPanel面板設 置為JFrame的內容面板。具體操作過程如下:JFrame frame = new JFrame();Jpanel contentPane = new Jpanel( );contentPane.add(new JButton("退出"); frame.setContentPane(contentPane);注意 :一個組件只能在某一個容器中放置一次。 如果一個組件已經在一個容器, 而要將 其放置在其他容器中時,這個組件就會從一個容器中被清除。2.

35、 創建對話框( JDialog )可以用 JDialog 來創建一個對話框。對話框分為模式對話框和非模式對話框。模式對話 框只能在結束對話框的操作后回到原來的窗口, 而非模式對話框可以在對話框與其所屬的窗 口之間互相切換。另外,一個對話框必須以另一個對話框或框架窗口(JFrame)作為其擁有者,即一個對話框要依附于另一個對話框或框架窗口。這是與JFrame較不同的,JFrame可獨立地存在。創建 JDialog 對話框常用的構造方法是 :JDialog() :新建一個無標題的非模式對話框。JDialog(Dialog owner, boolean modal) :新建一個無標題的、由 moda

36、l 指定的其模式 對話框, modal 為 true 時為模式對話框。JDialog(Frame owner. String title, boolean modal):新建一個標題為 title、由 modal 指定的其模式對話框。以上構造方法由 owner 指出其擁有者。3. 創建簡單的對話框對話框是應用程序最常用的組件,使用 JDialog 創建一個對話框的過程比較繁瑣,如需 要向對話框中添加各種組件才能成為一個可用的對話框。對于一些常用的比較簡單的對話 框,可以使用 javax.swing 包中 JOptionPane 類提供的靜態方法將對話框直接顯示出來, 以簡 化程序的設計。JOp

37、tionPane類提供的對話框有三種基本格式:輸出信息對話框、輸入信息對話框和確 認對話框。這些對話框的顯示由形如show xxx Dialog的靜態方法完成。下面舉例說明其用法:(1)顯示一個輸出信息對話框顯示一個輸出信息對話框要使用JOptionPane類的showMessageDialog方法,該方法般要指定一個顯示該對話框的父窗口。例如有下面的程序段:JFrame f = new JFrame();JOptio nPa ne.showMessageDialog(f, "Hello,Java!");JOptio nPan e.showMessageDialog(f,"Hello,Java!","這是一個有標題的輸出信息窗 口 !" ,JOptionPaneNFORMATION_MESSAGE);該程序段執行的結果如圖9-4所示:(T) HelloJaua!確定(a)(b)圖9-4案例9-1的顯示效果以上兩個方法在父窗口f中顯示一個輸出信息對話框,對話框的內容為"Hello,Java!",前面的一個對話框默認的標題"信息”,如圖9-4(a)所示,后一個對話框指定了一個標題“這是一個有標

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論