網(wǎng)絡(luò)程序設(shè)計(jì)java第08章Swing圖形用戶界面程序設(shè)計(jì)newppt課件_第1頁
網(wǎng)絡(luò)程序設(shè)計(jì)java第08章Swing圖形用戶界面程序設(shè)計(jì)newppt課件_第2頁
網(wǎng)絡(luò)程序設(shè)計(jì)java第08章Swing圖形用戶界面程序設(shè)計(jì)newppt課件_第3頁
網(wǎng)絡(luò)程序設(shè)計(jì)java第08章Swing圖形用戶界面程序設(shè)計(jì)newppt課件_第4頁
網(wǎng)絡(luò)程序設(shè)計(jì)java第08章Swing圖形用戶界面程序設(shè)計(jì)newppt課件_第5頁
已閱讀5頁,還剩79頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、2022-1-171網(wǎng)絡(luò)程序設(shè)計(jì)網(wǎng)絡(luò)程序設(shè)計(jì)Network Programming第八章第八章 Swing 圖形用戶界面圖形用戶界面趙建立趙建立山東科技大學(xué)信息科學(xué)與工程學(xué)院山東科技大學(xué)信息科學(xué)與工程學(xué)院College of Information Science and Engineering , Shandong University of Science and Technologyzhaojianligmail2022-1-172簡(jiǎn)介簡(jiǎn)介 圖形用戶界面圖形用戶界面(GUI) 數(shù)據(jù)的圖形顯示方式數(shù)據(jù)的圖形顯示方式 友好的交互方式友好的交互方式 簡(jiǎn)化計(jì)算機(jī)軟件的學(xué)習(xí)過程簡(jiǎn)化計(jì)算機(jī)軟件的學(xué)習(xí)

2、過程 GUI例如例如 微軟微軟 IPOD IPHONE IPAD2022-1-173簡(jiǎn)介簡(jiǎn)介 喬布斯喬布斯 76年大學(xué)停學(xué)成立蘋果公司,年大學(xué)停學(xué)成立蘋果公司,80年年12月上月上市蘋果公司高層產(chǎn)生了市蘋果公司高層產(chǎn)生了4名億萬富翁和名億萬富翁和40名名以上的百萬富翁以上的百萬富翁 ; Lisa工程失敗,工程失敗,1985年年4經(jīng)由董事會(huì)決議撤經(jīng)由董事會(huì)決議撤銷運(yùn)營(yíng)大權(quán);銷運(yùn)營(yíng)大權(quán); 2019年年12月,回歸蘋果,在喬布斯的改革月,回歸蘋果,在喬布斯的改革之下,之下,“蘋果終于實(shí)現(xiàn)盈利。喬布斯剛上蘋果終于實(shí)現(xiàn)盈利。喬布斯剛上任時(shí),蘋果公司的虧損高達(dá)任時(shí),蘋果公司的虧損高達(dá)10億美圓,一億美圓,

3、一年后卻奇觀般地盈利年后卻奇觀般地盈利3.09億美圓;億美圓; 2019年年8月初,蘋果公司市值約月初,蘋果公司市值約3371億美億美圓超越??松梨诩s圓超越??松梨诩s3333億美圓,億美圓,成為全球第一大市值的上市公司,也是全成為全球第一大市值的上市公司,也是全球第一大資訊科技公司。球第一大資訊科技公司。2022-1-174Swing整體引見整體引見 早期版本的早期版本的GUI組件組件 所在的包所在的包: java.awt 與平臺(tái)相關(guān)性較強(qiáng)與平臺(tái)相關(guān)性較強(qiáng),功能較弱功能較弱 Swing GUI 組件組件 所在的包所在的包: javax.swing Swing組件的平臺(tái)相關(guān)性較小組件的平臺(tái)相

4、關(guān)性較小(lightweight) Swing比比AWT可以抑制不同操作系統(tǒng)帶來的圖形界面的可以抑制不同操作系統(tǒng)帶來的圖形界面的差別差別 Swing圖形用戶界面可以定制指定的操作系統(tǒng)風(fēng)格的界圖形用戶界面可以定制指定的操作系統(tǒng)風(fēng)格的界面面 兩類圖形用戶界面之間在組件控制機(jī)制等方面存在一兩類圖形用戶界面之間在組件控制機(jī)制等方面存在一些沖突,普通建議運(yùn)用些沖突,普通建議運(yùn)用swing。2022-1-175JComponent 組件類的層次構(gòu)造組件類的層次構(gòu)造 java.lang.Object | +-java.awtponent | +-java.awt.Container | +-javax.sw

5、ing.JComponent JComponent大多數(shù)大多數(shù)Swing組件類父類組件類父類2022-1-176Swing 組件組件 組件和容器是組件和容器是Swing圖形用戶界面的組成部分:圖形用戶界面的組成部分: 容器容器 各種組件必需放在容器各種組件必需放在容器 容器本身也是一種組件容器本身也是一種組件 分類分類 頂層容器小運(yùn)用程序、對(duì)話框和框架頂層容器小運(yùn)用程序、對(duì)話框和框架 普通容器面板、滾動(dòng)窗格、分裂窗格、選項(xiàng)卡窗格、工普通容器面板、滾動(dòng)窗格、分裂窗格、選項(xiàng)卡窗格、工具條具條 其它容器其它容器 組件組件 根本控制組件按鈕、單項(xiàng)選擇按鈕、復(fù)選框、組合框、根本控制組件按鈕、單項(xiàng)選擇按鈕

6、、復(fù)選框、組合框、列表框列表框 不可編輯的信息顯示組件標(biāo)簽、進(jìn)度條不可編輯的信息顯示組件標(biāo)簽、進(jìn)度條 可編輯的信息顯示組件文本編輯區(qū)、文本區(qū)域可編輯的信息顯示組件文本編輯區(qū)、文本區(qū)域2022-1-177一些一些GUI組件組件 標(biāo)簽標(biāo)簽(JLabel) 文本框文本框(JTextField) 按鈕按鈕(JButton) 復(fù)選框復(fù)選框(JCheckBox) 組合框組合框(JComboBox) 文本文本(JTextArea) 框架框架(JFrame) 面板面板(JPanel)2022-1-178標(biāo)簽標(biāo)簽(JLabel) 標(biāo)簽標(biāo)簽 為為GUI提供文本提供文本(主要主要)或圖像或圖像(也可以也可以)信息信

7、息 對(duì)應(yīng)類對(duì)應(yīng)類(JLabel) (JComponent的子類的子類) 可以顯示可以顯示: 單行的只讀的文本信息單行的只讀的文本信息 圖像圖像 同時(shí)顯示文本與圖像信息同時(shí)顯示文本與圖像信息 程序普通不修正標(biāo)簽的內(nèi)容程序普通不修正標(biāo)簽的內(nèi)容2022-1-179例如例如【例【例8-1】J_LableFrame.java,在框架中添加標(biāo)簽的例程在框架中添加標(biāo)簽的例程2022-1-1710文本框文本框(JTextField) 文本框文本框(JTextField) 顯示單行的文本信息顯示單行的文本信息 JTextField extends JTextComponent2022-1-1711例如例如【例【

8、例8-2】J_Text.java,文本編輯框例程文本編輯框例程2022-1-1712按鈕按鈕(JButton) 當(dāng)鼠標(biāo)左鍵單擊按鈕組件時(shí),能觸發(fā)特定當(dāng)鼠標(biāo)左鍵單擊按鈕組件時(shí),能觸發(fā)特定的事件的事件 在在Java中中, 廣義的按鈕包括廣義的按鈕包括: 命令式按鈕命令式按鈕(JButton) 復(fù)選框復(fù)選框(JCheckBox) 單項(xiàng)選擇按鈕單項(xiàng)選擇按鈕(JRadioButton)2022-1-1713按鈕類的層次構(gòu)造按鈕類的層次構(gòu)造javax.swing.JComponentjavax.swing.AbstractButtonjavax.swing.JButtonjavax.swing. JTog

9、gleButtonjavax.swing.JCheckBoxjavax.swing.JRadioButton2022-1-1714例如例如【例【例8-3】J_Button.java,命令式按鈕、復(fù)選框和單項(xiàng)選擇按鈕例命令式按鈕、復(fù)選框和單項(xiàng)選擇按鈕例程程2022-1-1715組合框組合框(JComboBox) 組合框組合框(JComboBox) 可以從下拉式的列表框中選取其中的列表項(xiàng)可以從下拉式的列表框中選取其中的列表項(xiàng) 有時(shí)也稱為下拉框有時(shí)也稱為下拉框(drop-down list) 類類JComboBox中的方法中的方法 getSelectedIndex( ) 前往當(dāng)前被選中的項(xiàng)前往當(dāng)前被

10、選中的項(xiàng) setMaximumRowCount( n ) 設(shè)置最多顯示列表項(xiàng)的項(xiàng)數(shù)設(shè)置最多顯示列表項(xiàng)的項(xiàng)數(shù) 滾動(dòng)條滾動(dòng)條(Scrollbar)會(huì)自動(dòng)加上會(huì)自動(dòng)加上2022-1-1716例如例如【例【例8-4】J_Lines.java,組合框、列表框、文本區(qū)域和滾動(dòng)窗格例程組合框、列表框、文本區(qū)域和滾動(dòng)窗格例程2022-1-1717框架框架(JFrame) Swing組件從功能分可以分成三種,分別是頂層組件,中間組件和根本組件。JFrame就是頂層組件,簡(jiǎn)單的描畫也就是可以獨(dú)立顯示的組件。而中間組件是可以充任載體,但是不能獨(dú)立顯示的組件,可以把根底組件放在其中,但是還是要依托在頂層容器內(nèi)才可以顯

11、示。根底組件那么是實(shí)現(xiàn)人機(jī)交互的根本組件。 類 JFrame 是java.awt.Frame的子類 java.lang.Object | +-java.awtponent | +-java.awt.Container | +-java.awt.Window | +-java.awt.Frame | +-javax.swing.JFrame2022-1-1718面板面板(JPanel) 一種中間容器,在面板中添加組件,然后一種中間容器,在面板中添加組件,然后再將面板添加到其他容器中。再將面板添加到其他容器中。 可以添加各種組件可以添加各種組件(包括面板組件包括面板組件) 面板面板(JPanel)

12、的大小由它所包含的組件決議的大小由它所包含的組件決議 當(dāng)組件個(gè)數(shù)添加,面板當(dāng)組件個(gè)數(shù)添加,面板(JPanel)也會(huì)隨之而也會(huì)隨之而增大增大2022-1-1719例如例如【例【例8-5】J_Panel.java,面板例程面板例程2022-1-1720本章總體綱要本章總體綱要 根本根本GUI組件組件 規(guī)劃管理器規(guī)劃管理器 事件處置模型事件處置模型 菜單菜單2022-1-1721規(guī)劃管理器規(guī)劃管理器用來控制組件在容器中的規(guī)劃方式用來控制組件在容器中的規(guī)劃方式該當(dāng)盡量利用已有的根本規(guī)劃方式該當(dāng)盡量利用已有的根本規(guī)劃方式規(guī)劃管理器處置組件規(guī)劃的大部分細(xì)節(jié)規(guī)劃管理器處置組件規(guī)劃的大部分細(xì)節(jié) 給頂層容器設(shè)置

13、規(guī)劃管理器:先經(jīng)過頂層容器給頂層容器設(shè)置規(guī)劃管理器:先經(jīng)過頂層容器getContentPane獲取頂層容器的內(nèi)容窗格,再經(jīng)過獲取頂層容器的內(nèi)容窗格,再經(jīng)過java.awt.Container的的setLayout設(shè)置內(nèi)容窗格的規(guī)劃管理器;設(shè)置內(nèi)容窗格的規(guī)劃管理器; 給其他容器設(shè)置規(guī)劃管理器:直接經(jīng)過給其他容器設(shè)置規(guī)劃管理器:直接經(jīng)過java.awt.Container的的setLayout設(shè)置內(nèi)容窗格的規(guī)劃管理器。設(shè)置內(nèi)容窗格的規(guī)劃管理器。2022-1-1722規(guī)劃管理器規(guī)劃管理器 FlowLayout GridLayout BorderLayout CardLayout 組合規(guī)劃管理器組合規(guī)

14、劃管理器2022-1-1723FlowLayout 是一種最根本的規(guī)劃管理器是一種最根本的規(guī)劃管理器 是是 java.awt.Applet、java.awt.Panel 和和 javax.swing.JPanel的默許規(guī)劃方式的默許規(guī)劃方式 在容器中,從左到右依次放置在容器中,從左到右依次放置GUI組件組件 當(dāng)組件排到容器一行的末尾時(shí),那么從下當(dāng)組件排到容器一行的末尾時(shí),那么從下一行開場(chǎng)接著陳列組件一行開場(chǎng)接著陳列組件 每行組件的對(duì)齊方式可以是每行組件的對(duì)齊方式可以是: 左對(duì)齊、中間左對(duì)齊、中間(默許對(duì)齊方式默許對(duì)齊方式)和右對(duì)齊和右對(duì)齊2022-1-1724類類FlowLayout 對(duì)齊方法

15、對(duì)齊方法 setAlignment( position_CONSTANT ) FlowLayout.LEFT FlowLayout.CENTER FlowLayout.RIGHT2022-1-1725GridLayout 將容器按行和列等分成棋盤狀,然后組件將容器按行和列等分成棋盤狀,然后組件從第一行按照從左到右依次被放到這些矩從第一行按照從左到右依次被放到這些矩形區(qū)域中,一行放滿了,繼續(xù)從下一行開形區(qū)域中,一行放滿了,繼續(xù)從下一行開開場(chǎng)。開場(chǎng)。 Public GridLayout(int rows,int cols)2022-1-1726例如例如【例【例8-6】J_GridLayout.ja

16、va,網(wǎng)格規(guī)劃管理器例程網(wǎng)格規(guī)劃管理器例程2022-1-1727BorderLayout 是容器是容器JFrame和和JApplet的默許規(guī)劃方式的默許規(guī)劃方式 將容器分成五個(gè)區(qū)域,將容器分成五個(gè)區(qū)域, NORTH (頂部頂部) SOUTH (底部底部) WEST (左側(cè)左側(cè)) EAST (右側(cè)右側(cè)) CENTER (中間中間) 每個(gè)區(qū)域最多只能每個(gè)區(qū)域最多只能1個(gè)組件個(gè)組件2022-1-1728類類BorderLayout方法方法 構(gòu)造方法構(gòu)造方法: BorderLayout( hGap, vGap ); hGap 區(qū)域間的程度間隙區(qū)域間的程度間隙 vGap -區(qū)域間的豎直間隙區(qū)域間的豎直間

17、隙 上面兩個(gè)數(shù)據(jù)的默許值是上面兩個(gè)數(shù)據(jù)的默許值是0 添加組件添加組件 myContainer.add( component, position ) component 需求參與到容器中的組件需求參與到容器中的組件 positions (BorderLayout.NORTH) NORTH, SOUTH, EAST, WEST, CENTER2022-1-1729例如例如【例【例8-7】J_Border.java,邊境規(guī)劃管理器例程邊境規(guī)劃管理器例程2022-1-1730CardLayout CardLayout的規(guī)劃方式有點(diǎn)象的規(guī)劃方式有點(diǎn)象 “撲克牌撲克牌 一個(gè)組件壓在另一個(gè)組件的上面,所以每

18、一個(gè)組件壓在另一個(gè)組件的上面,所以每次普通只能看到一個(gè)組件次普通只能看到一個(gè)組件2022-1-1731例如例如【例【例8-8】J_CardLayout.java,卡片規(guī)劃管理器例程卡片規(guī)劃管理器例程2022-1-1732BoxLayout BoxLayout允許多個(gè)組件在容器中沿程度方允許多個(gè)組件在容器中沿程度方向或豎直方向陳列,不換行、換列。向或豎直方向陳列,不換行、換列。2022-1-1733例如例如【例【例8-9】J_CardLayout.java,卡片規(guī)劃管理器例程卡片規(guī)劃管理器例程2022-1-1734規(guī)劃管理器嵌套規(guī)劃管理器嵌套 實(shí)踐上是容器的嵌套,被嵌套的容器可以實(shí)踐上是容器的嵌

19、套,被嵌套的容器可以具有不同的規(guī)劃管理器具有不同的規(guī)劃管理器 在嵌套的規(guī)劃管理器中在嵌套的規(guī)劃管理器中 JPanel 通常起到了通常起到了 “橋的作用橋的作用2022-1-1735例如例如【例【例8-10】J_FlowBoxLayout.java,組合規(guī)劃方式例程組合規(guī)劃方式例程 Swing中的類在設(shè)計(jì)時(shí)采用了模型、視圖、控制器Model View Controller,MVC方式作為每個(gè)組件的根本設(shè)計(jì)。MVC方式是GUI程序設(shè)計(jì)中比較常見的一種設(shè)計(jì)方法,因此了解MVC方式不僅有利于學(xué)習(xí)Swing,更有助于設(shè)計(jì)GUI程序。MVC方式將GUI組件拆分為模型、視圖、控制器三個(gè)根本要素,每一個(gè)要素都

20、對(duì)組件的表現(xiàn)起著至關(guān)重要的作用。MVC模型(Model)包含每個(gè)組件的數(shù)據(jù)形狀,不同類型的組件有不同的模型。什么是組件的數(shù)據(jù)形狀呢?例如滾動(dòng)條組件JScrollBar的數(shù)據(jù)形狀就包含滾動(dòng)條的當(dāng)前位置、最大值、最小值以及滾動(dòng)條的寬度等。這些數(shù)據(jù)信息就是滾動(dòng)條組件的模型。視圖(View)是組件在屏幕上的表現(xiàn)方式。由于Java是跨平臺(tái)的言語,同一個(gè)組件在不同的平臺(tái)上的顯示是不一樣的,在不同的外觀風(fēng)格下也是不一樣的。為了讓Java的GUI程序也應(yīng)該做到“Write once,run anywhere,Swing組件根據(jù)組件的模型和當(dāng)前所處的顯示環(huán)境進(jìn)展組件繪制??刂破?Controller)控制組件如

21、何與事件進(jìn)展交互。事件的方式有多種,例如鼠標(biāo)單擊、獲得或者失去焦點(diǎn)、鍵清點(diǎn)擊等。當(dāng)這些事件發(fā)生時(shí),控制器根據(jù)事件的類型,決議組件如何呼應(yīng) 圖 MVC方式2022-1-1739本章總體綱要本章總體綱要 根本根本GUI組件組件 規(guī)劃管理器規(guī)劃管理器 事件處置模型事件處置模型 菜單菜單2022-1-1740事件處置模型事件處置模型 事件:對(duì)鼠標(biāo)、鍵盤和其他輸入設(shè)備的各事件:對(duì)鼠標(biāo)、鍵盤和其他輸入設(shè)備的各種操作,普通稱為事件。種操作,普通稱為事件。 GUI是由事件是由事件(event)驅(qū)動(dòng)的驅(qū)動(dòng)的 當(dāng)用戶與當(dāng)用戶與GUI交互可以產(chǎn)惹事件交互可以產(chǎn)惹事件(events) 一些常見的交互方式一些常見的交互

22、方式 挪動(dòng)鼠標(biāo)挪動(dòng)鼠標(biāo) 用鼠標(biāo)點(diǎn)擊按鈕用鼠標(biāo)點(diǎn)擊按鈕 在文本框中輸入數(shù)據(jù)在文本框中輸入數(shù)據(jù) 封鎖窗口等封鎖窗口等2022-1-1741事件處置機(jī)制事件處置機(jī)制 事件處置模型是以對(duì)象方式封裝的,主事件處置模型是以對(duì)象方式封裝的,主要涉及三個(gè)要素:要涉及三個(gè)要素: 事件源事件源(An event source) 事件對(duì)象事件對(duì)象(An event object) 事件監(jiān)聽器事件監(jiān)聽器(event listener(s)事件監(jiān)聽器A事件監(jiān)聽器B事件對(duì)象事件對(duì)象事件源(例如: 按鈕)2022-1-1742事件處置機(jī)制事件處置機(jī)制 事件源事件源 接受各種事件的對(duì)象,可供用戶進(jìn)展交互的接受各種事件的對(duì)象,

23、可供用戶進(jìn)展交互的GUI組件組件 事件對(duì)象事件對(duì)象 封裝了包含所發(fā)生的各種事件的有效信息封裝了包含所發(fā)生的各種事件的有效信息 信息包括信息包括: 事件源的援用、以及事件監(jiān)聽器在處事件源的援用、以及事件監(jiān)聽器在處置事件時(shí)所需求的其它各種信息置事件時(shí)所需求的其它各種信息 事件信息被包含在事件信息被包含在java.awt.event或或java.swing.event 包中,類名通常以單詞包中,類名通常以單詞Event結(jié)結(jié)尾尾 事件監(jiān)聽器事件監(jiān)聽器 接受事件對(duì)象,并處置事件對(duì)象,首先需求在事接受事件對(duì)象,并處置事件對(duì)象,首先需求在事件源中登記事件監(jiān)聽器。也包含在件源中登記事件監(jiān)聽器。也包含在java

24、.awt.event或或java.swing.event 包中,類名通常以單詞包中,類名通常以單詞Listener結(jié)尾結(jié)尾 事件處置步驟 程序參與java.awt.event包: import java.awt.event; 給所需的事件源對(duì)象注冊(cè)事件監(jiān)聽器: 事件源對(duì)象.addXXXListenerXXXListener; 實(shí)現(xiàn)相應(yīng)的方法。假設(shè)某個(gè)監(jiān)聽器接口包含多個(gè)方法,那么需求實(shí)現(xiàn)一切的方法 事件處置機(jī)制事件處置機(jī)制 事件處置方式 (1)利用監(jiān)聽器接口實(shí)現(xiàn)事件處置 (2)利用監(jiān)聽器類實(shí)現(xiàn)事件處置 (3)利用內(nèi)部類實(shí)現(xiàn)事件處置 (4)利用匿名內(nèi)部類實(shí)現(xiàn)事件處置 事件處置機(jī)制事件處置機(jī)制 (1

25、)利用監(jiān)聽器接口實(shí)現(xiàn)事件處置 同一個(gè)類中實(shí)現(xiàn)一個(gè)事件的接口。對(duì)該接口的方法進(jìn)展定義,實(shí)現(xiàn)特定的功能。普通方式如下: public class 事件發(fā)生類名 implements 事件監(jiān)聽器接口 public事件發(fā)生類名() 組件.addXXXListener(this); /注冊(cè)到監(jiān)聽器對(duì)象,this表示當(dāng)前對(duì)象。 public void 監(jiān)聽器接口闡明的方法1() public void 監(jiān)聽器接口闡明的方法n() 事件處置機(jī)制事件處置機(jī)制 (2)利用監(jiān)聽器類實(shí)現(xiàn)事件處置 就是經(jīng)過擴(kuò)展一個(gè)監(jiān)聽器接口,定義監(jiān)聽器類,然后對(duì)要求發(fā)生動(dòng)作的組件再注冊(cè)到這個(gè)監(jiān)聽器類的對(duì)象中。這種方法的普通方式如下:

26、 class 自定義監(jiān)聽類名extends 事件適配器(或 implements事件監(jiān)聽器)/定義監(jiān)聽器類 public void 監(jiān)聽器接口闡明的方法1() public void 監(jiān)聽器接口闡明的方法n() public class 事件發(fā)生類名 /定義事件發(fā)生的類 public自定義監(jiān)聽類名() 組件.addXXXListener(new自定義監(jiān)聽類名(); /注冊(cè)組件到監(jiān)聽器對(duì)象 . 事件處置機(jī)制事件處置機(jī)制 (3)利用內(nèi)部類實(shí)現(xiàn)事件處置 這種方法就是將獨(dú)立的監(jiān)聽器類定義成事件發(fā)生類的內(nèi)部類。方式如下: public class事件發(fā)生的類名 /定義事件發(fā)生的類 public事件發(fā)生的

27、類名() 組件.addXXXListener(new自定義監(jiān)聽類名(); /注冊(cè)組件到監(jiān)聽器對(duì)象 . class 自定義監(jiān)聽類名extends 事件適配器 (或 implements事件監(jiān)聽器)/定義內(nèi)部監(jiān)聽器類 public void 監(jiān)聽器接口闡明的方法1() public void 監(jiān)聽器接口闡明的方法n() /終了內(nèi)部類 事件處置機(jī)制事件處置機(jī)制 (4)利用匿名內(nèi)部類實(shí)現(xiàn)事件處置 格式: 組件對(duì)象.addXXXListener(new 事件監(jiān)聽器() /定義匿名內(nèi)部類 public void 監(jiān)聽器接口闡明的方法1() public void 監(jiān)聽器接口闡明的方法n() ); /終了匿

28、名類定義事件處置機(jī)制事件處置機(jī)制 4.常見的事件處置類型 Java言語中提供事件處置的包主要有java.awt.event和javax.swing.event包。 其中,java.awt.event包提供了對(duì)awt包和swing包常見組件的支持,與事件處置相關(guān)常見的的事件類和事件監(jiān)聽器接口見表。至于swing包提供了對(duì)高級(jí)事件處置。 事件處置機(jī)制事件處置機(jī)制表9-1 常見的事件類和事件監(jiān)聽接口 事件類事件監(jiān)聽器接口ActionEventActionListenerItemEventItemListenerMouseEventMouseMotionListenerMouseListenerMou

29、seWheelEventMouseWheelListenerKeyEventKeyListenerFocusEventFocusListenerAdjustmentEventAdjustmentLlistenerWindowEventWindowListenerWindowStateListenerWindowFocusListener事件處置機(jī)制事件處置機(jī)制常用的事件處置1.動(dòng)作事件處置動(dòng)作事件處置是最簡(jiǎn)單和最常用的事件處置。當(dāng)用戶點(diǎn)擊按鈕或在文本框中按回車鍵或選擇菜單項(xiàng)或運(yùn)用列表等組件時(shí),都可以采用動(dòng)作事件來處置這些組件引發(fā)的動(dòng)作。動(dòng)作事件處置涉及到接口ActionListener與動(dòng)作事

30、件類ActionEvent。經(jīng)過接口ActionListener可以實(shí)現(xiàn)對(duì)組件發(fā)生動(dòng)作事件ActionEvent對(duì)象的監(jiān)聽與處置。 ActionListener的主要方法方 法功 能public void actionPerformed(ActionEvent)動(dòng)作發(fā)生時(shí)被調(diào)用常用的事件處置2.鼠標(biāo)事件處置鼠標(biāo)是一種最常見的輸入方式。用戶可以用鼠標(biāo)繪制圖形,利用鼠標(biāo)實(shí)現(xiàn)特殊的控制,例如游戲操作的控制等功能。Java言語中主要提供了三種不同類型的鼠標(biāo)事件:鼠標(biāo)鍵事件;鼠標(biāo)挪動(dòng)事件;鼠標(biāo)輪滾動(dòng)事件鼠標(biāo)鍵事件多用于鼠標(biāo)的單擊處置,鼠標(biāo)挪動(dòng)事件是用于鼠標(biāo)挪動(dòng)的處置,至于鼠標(biāo)輪滾動(dòng)事件是從JDK1.4后

31、引入的鼠標(biāo)事件,用于鼠標(biāo)輪的動(dòng)作處置。這三種類型的鼠標(biāo)事件普通是以容器組件作為事件源,它們各有本人的監(jiān)聽器。 常用的事件處置 1.鼠標(biāo)鍵事件. 鼠標(biāo)鍵事件處置涉及到監(jiān)聽器接口MouseListener和鼠標(biāo)事件MouseEvent。對(duì)于這種事件處置的詳細(xì)步驟是: 組件經(jīng)過方法addMouseListener()到注冊(cè)MouseListener中。允許監(jiān)聽器對(duì)象在程序運(yùn)轉(zhuǎn)過程中監(jiān)聽組件能否有鼠標(biāo)鍵事件MouseEvent對(duì)象發(fā)生。 實(shí)現(xiàn)MouseListener接口的一切方法,提供事件發(fā)生的詳細(xì)處置方法。常用的事件處置MouseEvent的主要方法方 法功 能int getButton()獲取鼠

32、標(biāo)按鍵變更的狀態(tài)int getClickCount()獲取鼠標(biāo)點(diǎn)擊的次數(shù)Point getPoint()獲取鼠標(biāo)點(diǎn)擊的位置int getX()獲取鼠標(biāo)的X位置int getY()獲取鼠標(biāo)的Y位置String getMouseModifiersText(int)獲取控制鍵與鼠標(biāo)的組合鍵的字符串 MouseListener的方法方 法功 能void mousePressed(MouseEvent)鼠標(biāo)按下調(diào)用void mouseReleased(MouseEvent)鼠標(biāo)釋放調(diào)用void mouseEntered(MouseEvent)鼠標(biāo)進(jìn)入調(diào)用void mouseExited(MouseEve

33、nt)鼠標(biāo)離開調(diào)用void mouseClicked(MouseEvent)鼠標(biāo)點(diǎn)擊調(diào)用9.2 常用的事件處置 2.鼠標(biāo)挪動(dòng)事件; 事件類MouseEvent還對(duì)應(yīng)另一個(gè)監(jiān)聽器接口MouseMotionListener。該接口可以實(shí)現(xiàn)鼠標(biāo)的兩種運(yùn)動(dòng)的處置:鼠標(biāo)挪動(dòng)處置和鼠標(biāo)拖動(dòng)的處置。實(shí)現(xiàn)鼠標(biāo)挪動(dòng)事件處置的普通步驟如下: 組件經(jīng)過方法addMouseMotionListener()到注冊(cè)MouseMotionListener中。允許MousMotionListener監(jiān)聽器對(duì)象在程序運(yùn)轉(zhuǎn)過程中監(jiān)聽組件能否有鼠標(biāo)鍵事件MouseEvent對(duì)象發(fā)生。 實(shí)現(xiàn)MouseMotionListener接口

34、的一切方法,提供事件發(fā)生的詳細(xì)處置方法。常用的事件處置 3.鼠標(biāo)輪滾動(dòng)事件 鼠標(biāo)輪滾動(dòng)事件可以處置鼠標(biāo)中間的鼠標(biāo)輪的動(dòng)作。這種事件的實(shí)現(xiàn)依賴于事件類MouseWheelEvent和接口MouseWheelListener。實(shí)現(xiàn)鼠標(biāo)輪滾動(dòng)事件的詳細(xì)步驟如下: 組件經(jīng)過方法addMouseWheelListener()到注冊(cè)MouseWheelListener中。允許監(jiān)聽器在程序運(yùn)轉(zhuǎn)過程中監(jiān)聽組件能否有鼠標(biāo)輪事件MouseWheelEvent對(duì)象的發(fā)生 實(shí)現(xiàn)MouseWheelListener接口的一切方法,提供事件發(fā)生的詳細(xì)處置方法。 對(duì)于類MouseWheelEvent是MouseEvent的

35、直接子類,具有MouseEvent的特點(diǎn)。同時(shí),它也具有本身的特征。 常用的事件處置MouseWheelEvent的常見方法方 法功 能int getScrollAmount()獲取滾動(dòng)的單位數(shù)int getScrollType()獲取滾動(dòng)類型int getWheelRotation()獲取鼠標(biāo)輪旋轉(zhuǎn)運(yùn)動(dòng)量int getUnitsToScroll()實(shí)現(xiàn)MouseWheelListener的便捷方法MouseWheelListener的方法方 法功 能void mouseWheelMoved(MouseWheelEvent)鼠標(biāo)輪移動(dòng)調(diào)用常用的事件處置3.窗口事件處置窗口事件是一種低級(jí)的事件處

36、置,它可以處置窗口的翻開、封鎖、最小化、最大化、窗口的激活、無效、恢復(fù)、獲得焦點(diǎn)等事件。詳細(xì)的來說,窗口事件處置有三種類型:窗口根身手件處置、窗口形狀事件處置以及窗口焦點(diǎn)事件處置。為了實(shí)現(xiàn)這些窗口事件處置可以經(jīng)過窗口事件類WindowEvent和監(jiān)聽器接口WindowListener或 WindowStateListener或WindowFocusListener來實(shí)現(xiàn)。 常用的事件處置 實(shí)現(xiàn)窗口處置的詳細(xì)的步驟為: 組件經(jīng)過方法addWindowListener()到注冊(cè)WindowListener中,利用方法addWindowStateListener()注冊(cè)到WindowStateLis

37、tener中,以及利用方法addWindowFocusListener()注冊(cè)到WindowFocusListener中。允許上述提及的三種監(jiān)聽器在程序運(yùn)轉(zhuǎn)過程中監(jiān)聽組件能否有窗口事件WindowEvent對(duì)象發(fā)生。 實(shí)現(xiàn)WindowListener、WindowStateListener和WindowFocusListener接口的一切方法,提供事件發(fā)生的詳細(xì)處置方法。常用的事件處置WindowEvent的主要方法方 法功 能int getNewState()獲取新狀態(tài)int getOldState()獲取舊狀態(tài)Window getWindow()獲取窗口Window getOpposite

38、Window()獲取與激活或獲得焦點(diǎn)的其他窗口 WindowStateListener的方法方 法功 能void windowStateChanged(WindowEvent)窗口狀態(tài)改變調(diào)用 WindowFocusListener的方法方 法功 能void windowGainedFocus(WindowEvent)窗口獲得焦點(diǎn)調(diào)用void windowLostFocus(WindowEvent)窗口失去焦點(diǎn)調(diào)用常用的事件處置WindowListener的方法方 法功 能void windowActivated(WindowEvent)窗口激活調(diào)用void windowDeactivated

39、(WindowEvent)窗口失效調(diào)用 void windowClosed(WindowEvent)窗口已關(guān)閉調(diào)用 void windowClosing(WindowEvent)窗口正關(guān)閉調(diào)用 void windowOpened(WindowEvent)打開窗口調(diào)用 void windowIconified(WindowEvent)窗口最小化調(diào)用 void windowDeIconified(WindowEvent)窗口從最小化恢復(fù)調(diào)用常用的事件處置4.選項(xiàng)事件處置Swing包中的許多組件,如JCheckBox、JComboBox、JCheckBoxMenuItem,提供了“選中和“未選兩種形

40、狀。希望對(duì)操作中產(chǎn)生的這兩種形狀能進(jìn)展相應(yīng)地處置。這就屬于選項(xiàng)事件處置。與選項(xiàng)事件處置相關(guān)的有事件類ItemEvent和監(jiān)聽器接口ItemListener。詳細(xì)實(shí)現(xiàn)選項(xiàng)事件的過程有:組件經(jīng)過方法addItemListener()到注冊(cè)ItemListener對(duì)象中。允許監(jiān)聽器在程序運(yùn)轉(zhuǎn)過程中監(jiān)聽組件能否有鼠標(biāo)鍵事件ItemEvent對(duì)象發(fā)生。實(shí)現(xiàn)ItemListener接口的一切方法,提供事件發(fā)生的詳細(xì)處置方法。常用的事件處置ItemEvent的常用方法方 法功 能Object getItem()獲取引發(fā)事件的選項(xiàng)ItemSelectable getItemSelectable()獲取事件源i

41、nt getStateChange()獲取變化的狀態(tài)ItemListener的方法方 法功 能void itemStateChanged(ItemEvent)項(xiàng)目狀態(tài)發(fā)生變化調(diào)動(dòng)常用的事件處置5.焦點(diǎn)事件處置焦點(diǎn)事件是由于鍵盤或鼠標(biāo)或程序本身形狀的變化導(dǎo)致一些低級(jí)組件如JButton獲得或失去鍵盤的焦點(diǎn)而產(chǎn)生。對(duì)于焦點(diǎn)事件有兩種類型:耐久性和暫時(shí)性。耐久性的焦點(diǎn)事件是指焦點(diǎn)從一個(gè)組件到另外一個(gè)組件;而暫時(shí)性的焦點(diǎn)事件是指由于操作的緣由組件暫時(shí)失去焦點(diǎn),但是隨著操作終了組件又會(huì)恢復(fù)焦點(diǎn)。常用的事件處置 焦點(diǎn)事件處置涉及到事件類FocusEvent和監(jiān)聽器接口FocusListener。利用它們可

42、以實(shí)現(xiàn)焦點(diǎn)事件的詳細(xì)步驟如下: 組件經(jīng)過方法addFocusListener()到注冊(cè)FocusListener中。允許監(jiān)聽器在程序運(yùn)轉(zhuǎn)過程中監(jiān)聽組件能否有鼠標(biāo)鍵事件FocusEvent對(duì)象發(fā)生。 實(shí)現(xiàn)FocusListener接口的一切方法,提供事件發(fā)生的詳細(xì)處置方法。常用的事件處置FocusEvent的常見方法方 法功 能Component getOppositeComponent() 獲取焦點(diǎn)變化關(guān)聯(lián)的其他組件boolean isTemporary() 獲取焦點(diǎn)事件的類型FocusListener的方法方 法功 能void focusGained(FocusEvent)組件獲取焦點(diǎn)時(shí)調(diào)用

43、void focusLost(FocusEvent)組件失去焦點(diǎn)時(shí)調(diào)用常用的事件處置菜單事件處置菜單是運(yùn)用軟件經(jīng)常運(yùn)用的界面組件。用戶可以選擇菜單項(xiàng)來實(shí)現(xiàn)某種功能。在詳細(xì)對(duì)菜單處置可以經(jīng)過菜單項(xiàng)的類型不同而展開。假設(shè)菜單項(xiàng)是屬于JMenuItem對(duì)象,對(duì)這種菜單項(xiàng)普通可以經(jīng)過點(diǎn)擊動(dòng)作來激活動(dòng)作事件,所以可以用動(dòng)作事件處置的方式來實(shí)現(xiàn)。假設(shè)菜單項(xiàng)是JCheckBoxMenuItem對(duì)象,那么可以采用選項(xiàng)事件處置的方式進(jìn)展處置。要是菜單項(xiàng)是JRadioButtonMenuItem對(duì)象可以根據(jù)詳細(xì)要求,可以選擇用動(dòng)作事件或選項(xiàng)事件處置。 2022-1-1768處置鼠標(biāo)事件處置鼠標(biāo)事件 鼠標(biāo)事件可以被

44、鼠標(biāo)事件可以被GUI組件捕獲到組件捕獲到 根身手件監(jiān)聽器的接口根身手件監(jiān)聽器的接口 MouseListener MouseMotionListener MouseWheelListener2022-1-1769例如例如【例【例8-11】J_Button1.java,鼠標(biāo)點(diǎn)擊事件處置例程鼠標(biāo)點(diǎn)擊事件處置例程2022-1-1770例如例如【例【例8-12】J_Button2.java,鼠標(biāo)點(diǎn)擊事件處置例程,修正為匿名類鼠標(biāo)點(diǎn)擊事件處置例程,修正為匿名類2022-1-1771例如例如【例【例8-13】J_Draw.java,鼠標(biāo)畫畫例程鼠標(biāo)畫畫例程事件適配器 實(shí)現(xiàn)事件處置時(shí),用戶有時(shí)只定義監(jiān)聽器接口

45、中對(duì)事件處置的部分方法,對(duì)于其他并沒有詳細(xì)的定義。在這種情況下,可以思索運(yùn)用事件適配器來處置事件。事件適配器就是一個(gè)可以兼容監(jiān)聽器接口的接口,它可以提供兼容監(jiān)聽器接口的默許一切方法。 事件適配器的一個(gè)最主要的運(yùn)用,就是可以簡(jiǎn)化監(jiān)聽器接口不用要的事件處置。比如,MouseListener接口有5個(gè)方法,假設(shè)在詳細(xì)編程的時(shí)候只需求其中的一個(gè)方法,那么就可以定義一個(gè)事件適配器來實(shí)現(xiàn)這個(gè)特定的方法。另外,它可以經(jīng)過與其他類的組合,設(shè)置一定的任務(wù)方式,實(shí)現(xiàn)特定的功能。 2022-1-1773事件適配器事件適配器 事件適配器類事件適配器類(Adapter) 只實(shí)現(xiàn)接口所需求處置的方法只實(shí)現(xiàn)接口所需求處置的方法經(jīng)過覆蓋經(jīng)過覆蓋 對(duì)于接口中的其它方法對(duì)于接口中的其它方法: 系統(tǒng)會(huì)提供默許的方系統(tǒng)會(huì)提供默許的方法法(方法體為空方法體為空) 事件適配器類與事件監(jiān)聽器接口的區(qū)別事件適配器類與事件監(jiān)聽器接口的區(qū)別? 利用事件適配器類,只需實(shí)現(xiàn)所需處置的方法利用事件適配器類,只需實(shí)現(xiàn)所需處置的方法 利用事件監(jiān)聽器接口,必需實(shí)現(xiàn)一切的方法利用事件監(jiān)聽器接口,必需實(shí)現(xiàn)一切的方法 事件適配器類與事件監(jiān)聽器接口的執(zhí)行效率事件適配器類與事件監(jiān)聽器接口的執(zhí)行效率? 利用事件適配器類處置事件,并不能提高執(zhí)行利用事件適配器類處置事件,并不能提高執(zhí)行效率效率2022-1-1774事件適配器類與事件監(jiān)聽器接口事件適配器類與

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論