Java基礎(chǔ)第9章課件_第1頁
Java基礎(chǔ)第9章課件_第2頁
Java基礎(chǔ)第9章課件_第3頁
Java基礎(chǔ)第9章課件_第4頁
Java基礎(chǔ)第9章課件_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第九章GUIAWT事件處理機制布局管理器常用事件常用Swing組件?學(xué)習(xí)目標(biāo)掌握Swing常用組件的使用、AWT事件處理機制1了解布局管理器32熟悉常用事件的處理掌握了解熟悉9.1AWT概述9.2AWT事件處理9.3常用事件分類9.4布局管理器9.5AWT繪圖9.6Swing?點擊查看本小節(jié)知識架構(gòu)?點擊查看本小節(jié)知識架構(gòu)?點擊查看本小節(jié)知識架構(gòu)?點擊查看本小節(jié)知識架構(gòu)知識架構(gòu)9.2AWT事件處理9.2.19.2.29.2.3事件處理機制事件適配器用匿名內(nèi)部類實現(xiàn)事件處理返回目錄知識架構(gòu)9.3常用事件分類9.3.19.3.29.3.39.3.4窗體事件鼠標(biāo)事件鍵盤事件動作事件返回目錄知識架構(gòu)9.4布局管理器9.4.19.4.29.4.39.4.4FlowLayoutBorderLayoutGridLayoutGridBagLayout返回目錄9.4.59.4.6CardLayout不使用布局管理器知識架構(gòu)9.6Swing9.6.1JFrame9.6.2JDialog9.6.3中間容器9.6.4文本組件返回目錄9.6.5按鈕組件9.6.6JComboBox9.6.7菜單組件第九章GUIGUI全稱是GraphicalUserInterface,即圖形用戶界面,也就是應(yīng)用程序提供給用戶操作的圖形界面,包括窗口、菜單、按鈕、工具欄和其它各種圖形界面元素。GUI設(shè)計提供了豐富的類庫,這些類分別位于java.awt和javax.swing包中,簡稱為AWT和Swing。Swing不僅實現(xiàn)了AWT中的所有功能,而且提供了更加豐富的組件和功能,足以滿足GUI設(shè)計的一切需求。9.1AWT概述AWT是用于創(chuàng)建圖形用戶界面的一個工具包,它提供了一系列用于實現(xiàn)圖形界面的組件,如窗口、按鈕、文本框、對話框等。這些組件都位于java.awt包中。接下來,通過一張圖來描述awt包中不同類的繼承關(guān)系。Component類通常稱為組件,是除菜單外其他AWT組件的父類,它表示一個能以圖形化方式顯示出來,并可與用戶交互的對象MenuComponent是所有與菜單相關(guān)組件的父類9.1AWT概述Component類通常被稱為組件,根據(jù)Component的不同作用,可將其分為基本組件和容器類?;窘M件類是諸如按鈕、文本框之類的圖形界面元素,而容器類則是通過Component的子類Container實例化的對象。Container類表示容器,它是一種特殊的組件,可以用來容納其他組件,Container容器又可分為兩種類型,分別是Window和Panel。

9.1AWT概述Window類是不依賴其它容器而獨立存在的容器,它有兩個子類,分別是Frame類和Dialog類。Frame類用于創(chuàng)建一個具有標(biāo)題欄的框架窗口,作為程序的主界面,Dialog類用于創(chuàng)建一個對話框,實現(xiàn)與用戶的信息交互Frame示例Dialog示例Panel也是一個容器,但是它不能單獨存在,只能存在其它容器(Window或其子類)中,一個Panel對象代表了一個長方形的區(qū)域,在這個區(qū)域中可以容納其它組件。通常情況下,程序會使用Panel來實現(xiàn)一些特殊的布局。9.1AWT概述了解了AWT組件的相關(guān)類后,為了使初學(xué)者對GUI有一個更加直觀的認(rèn)識,接下來,通過一個案例來創(chuàng)建一個簡單的圖形界面,如例9-1所示。[點擊查看例9-1]9.2AWT事件處理9.2.1事件處理機制事件處理機制專門用于響應(yīng)用戶的操作,比如,想要響應(yīng)用戶的點擊鼠標(biāo)、按下鍵盤等操作,就需要使用AWT的事件處理機制事件對象(Event):封裝了GUI組件上發(fā)生的特定事件(通常就是用戶的一次操作)。事件源(組件):事件發(fā)生的場所,通常就是產(chǎn)生事件的組件監(jiān)聽器(Listener):負(fù)責(zé)監(jiān)聽事件源上發(fā)生的事件,并對各種事件做出響應(yīng)處理的對象(對象中包含事件處理器)事件處理器:監(jiān)聽器對象對接收的事件對象進(jìn)行相應(yīng)處理的方法9.2AWT事件處理9.2.1事件處理機制在程序中,如果想實現(xiàn)事件的監(jiān)聽機制,首先要定義一個類實現(xiàn)事件監(jiān)聽器的接口,例如Window類型的窗口需要實現(xiàn)WindowListener。接著通過addWindowListener()方法為事件源注冊事件監(jiān)聽器對象,當(dāng)事件源上發(fā)生事件時,便會觸發(fā)事件監(jiān)聽器對象,由事件監(jiān)聽器調(diào)用相應(yīng)的方法來處理相應(yīng)的事件。通過一個案例來實現(xiàn)關(guān)閉窗口的功能,如例9-2所示。[點擊查看例9-2]9.2AWT事件處理9.2.2事件適配器在例9-2中的MyWindowListener類實現(xiàn)WindowListener接口后,需要實現(xiàn)接口中定義的7個方法,然而在程序中需要用到的只有windowClosing()一個方法,其他六個方法都是空實現(xiàn),沒有發(fā)揮任何作用,這樣代碼的編寫明顯是一種多余但又必需的工作。JDK提供了一些適配器類,它們是監(jiān)聽器接口的默認(rèn)實現(xiàn)類,這些實現(xiàn)類中實現(xiàn)了接口的所有方法,但方法中沒有任何代碼。程序可以通過繼承適配器類來達(dá)到實現(xiàn)監(jiān)聽器接口的目的。9.2AWT事件處理9.2.2事件適配器接下來,通過繼承適配器類來實現(xiàn)同例9-2相同的功能,如例9-3所示。[點擊查看例9-3]9.2AWT事件處理9.2.3用匿名內(nèi)部類實現(xiàn)事件處理在實際開發(fā)中,為了代碼的簡潔,經(jīng)常通過匿名內(nèi)部類來創(chuàng)建事件監(jiān)聽器對象,針對所發(fā)生的事件進(jìn)行處理。接下來,通過案例來演示如何為窗口添加一個具有點擊事件的按鈕,具體代碼如例9-4所示。[點擊查看例9-4]9.3常用事件分類9.3.1窗體事件在AWT中提供了豐富的事件,大致包括窗體事件、鼠標(biāo)事件、鍵盤事件、動作事件等。WindowEvent用于表示窗體事件,在應(yīng)用程序中,當(dāng)對窗體事件進(jìn)行處理時,首先需要定義一個類實現(xiàn)WindowListener接口作為窗體監(jiān)聽器,然后通過addWindowListener()方法將窗體對象與窗體監(jiān)聽器綁定。9.3常用事件分類9.3.1窗體事件接下來,通過一個案例來實現(xiàn)對窗體事件的監(jiān)聽,如例9-5所示。[點擊查看例9-5]9.3常用事件分類9.3.2鼠標(biāo)事件MouseEvent類用于表示鼠標(biāo)事件,幾乎所有的組件都可以產(chǎn)生鼠標(biāo)事件,鼠標(biāo)事件包括鼠標(biāo)按下、鼠標(biāo)松開、鼠標(biāo)單擊等。對鼠標(biāo)事件的處理可通過實現(xiàn)MouseListener接口或者繼承適配器MouseAdapter類,然后調(diào)用addMouseListener()方法將監(jiān)聽器綁定到事件源對象。9.3常用事件分類9.3.2鼠標(biāo)事件接下來,通過一個案例來學(xué)習(xí)如何監(jiān)聽鼠標(biāo)事件,如例9-6所示。[點擊查看例9-6]9.3常用事件分類9.3.3鍵盤事件鍵盤操作也是最常用的用戶交互方式,例如鍵盤按下、釋放等,這些操作被定義為鍵盤事件。KeyEvent類表示鍵盤事件,處理KeyEvent事件的監(jiān)聽器對象需要實現(xiàn)KeyListener接口或者繼承KeyAdapter類。9.3常用事件分類9.3.3鍵盤事件接下來,通過一個案例來學(xué)習(xí)如何監(jiān)聽鍵盤事件,如例9-7所示。[點擊查看例9-7]9.3常用事件分類9.3.4動作事件在Java中,動作事件用ActionEvent類表示,處理ActionEvent事件的監(jiān)聽器對象需要實現(xiàn)ActionListener接口,但監(jiān)聽器對象在監(jiān)聽動作時,不會像鼠標(biāo)事件一樣處理鼠標(biāo)個別的移動和單擊的細(xì)節(jié),而是去處理“按鈕按下”這樣“有意義”的事件。9.4布局管理器9.4.1FlowLayoutFlowLayout是流式布局管理器,它是最簡單的布局管理器。使用FlowLayout布局管理器時,容器會將組件按照添加順序從左向右放置。當(dāng)?shù)竭_(dá)容器的邊界時,會自動將組件放到下一行的開始位置。這些組件可以左對齊、居中對齊(默認(rèn)方式)或右對齊的方式排列9.4布局管理器9.4.1FlowLayout接下來,通過一個添加按鈕的案例來學(xué)習(xí)一下FlowLayout布局管理器的用法,如例9-8所示。[點擊查看例9-8]9.4布局管理器9.4.2BorderLayoutBorderLayout(邊界布局管理器)是一種較為復(fù)雜的布局方式,它將容器劃分為五個區(qū)域,分別是東(EAST)、南(SOUTH)、西(WEST)、北(NORTH)、中(CENTER)。組件可以被放置在這五個區(qū)域的中任意一個。9.4布局管理器9.4.2BorderLayout當(dāng)向BorderLayout布局管理器的容器中添加組件時,需要使用add(Componentcomp,Objectconstraints)方法,其中參數(shù)constraints是Object類型,在傳參時可以使用BorderLayout類提供的5個常量,它們分別是EAST、SOUTH、WEST、NORTH和CENTER。9.4布局管理器9.4.2BorderLayout接下來,通過一個案例來演示一下BorderLayout布局管理器對組件布局的效果,如例9-9所示。[點擊查看例9-9]9.4布局管理器9.4.3GridLayoutGridLayout(網(wǎng)格布局管理器)使用縱橫線將容器分成n行m列大小相等的網(wǎng)格,每個網(wǎng)格中放置一個組件。添加到容器中的組件首先放置在第1行第1列(左上角)的網(wǎng)格中,然后在第1行的網(wǎng)格中從左向右依次放置其它組件,行滿后,繼續(xù)在下一行中從左到右放置組件。9.4布局管理器9.4.3GridLayout接下來,通過一個案例來演示GridLayout布局的用法,如例9-10所示。[點擊查看例9-10]9.4布局管理器9.4.4GridBagLayoutGridBagLayout(網(wǎng)格包布局管理器)與GridLayout布局管理器類似,不同的是,它允許網(wǎng)格中的組件大小各不相同,而且允許一個組件跨越一個或者多個網(wǎng)格。9.4布局管理器9.4.4GridBagLayout使用GridBagLayout布局管理器的步驟如下:1、創(chuàng)建GridbagLayout布局管理器,并使容器采用該布局管理器。2、創(chuàng)建GridBagContraints對象(布局約束條件),并設(shè)置該對象的相關(guān)屬性。

9.4布局管理器9.4.4GridBagLayout3、調(diào)用GridBagLayout對象的setConstraints()方法建立GridBagConstraints對象和受控組件之間的關(guān)聯(lián)。4、向容器中添加組件。GridBagConstraints對象可以重復(fù)使用,只需要改變它的屬性即可。如果要向容器中添加多個組件,則重復(fù)2、3、4步驟。

9.4布局管理器9.4.4GridBagLayout接下來,通過一個案例來演示GridBagLayout的用法,如例9-11所示。

[點擊查看例9-11]9.4布局管理器9.4.5CardLayoutCardLayout(卡片布局管理器)將界面看做一系列卡片,在任何時候只有其中一張卡片是可見的,這張卡片占據(jù)容器的整個區(qū)域。CardLayout的常用方法如表9-4所示。

9.4布局管理器9.4.5CardLayout接下來,通過一個案例來演示CardLayout的用法,如例9-12所示。

[點擊查看例9-12]9.4布局管理器9.4.6不使用布局管理器如果不希望通過布局管理器對容器進(jìn)行布局,可以調(diào)用容器的setLayout(null)方法,將布局管理器取消。不使用布局管理器時,程序必須調(diào)用容器中每個組件的setSize()和setLocation()方法或者是setBounds()方法(這個方法接收四個參數(shù),分別是左上角的x、y坐標(biāo)和組件的長、寬)來為這些組件在容器中定位。9.4布局管理器9.4.6不使用布局管理器接下來,通過一個案例來演示不使用布局管理器對組件進(jìn)行布局,如例9-13所示。[點擊查看例9-13]9.5AWT繪圖Graphics類在java.awt包中專門提供了一個Graphics類,它相當(dāng)于一個抽象的畫筆,其中提供了各種繪制圖形的方法,使用Graphics類的方法就可以完成在組件上繪制圖形,Graphics常用的方法如表9-5所示。9.5AWT繪圖了解了Graphics的常用方法,接下來,通過一個案例來演示如何使用Graphics在組件中進(jìn)行繪圖。在組件第一次顯示時,AWT線程都會自動去調(diào)用組件的paint(Graphicsg)方法,為該方法傳入一個Graphics類型的對象用于繪制圖形,因此,要想在組件中繪制圖形,就需要重寫它的paint()方法。接下來,通過重寫Panel組件的paint()方法,在一個Panel面板上繪制一張圖片驗證碼,如例9-14所示。[點擊查看例9-14]9.6Swing相對于AWT來說,Swing包提供了更加豐富、便捷、強大的GUI組件,而且這些組件都是Java語言編寫而成的。因此,Swing組件不依賴于本地平臺,可以真正做到跨平臺運行。大部分的Swing組件都是JComponent類的直接或者間接子類,而JComponent類是AWT中java.awt.Container的子類9.6Swing9.6.1JFrameJFrame和Frame一樣是一個獨立存在的頂級窗口,不能放置在其它容器之中,JFrame支持通用窗口所有的基本功能,例如窗口最小化、設(shè)定窗口大小等等。通過一個案例來演示一下JFrame的效果,具體代碼如例9-15所示[點擊查看例9-15]9.6Swing9.6.2JDialogJDialog是Swing的另外一個頂級窗口,它和Dialog一樣都表示對話框JDialog對話框可分為兩種:模態(tài)對話框和非模態(tài)對話框,其中,模態(tài)對話框是指用戶需要等到處理完對話框后才能繼續(xù)與其它窗口交互。非模態(tài)對話框允許用戶在處理對話框的同時與其它窗口交互。對話框是模態(tài)或者非模態(tài),可以在創(chuàng)建Dialog對象時為構(gòu)造方法傳入?yún)?shù)來設(shè)置,也可以在創(chuàng)建JDialog對象后調(diào)用它的setModal()方法來進(jìn)行設(shè)置9.6Swing9.6.2JDialogJDialog常見的構(gòu)造方法如表9-6所示。JDialog的構(gòu)造方法中都需要接收一個Frame類型的對象,表示對話框所有者,如果該對話框沒有所有者,參數(shù)owner可以傳入null。參數(shù)modal用來指定JDialog窗口是模態(tài)還是非模態(tài),如果modal值設(shè)置為true,對話框就是模態(tài)對話框,反之則是非模態(tài)對話框。默認(rèn)情況下,modal的值為false。9.6Swing9.6.2JDialog通過一個案例來學(xué)習(xí)如何使用JDialog對話框,具體如例9-16所示。[點擊查看例9-16]9.6Swing9.6.3中間容器Jpanel:和AWT中的Panel組件使方法基本一致,它是一個無邊框,不能被移動、放大、縮小或者關(guān)閉的面板,它的默認(rèn)布局管理器是FlowLayout。當(dāng)然也可以使用構(gòu)造函數(shù)JPanel(LayoutManagerlayout)或者它的setLayout()方法為其制定布局管理器。JScrollPane:帶有滾動條的面板容器,而且這個面板只能添加一個組件,如果想往JScrollPane面板中添加多個組件,應(yīng)該先將組件添加到JPanel中,然后將JPanel添加到JScrollPane中。9.6Swing9.6.3中間容器JScrollPane有很多構(gòu)造方法,其中常見的構(gòu)造方法如表9-7所示。9.6Swing9.6.3中間容器如果JScrollPane的構(gòu)造方法中沒有指定顯示組件和滾動條策略,則可以使用JScrollPane提供的方法進(jìn)行設(shè)置,具體如表9-8所示。通過一個案例來演示一下向中間容器添加按鈕,如例9-17所示。[點擊查看例9-17]9.6Swing9.6.4文本組件文本組件用于接收用戶輸入的信息或向用戶展示信息,其中包括文本框(JTextField)、文本域(JTextArea)等,它們都有一個共同父類JTextComponent,JTextComponent是一個抽象類,它提供了文本組件常用的方法,如表9-9所示。9.6Swing9.6.4文本組件JTextComponent類有兩個子類,分別是JTextField和JTextArea(1)JTextFiled:稱為文本框,它只能接收單行文本的輸入,它的構(gòu)造方法如表9-10所示。在上述四個方法中,通常會采用第二個或者第四個構(gòu)造方法,指定文本框的列數(shù)9.6Swing9.6.4文本組件JTextComponent類有兩個子類,分別是JTextField和JTextArea(2)JTextArea:稱為文本域,它能接收多行的文本的輸入,它的構(gòu)造方法如表9-11所示。上述四個構(gòu)造方法中,在創(chuàng)建文本域時,通常會使用最后兩個指定文本域的行數(shù)和列數(shù)。9.6Swing9.6.4文本組件接下來,編寫一個聊天窗口,演示一下文本組件JTextField和JTextArea的使用,如例9-18所示。[點擊查看例9-18]9.6Swing9.6.5按鈕組件常見的按鈕組件有JButton、JCheckBox、JRadioButton等,它們都是抽象類AbstractButton類的直接或間接子類。在AbstractButton類中提供了按鈕組件通用的一些方法,如表9-12所示。9.6Swing9.6.5按鈕組件JCheckBox組件被稱為復(fù)選框,它有選中(是)/未選中(非)兩種狀態(tài),如果用戶想接收的輸入只有“是”和“非”,則可以通過復(fù)選框來切換狀態(tài)。如果復(fù)選框有多個,則用戶可以選中其中一個或者多個,如表9-13所示。9.6Swing9.6.5按鈕組件接下來,通過一個案例來演示JCheckBox組件的用法,具體代碼如例9-19所示。[點擊查看例9-19]9.6Swing9.6.5按鈕組件JRadioButton組件稱為單選按鈕,與JCheckBox復(fù)選框不同的是,單選按鈕只能選中一個,就像收音機上的電臺選擇按鈕,當(dāng)按下一個,先前按下的按鈕就會自動彈起,對于JRadioButton按鈕來說,當(dāng)一個按鈕被選中時,先前被選中的按鈕就會自動取消選中。創(chuàng)建JRadioButton對象常見的構(gòu)造方法如表9-14所示。9.6Swing9.6.5按鈕組件接下來,通過一個案例來演示JRadioButton組件的用法,如例9-20所示。[點擊查看例9-20]9.6Swing9.6.6JComboBoxJComboBox組件被稱為組合框或者下拉列表框,它將所有選項折疊收藏在一起,默認(rèn)顯示的是第一個添加的選項。當(dāng)用戶點擊組合框時,會出現(xiàn)下拉式的選擇列表,用戶可以從中選擇其中一項并顯示。創(chuàng)建JComboBox對象的構(gòu)造方法表9-15所示。9.6Swing9.6.6JComboBox在使用JComboBox時,需要用到一些它的常見方法,如表9-16所示。9.6Swing9.6.6JComboBox對JComboBox有所了解后,接下來,通過一個案例來演示該組件的具體用法,如例9-21所示。[點擊查看例9-21]9.6Swing9.6.7菜單組件菜單組件分為下拉式菜單和彈出式菜單下拉式菜單包括JMenuBar(菜單欄)、JMenu(菜單)和JMenuItem(菜單項),這三個組件在菜單中對

溫馨提示

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

最新文檔

評論

0/150

提交評論