




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
14-1月-23第1
頁(yè)注意:開始用功了!14-1月-23第2
頁(yè)配合例子源代碼一起使用Powerpoint制作:耿祥義張躍平JavaSwing圖形用戶界面《Java程序設(shè)計(jì)教學(xué)做一體化教程》
第9章14-1月-23第3
頁(yè)主要內(nèi)容14-1月-23第4
頁(yè)9.1JavaSwing概述
9.1.1核心知識(shí)_1Java提供了強(qiáng)大的用于開發(fā)桌面程序的API,這些API在javax.swing包中。JavaSwing不僅為桌面程序設(shè)計(jì)提供了強(qiáng)大的支持,而且JavaSwing中的許多設(shè)計(jì)思想對(duì)于掌握面向?qū)ο缶幊淌欠浅S幸饬x的。1.GUI圖形用戶界面(GraphicsUserInterface,GUI)程序可以讓用戶和程序之間方便地進(jìn)行交互。JDK1.2增加了javax.swing包,該包提供了功能更為強(qiáng)大的用來(lái)設(shè)計(jì)GUI程序的類,例如,JButton、JTextField、Box等。14-1月-23第5
頁(yè)
9.1.1核心知識(shí)
_22.容器和組件學(xué)習(xí)GUI編程時(shí),必須很好地理解掌握容器類(Container)和組件類(Component)兩個(gè)概念。◆Java把Component類的子類或間接子類創(chuàng)建的對(duì)象稱為一個(gè)組件?!鬔ava把Container的子類或間接子類創(chuàng)建的對(duì)象稱為一個(gè)容器。◆可以向容器添加組件。Container類提供了一個(gè)public方法:add(Componentc),一個(gè)容器可以調(diào)用這個(gè)方法將組件c添加到該容器中?!羧萜髡{(diào)用removeAll()方法可以移掉容器中的全部組件;調(diào)用remove(Componentc)方法可以移掉容器中參數(shù)c指定的組件?!羧萜鞅旧硪彩且粋€(gè)組件,因此可以把一個(gè)容器添加到另一個(gè)容器中實(shí)現(xiàn)容器的嵌套?!裘慨?dāng)容器添加新的組件或移掉組件時(shí),應(yīng)當(dāng)讓容器調(diào)用validate()方法,以保證容器中的組件能正確顯示出來(lái)。java.awt和javax.swing包中一部分類的層次關(guān)系的UML類圖如圖9.1。14-1月-23第6
頁(yè)圖9.1Component類的部分子類
14-1月-23第7
頁(yè)
9.1.2能力目標(biāo)
掌握組件和容器的關(guān)系,能將組件添加到容器中。
14-1月-23第8
頁(yè)
9.1.3任務(wù)驅(qū)動(dòng)將下列Application9_1.java中的【代碼】替換為程序代碼。
程序運(yùn)行效果如圖9.2。14-1月-23第9
頁(yè)任務(wù)小結(jié)本章在講解GUI編程時(shí),避免羅列大量方法,所以在學(xué)習(xí)本章時(shí),讀者要善于查閱Java提供的類庫(kù)幫助文檔,例如下載Java類庫(kù)幫助文檔:jdk-7-doc.zip。14-1月-23第10
頁(yè)9.2窗口
9.2.1核心知識(shí)_1
1.底層容器JFrameJFrame創(chuàng)建的容器稱為窗口(窗體),是GUI的應(yīng)用程序提供的一個(gè)能和操作系統(tǒng)直接交互的容器,該容器可以被直接顯示、繪制在操作系統(tǒng)所控制的平臺(tái)上(該平臺(tái)被習(xí)慣稱為桌面),比如顯示器上。
JDialog類的實(shí)例也是一個(gè)底層容器,通常所稱的對(duì)話框,見圖9.1的右半部分。其他組件必須被添加到底層容器中,以便借助底層容器和操作系統(tǒng)進(jìn)行信息交互。14-1月-23第11
頁(yè)
9.2.1核心知識(shí)
_22.JFrame常用方法
◆
JFrame()創(chuàng)建一個(gè)無(wú)標(biāo)題的窗口。◆JFrame(Strings)創(chuàng)建標(biāo)題為s的窗口。◆
publicvoidsetSize(intwidth,intheight)設(shè)置窗口的大小?!?/p>
publicvoidsetLocation(intx,inty)設(shè)置窗口的位置,默認(rèn)位置是(0,0)?!?/p>
publicvoidsetResizable(booleanb)設(shè)置窗口是否可調(diào)整大小,默認(rèn)可調(diào)整大小?!?/p>
publicvoidsetExtendedState(intstate)設(shè)置窗口的擴(kuò)展?fàn)顟B(tài),其中參數(shù)state取JFrame類中的類常量,見page188.◆
publicvoidsetDefaultCloseOperation(intoperation)該方法用來(lái)設(shè)置單擊窗體右上角的關(guān)閉圖標(biāo)后,程序會(huì)做出怎樣的處理。其中的參數(shù)operation取JFrame類中的int型static常量(見page188),程序根據(jù)參數(shù)operation取值,做出不同的處理:14-1月-23第12
頁(yè)
9.2.2能力目標(biāo)
能用JFrame類或子類創(chuàng)建窗口。14-1月-23第13
頁(yè)
9.2.3任務(wù)驅(qū)動(dòng)將下列JFrameButton.java和Application9_2.java中的【代碼】替換為程序代碼。程序運(yùn)行效果如圖9.3。
14-1月-23第14
頁(yè)
任務(wù)
小結(jié)在編寫JFrame子類時(shí),子類不僅繼承了JFrame的方法和成員變量,而且子類根據(jù)需要可以增加新的成員變量。需要注意的是,窗口默認(rèn)地被系統(tǒng)添加到顯示器屏幕上,因此不允許將一個(gè)窗口添加到另一個(gè)容器中。窗口在設(shè)置背景顏色的方式和其他組件不同,窗口直接調(diào)用setBackground(Colorc)無(wú)法成功設(shè)置窗口的背景顏色,需要讓窗口自帶的內(nèi)容面板設(shè)置背景顏色。窗口調(diào)用getContentPane()返回自帶的內(nèi)容面板的引用。下列代碼將窗口window的背景顏色設(shè)置成黃色:
Containercon=window.getContentPane();
//窗口返回自帶的內(nèi)容面板
con.setBackground(Color.yellow);//內(nèi)容面板,即窗口設(shè)置背景色為黃色
JFrame有自己獨(dú)有的方法也有很多從父類繼承的方法,建議查詢類庫(kù)幫助文檔(jdk-7-doc.zip)了解這些方法。
14-1月-23第15
頁(yè)9.3菜單條、菜單與菜單項(xiàng)
9.3.1核心知識(shí)菜單條、菜單、菜單項(xiàng)是窗口常用的組件,菜單放在菜單條里,菜單項(xiàng)放在菜單里。1.菜單條ponent類的子類JMenubar負(fù)責(zé)創(chuàng)建菜單條,即JMenubar的一個(gè)實(shí)例就是一個(gè)菜單條。JFrame類有一個(gè)將菜單條放置到窗口中的方法:setJMenuBar(JMenuBarbar);該方法將菜單條添加到窗口的頂端,2.菜單ponent類的子類JMenu負(fù)責(zé)創(chuàng)建菜單,即JMenu的一個(gè)實(shí)例就是一個(gè)菜單。3.菜單項(xiàng)ponent類的子類JMenuItem負(fù)責(zé)創(chuàng)建菜單項(xiàng),即JMenuItem的一個(gè)實(shí)例就是一個(gè)菜單項(xiàng)。14-1月-23第16
頁(yè)
9.3.2能力目標(biāo)
能創(chuàng)建帶菜單的窗口。14-1月-23第17
頁(yè)
9.3.3任務(wù)驅(qū)動(dòng)將下列JFrameMenu.java中的【代碼】替換為程序代碼。
Application9_3.java
程序運(yùn)行效果如圖9.4。14-1月-23第18
頁(yè)
任務(wù)
小結(jié)(1)JMenu是JMenuItem的子類,因此菜單本身也是一個(gè)菜單項(xiàng),當(dāng)把一個(gè)菜單看作菜單項(xiàng)添加到某個(gè)菜單中時(shí),稱這樣的菜單為子菜單。(2)為了使菜單項(xiàng)有一個(gè)圖標(biāo),可以用圖標(biāo)類Icon聲明一個(gè)圖標(biāo),然后使用其子類ImageIcon類創(chuàng)建一個(gè)圖標(biāo),如:Iconicon=newImageIcon("a.gif");然后菜單項(xiàng)調(diào)用setIcon(Iconicon)方法將圖標(biāo)設(shè)置為icon。(3)可以為菜單設(shè)置“Alt_鍵”的鍵盤操作方式,例如菜單MenuFile設(shè)置“Alt_F”的鍵盤操作方式代碼是:menuFile.setMnemonic('F');(4)可以為菜單項(xiàng)設(shè)置兩種鍵盤操作方式:使用或不使用Ctrl鍵。
詳細(xì)設(shè)置見page19214-1月-23第19
頁(yè)9.4常用組件
9.4.1核心知識(shí)1.文本框ponent的子類JTextField創(chuàng)建文本框,允許用戶在文本框中輸入單行文本。2.文本區(qū)ponent的子類JTexArea創(chuàng)建文本區(qū),允許用戶在文本區(qū)中輸入多行文本。3.按鈕ponent的子類JButton類用來(lái)創(chuàng)建按鈕,允許用戶單擊按鈕。4.標(biāo)簽ponent的子類JLabel類用來(lái)創(chuàng)建標(biāo)簽,標(biāo)簽為用戶提供信息提示。5.選擇框ponent的子類JCheckBox類用來(lái)創(chuàng)建選擇框,為用戶提供多項(xiàng)選擇。選擇框的右面有個(gè)名字,并提供兩種狀態(tài),一種是選中,另一種是未選中,用戶通過(guò)單擊該組件切換狀態(tài)。6.單選按鈕ponent的子類JRadioButton類用來(lái)創(chuàng)建單項(xiàng)選擇框,為用戶提供單項(xiàng)選擇。7.下拉列表ponent的子類boBox類用來(lái)創(chuàng)建下拉列表,為用戶提供單項(xiàng)選擇。8.密碼框ponent的子類JPasswordField創(chuàng)建密碼框。14-1月-23第20
頁(yè)
9.4.2能力目標(biāo)
在窗口中添加常用組件,掌握這些常用組件的常用構(gòu)造方法。
14-1月-23第21
頁(yè)
9.4.3任務(wù)驅(qū)動(dòng)仔細(xì)閱讀ComponentInWindow.java,并注意程序的運(yùn)行效果Application9_4.java
如圖9.5所示。14-1月-23第22
頁(yè)
任務(wù)
小結(jié)1)JTextField類的主要方法更多方法見196◆JTextField(intx)如果使用這個(gè)構(gòu)造方法創(chuàng)建文本框?qū)ο?,可以在文本框中輸入若干個(gè)字符,文本框的可見字符個(gè)數(shù)由參數(shù)x指定?!鬔TextField(Strings)如果使用這個(gè)構(gòu)造方法創(chuàng)建文本框?qū)ο螅瑒t文本框的初始字符串為s,可以在文本框中輸入若干個(gè)字符。2)JButton類的主要方法◆publicJButton(Stringtext)創(chuàng)建名字是text的按鈕。◆publicJButton(Iconicon)創(chuàng)建帶有圖標(biāo)icon的按鈕。3)JCheckBox類的主要方法◆publicJCheckBox()創(chuàng)建一個(gè)沒有名字的復(fù)選框,初始狀態(tài)是未選中。◆publicJCheckBox(Stringtext)創(chuàng)建一個(gè)名字是text的復(fù)選框,初始狀態(tài)是未選中。4)Box類的主要方法◆publicboBox()使用該構(gòu)造方法創(chuàng)建一個(gè)沒有選項(xiàng)下拉列表。◆publicvoidaddItem(Objectitem)下拉列表調(diào)用該方法增加選項(xiàng)。5)JTextArea類的主要方法◆publicvoidcopy()將文本區(qū)中選中的內(nèi)容復(fù)制到系統(tǒng)的剪貼板。◆publicvoidcut()將文本區(qū)中選中的內(nèi)容剪切到系統(tǒng)的剪貼板。14-1月-23第23
頁(yè)9.5容器與布局
9.5.1核心知識(shí)_11.常用容器ponent專門提供了一些經(jīng)常用來(lái)添加組件的容器。相對(duì)于JFrame底層容器,本節(jié)提到的容器被習(xí)慣地稱為中間容器,中間容器必須被添加到底層容器中才能發(fā)揮作用?!鬔Panel面板經(jīng)常使用JPanel創(chuàng)建一個(gè)面板,再向這個(gè)面板添加組件,然后把這個(gè)面板添加到其它容器中。JPanel面板的默認(rèn)布局是FlowLayout布局?!魸L動(dòng)窗格JScrollPane滾動(dòng)窗格只可以添加一個(gè)組件,可以把一個(gè)組件放到一個(gè)滾動(dòng)窗格中,然后通過(guò)滾動(dòng)條來(lái)觀看該組件?!舨鸱执案馢SplitPane拆分窗格就是被分成兩部分的容器。拆分窗格有兩種類型:水平拆分和垂直拆分。JSplitPane的兩個(gè)常用的構(gòu)造方法:JSplitPane(intponentponentc)JSplitPane(inta,booleanponentponentd)14-1月-23第24
頁(yè)
9.5.1核心知識(shí)
_22.常用布局容器添加組件時(shí),希望控制組件的位置。容器使用布局策略安排組件的位置。容器可以使用方法setLayout(布局對(duì)象);設(shè)置自己的布局。負(fù)責(zé)創(chuàng)建布局對(duì)象的類主要是java.awt包中的FlowLayout、BorderLayout、GridLayout等布局類?!鬎lowLayout布局FlowLayout類的一個(gè)常用構(gòu)造方法如下:FlowLayout();該構(gòu)造方法可以創(chuàng)建一個(gè)居中對(duì)齊的布局對(duì)象。例如:FlowLayoutflow=newFlowLayout();如果一個(gè)容器con使用flow布局con.setLayout(flow);con可以使用Container類提供的add方法將組件順序地添加到容器中◆
BorderLayout布局
BorderLayout布局是Window型容器的默認(rèn)布局,例如JFrame、JDialog的默認(rèn)布局都是BorderLayout布局。◆
GridLayout布局
GridLayout布局可以將容器劃分成由m行、n列交叉形成的m×n個(gè)網(wǎng)格。14-1月-23第25
頁(yè)9.5.2能力目標(biāo)
能使用JPanel容器和常見的布局策略
。14-1月-23第26
頁(yè)9.5.3任務(wù)驅(qū)動(dòng)將下列WinGid.java中的【代碼】替換為程序代碼。Application
9_5.java
程序運(yùn)行效果如圖9.6。14-1月-23第27
頁(yè)
任務(wù)
小結(jié)
GridLayout布局中每個(gè)網(wǎng)格都是相同大小并且強(qiáng)制組件與網(wǎng)格的大小相同,使得容器中的每個(gè)組件也都是相同的大小,顯得很不自然。為了克服這個(gè)缺點(diǎn),可以使用容器嵌套。一個(gè)容器使用GridLayout布局將容器分為3行1列的網(wǎng)格,那么可以把另一個(gè)容器添加到某個(gè)網(wǎng)格中,而添加的這個(gè)容器又可以設(shè)置為GridLayout布局、FlowLayout布局或BorderLayout布局等。利用這種嵌套方法,可以設(shè)計(jì)出符合一定需要的布局。14-1月-23第28
頁(yè)9.6ActionEvent事件
9.6.1核心知識(shí)_ActionEvent事件源
1.ActionEvent事件源
文本框、按紐、菜單項(xiàng)、密碼框和單選按鈕都可以觸發(fā)ActionEvent事件,即都可以成為ActionEvent事件的事件源。對(duì)于注冊(cè)了監(jiān)視器的文本框,在文本框獲得輸入焦點(diǎn)后,如果用戶按回車鍵,就會(huì)觸發(fā)ActionEvent事件(Java運(yùn)行環(huán)境會(huì)自動(dòng)用ActionEvent類創(chuàng)建一個(gè)對(duì)象,表示發(fā)生了ActionEvent事件)。對(duì)于注冊(cè)了監(jiān)視器的按紐,如果用戶按單擊按紐,就會(huì)觸發(fā)ActionEvent事件。對(duì)于注冊(cè)了監(jiān)視器的菜單項(xiàng),如果用戶按選中該菜單項(xiàng),就會(huì)觸發(fā)ActionEvent事件。對(duì)于注冊(cè)了監(jiān)視器的單選按紐,如果用戶按選擇單選按紐,就會(huì)觸發(fā)ActionEvent事件。14-1月-23第29
頁(yè)
9.6.1核心知識(shí)
_注冊(cè)ActionListener監(jiān)視器
2.注冊(cè)ActionListener監(jiān)視器
Java規(guī)定能觸發(fā)ActionEvent事件的組件使用方法:addActionListener(ActionListenerlisten)將實(shí)現(xiàn)ActionListener接口的類的實(shí)例注冊(cè)為事件源的監(jiān)視器,就是說(shuō),Java提供的這個(gè)方法的參數(shù)是接口類型。14-1月-23第30
頁(yè)
9.6.1核心知識(shí)
_ActionListener接口
3.ActionListener接口
ActionListener接口在java.awt.event包中,該接口中只有一個(gè)方法:publicvoidactionPerformed(ActinEvente)事件源觸發(fā)ActionEvent事件后,監(jiān)視器調(diào)用實(shí)現(xiàn)的接口中的方法:
actionPerformed(ActinEvente)對(duì)發(fā)生的事件作出處理。當(dāng)監(jiān)視器調(diào)用actionPerformed(ActinEvente)方法時(shí),ActionEvent類事先創(chuàng)建的事件對(duì)象就會(huì)傳遞給該方法的參數(shù)e。
14-1月-23第31
頁(yè)
9.6.1核心知識(shí)
_ActionEvent類中的方法
4.ActionEvent類有如下常用的方法:◆publicObjectgetSource()該方法是從Event繼承的方法,ActionEven事件對(duì)象調(diào)用該方法可以獲取發(fā)生ActionEvent事件的事件源對(duì)象的引用?!魀ublicStringmand()ActionEvent對(duì)象調(diào)用該方法可以獲取發(fā)生ActionEvent事件時(shí),和該事件相關(guān)的一個(gè)“命令”字符串,對(duì)于文本框,當(dāng)發(fā)生ActionEvent事件時(shí),默認(rèn)的“命令”字符串是文本框中的文本;對(duì)于按鈕,就是按鈕上的名字。14-1月-23第32
頁(yè)9.6.2能力目標(biāo)
能處理ActionEvent事件。14-1月-23第33
頁(yè)9.6.3任務(wù)驅(qū)動(dòng)將下列WindowActionEvent.java中的【代碼】替換為程序代碼。Application9_6.java
TextFiledListen.java
ButtonListen.java運(yùn)行效果如圖9.7。14-1月-23第34
頁(yè)
任務(wù)
小結(jié)◆授權(quán)模式
Java的事件處理是基于授權(quán)模式,即事件源調(diào)用方法將某個(gè)對(duì)象注冊(cè)為自己的監(jiān)視器?!艚涌诨卣{(diào)
Java語(yǔ)用接口回調(diào)技術(shù)來(lái)處理事件,事件源注冊(cè)監(jiān)視器的方法:addXXXListener(XXXListenerlistener)中的參數(shù)是一個(gè)XXXListener接口,listener可以引用任何實(shí)現(xiàn)了XXXListener接口的類所創(chuàng)建的對(duì)象,當(dāng)事件源發(fā)生事件時(shí),接口listener立刻回調(diào)被類實(shí)現(xiàn)的XXXListener接口中的某個(gè)方法。從方法綁定角度看,Java運(yùn)行系統(tǒng)要求監(jiān)視器必須綁定某些方法來(lái)處理事件,這就需要用接口來(lái)達(dá)到此目的,即將某種事件的處理綁定到對(duì)應(yīng)的接口,即綁定到接口中的方法,也就是說(shuō),當(dāng)事件源觸發(fā)事件發(fā)生后,監(jiān)視器準(zhǔn)確知道去調(diào)用哪個(gè)方法(自動(dòng)去調(diào)用的)。◆事件處理的示意圖簡(jiǎn)單的說(shuō),Java要求監(jiān)視器必須和一個(gè)專用于處理事件的方法實(shí)施綁定,為了達(dá)到此目的,要求創(chuàng)建監(jiān)視器類必須實(shí)現(xiàn)Java規(guī)定的接口,該接口中有專用于處理事件的方法。事件處理模式如圖9.8所示。14-1月-23第35
頁(yè)圖9.8處理事件示意圖
14-1月-23第36
頁(yè)9.6.4實(shí)踐環(huán)節(jié)
仔細(xì)調(diào)試下列代碼,特別注意程序是怎樣將文本區(qū)的引用傳遞給監(jiān)視器的。
Application9_7.java
WindowItem.java
Listen.java
14-1月-23第37
頁(yè)9.7ItemEvent事件
9.7.1核心知識(shí)_ItemEvent事件源
1.ItemEvent事件源
選擇框、下拉列表都可以觸發(fā)ItemEvent事件。選擇框提供兩種狀態(tài),一種是選中,另一種是未選中,對(duì)于注冊(cè)了監(jiān)視器的選擇框,當(dāng)用戶的操作使得選擇框從未選中狀態(tài)變成選中狀態(tài)或從選中狀態(tài)變成未選中狀態(tài)時(shí)就觸發(fā)ItemEvent事件;對(duì)于注冊(cè)了監(jiān)視器的下拉列表,如果用戶按選中下拉列表中的某個(gè)選項(xiàng),就會(huì)觸發(fā)ItemEvent事件。
14-1月-23第38
頁(yè)
9.7.1核心知識(shí)
_注冊(cè)監(jiān)視器
2.注冊(cè)監(jiān)視器
能觸發(fā)ItemEvent事件的組件使用
addItemListener(ItemListenerlisten)將實(shí)現(xiàn)ItemListener接口的類的實(shí)例注冊(cè)為事件源的監(jiān)視器。14-1月-23第39
頁(yè)
9.7.1核心知識(shí)
_ItemListener接口
3.ItemListener接口
ItemListener接口在java.awt.event包中,該接口中只有一個(gè)方法:publicvoiditemStateChanged(ItemEvente)事件源觸發(fā)ItemEvent事件后,監(jiān)視器調(diào)用實(shí)現(xiàn)的接口中的itemStateChanged(ItemEvente)方法對(duì)發(fā)生的事件作出處理。當(dāng)監(jiān)視器調(diào)用itemStateChanged(ItemEvente)方法時(shí),ItemEvent類事先創(chuàng)建的事件對(duì)象就會(huì)傳遞給該方法的參數(shù)e。ItemEvent事件對(duì)象除了可以使用getSource()方法返回發(fā)生Itemevent事件的事件源外,也可以使用getItemSelectable()方法返回發(fā)生Itemevent事件的事件源。
14-1月-23第40
頁(yè)9.7.2能力目標(biāo)
能同時(shí)處理ActionEvent和ItemEvent兩種事件。14-1月-23第41
頁(yè)9.7.3任務(wù)驅(qū)動(dòng)將下列WindowOperation.java中的【代碼】替換為程序代碼。
Application9_8.java
OperatorListener.java
ComputerListener.java
運(yùn)行效果如圖9.9。14-1月-23第42
頁(yè)
任務(wù)
小結(jié)當(dāng)兩個(gè)監(jiān)視器需要協(xié)同工作時(shí),需要將一個(gè)監(jiān)視器的引用傳遞給另一個(gè)監(jiān)視器。本任務(wù)中負(fù)責(zé)計(jì)算任務(wù)的監(jiān)視器computer在進(jìn)行計(jì)算時(shí),需要監(jiān)視器operator提供運(yùn)算符號(hào)(operator負(fù)責(zé)獲取用戶用下列表選擇的運(yùn)算符號(hào)).要把computer的引用傳遞給operator,如任務(wù)WindowOperation.java中的代碼
operator.setWorkTogether(computer);以便operator把獲取的運(yùn)算符號(hào)交給computer,如OperatorListener.java中的如下代碼:publicvoiditemStateChanged(ItemEvente){Stringfuhao=choice.getSelectedItem().toString();
computer.setFuhao(fuhao);
}
14-1月-23第43
頁(yè)9.8FocusEvent事件
9.8.1核心知識(shí)_FocusEvent事件源
1.FocusEvent事件源
組件可以觸發(fā)焦點(diǎn)事件。當(dāng)組件獲得焦點(diǎn)監(jiān)視器后,如果組件從無(wú)輸入焦點(diǎn)變成有輸入焦點(diǎn)或從有輸入焦點(diǎn)變成無(wú)輸入焦點(diǎn)都會(huì)觸發(fā)FocusEvent事件。14-1月-23第44
頁(yè)
9.8.1核心知識(shí)
_注冊(cè)監(jiān)視器
2.注冊(cè)監(jiān)視器
能觸發(fā)ItemEvent事件的組件使用
addItemListener(ItemListenerlisten)將實(shí)現(xiàn)ItemListener接口的類的實(shí)例注冊(cè)為事件源的監(jiān)視器。14-1月-23第45
頁(yè)
9.8.1核心知識(shí)
_FocusListener接口
3.FocusListener接口
FocusListener接口兩個(gè)方法:
publicvoidfocusGained(FocusEvente)publicvoidfocusLost(FocusEvente)當(dāng)組件從無(wú)輸入焦點(diǎn)變成有輸入焦點(diǎn)觸發(fā)FocusEvent事件時(shí),監(jiān)視器調(diào)用類實(shí)現(xiàn)接口中的focusGained(FocusEvente)方法;當(dāng)組件從有輸入焦點(diǎn)變成無(wú)輸入焦點(diǎn)觸發(fā)FocusEvent事件時(shí),監(jiān)視器調(diào)用類實(shí)現(xiàn)接口中的focusLost(FocusEvente)方法。14-1月-23第46
頁(yè)9.8.2能力目標(biāo)
能處理FocusEvent兩種事件。14-1月-23第47
頁(yè)9.8.3任務(wù)驅(qū)動(dòng)將下列WinGrid.java中的【代碼】替換為程序代碼。
Application9_9.java
BackFocusListener.java
運(yùn)行效果如圖9.10。14-1月-23第48
頁(yè)
任務(wù)
小結(jié)用戶通過(guò)單擊組件可以使得該組件有輸入焦點(diǎn),同時(shí)也使得其它組件變成無(wú)輸入焦點(diǎn)。另外,也可以在編寫代碼時(shí)讓一個(gè)組件調(diào)用publicbooleanrequestFocusInWindow()方法獲得輸入焦點(diǎn)。
14-1月-23第49
頁(yè)9.9MouseEvent事件
9.9.1核心知識(shí)_MouseEvent事件源
1.MouseEvent事件源
任何組件上都可以發(fā)生鼠標(biāo)事件,對(duì)于注冊(cè)了監(jiān)視MouseEvent事件監(jiān)視器的組件,如果鼠標(biāo)進(jìn)入該組件、退出該組件、在該組件上方單擊鼠標(biāo)、移動(dòng)鼠標(biāo)、拖動(dòng)鼠標(biāo)等都觸發(fā)該組件發(fā)生鼠標(biāo)事件,即導(dǎo)致MouseEvent類自動(dòng)創(chuàng)建一個(gè)事件對(duì)象。14-1月-23第50
頁(yè)
9.9.1核心知識(shí)
_注冊(cè)兩種監(jiān)視器
2.注冊(cè)兩種監(jiān)視器
(1)MouseListener監(jiān)視器組件使用addMouseListener(MouseListenerlistener)將實(shí)現(xiàn)MouseListener接口的類的實(shí)例注冊(cè)為事件源的監(jiān)視器。使用MouseListene監(jiān)視器可以處理以下5種操作觸發(fā)的鼠標(biāo)事件:在事件源上按下鼠標(biāo)鍵。在事件源上釋放鼠標(biāo)鍵。在事件源上擊鼠標(biāo)鍵。鼠標(biāo)進(jìn)入事件源。鼠標(biāo)退出事件源。(2)MouseMotionListener監(jiān)視器組件使用addMouseMotionListener(MouseMotionListenerlistener)將實(shí)現(xiàn)MouseMotionListener接口的類的實(shí)例注冊(cè)為事件源的監(jiān)視器。使用MouseMotionListener監(jiān)視器可以處理以下兩種操作觸發(fā)的鼠標(biāo)事件:在事件源上拖動(dòng)鼠標(biāo)在事件源上移動(dòng)鼠標(biāo)14-1月-23第51
頁(yè)
9.9.1核心知識(shí)
_MouseListener與MouseMotionListener接口
3.MouseListener與MouseMotionListener接口
(1)MouseListener接口中的方法◆mousePressed(MouseEvent)
負(fù)責(zé)處理在組件上按下鼠標(biāo)鍵觸發(fā)的鼠標(biāo)事件(MouseEvent事件)。◆mouseReleased(MouseEvent)
負(fù)責(zé)處理在組件上釋放鼠標(biāo)鍵觸發(fā)的鼠標(biāo)事件?!?/p>
mouseEntered(MouseEvent)
負(fù)責(zé)處理鼠標(biāo)進(jìn)入組件觸發(fā)的鼠標(biāo)事件?!?/p>
mouseExited(MouseEvent)
負(fù)責(zé)處理鼠標(biāo)離開組件觸發(fā)的鼠標(biāo)事件?!鬽ouseClicked(MouseEvent)負(fù)責(zé)處理在組件上單擊鼠標(biāo)鍵觸發(fā)的鼠標(biāo)事件。(2)MouseMotionListener接口的方法◆
mouseDragged(MouseEvent)
負(fù)責(zé)處理拖動(dòng)鼠標(biāo)觸發(fā)的鼠標(biāo)事件。◆
mouseMoved(MouseEvent)
負(fù)責(zé)處理移動(dòng)鼠標(biāo)觸發(fā)的鼠標(biāo)事件。14-1月-23第52
頁(yè)
9.9.1核心知識(shí)
_MouseEvent類
4.MouseEvent類
MouseEvent事件可以使用getSource()方法返回發(fā)生MouseEvent事件的事件源。MouseEvent類中有下列幾個(gè)重要的方法:
◆
getX()獲取鼠標(biāo)指針在事件源坐標(biāo)系中的x-坐標(biāo)。
◆
getY()獲取鼠標(biāo)指針在事件源坐標(biāo)系中的y-坐標(biāo)。
◆getModifiers()獲取鼠標(biāo)的左鍵或右鍵。鼠標(biāo)的左鍵和右鍵分別使用InputEvent類中的常量BUTTON1_MASK和BUTTON3_MASK來(lái)表示?!?/p>
getClickCount()獲取鼠標(biāo)被單擊的次數(shù)?!?/p>
getSource()獲取發(fā)生鼠標(biāo)事件的事件源。14-1月-23第53
頁(yè)9.9.2能力目標(biāo)
能處理MouseEvent事件。14-1月-23第54
頁(yè)9.9.3任務(wù)驅(qū)動(dòng)將下列WindowMouse.java中的【代碼】替換為程序代碼。
Application9_10.java
MousePolce.java
運(yùn)行效果如圖9.11。14-1月-23第55
頁(yè)
任務(wù)
小結(jié)組件本身有一個(gè)默認(rèn)的坐標(biāo)系,組件的左上角的坐標(biāo)值是(0,0)。如果一個(gè)組件的寬是200,高是80,那么,該坐標(biāo)系中,x坐標(biāo)的最大值是200,y坐標(biāo)的最大值是80,如圖9.12所示意.當(dāng)鼠標(biāo)進(jìn)入按鈕,則觸發(fā)按鈕發(fā)生鼠標(biāo)事件,那么獲取的MouseEvent對(duì)象e獲取的鼠標(biāo)指針的坐標(biāo)值是在按鈕的坐標(biāo)系中的坐標(biāo)值。instanceof運(yùn)算符是Java獨(dú)有的雙目運(yùn)算符,其左面的操作元是對(duì)象,右面的操作元是類,當(dāng)左面的操作元是右面的類或其子類所創(chuàng)建的對(duì)象時(shí),instanceof運(yùn)算的結(jié)果是true,否則是false。14-1月-23第56
頁(yè)9.9.4實(shí)踐環(huán)節(jié)
下面的代碼使用坐標(biāo)變換來(lái)實(shí)現(xiàn)組件的拖動(dòng),上機(jī)調(diào)試代碼,并注意程序的運(yùn)行效果。Application9_11.java
WindowMove.java
LP.java
14-1月-23第57
頁(yè)9.10KeyEvent事件
9.10.1核心知識(shí)_KeyEvent事件源_注冊(cè)監(jiān)視器
1.KeyEvent事件源
組件可以成為KeyEvent事件源。組件使用addKeyListener方法注冊(cè)監(jiān)視器之后,如果該組件處于激活狀態(tài)時(shí),用戶敲擊鍵盤上一個(gè)鍵就導(dǎo)致這個(gè)組件觸發(fā)鍵盤事件。
2.注冊(cè)監(jiān)視器
組件使用addKeyListener(KeyListenerlisten)將實(shí)現(xiàn)KeyListener接口的類的實(shí)例注冊(cè)為事件源的監(jiān)視器。14-1月-23第58
頁(yè)
9.10.1核心知識(shí)
_KeyListener接口
3.KeyListener接口
使用KeyListener接口處理鍵盤事件,該中有如下3個(gè)方法。
◆
publicvoidkeyPressed(KeyEvente)◆publicvoidkeyTyped(KeyEvente)◆
publicvoidKeyReleased(KeyEvente)。4.鍵碼用KeyEvent類的publicintgetKeyCode()方法,可以判斷哪個(gè)鍵被按下、敲擊或釋放,getKeyCode方法返回一個(gè)鍵碼值。也可以用KeyEvent類的publicchargetKeyChar()判斷哪個(gè)鍵被按下、敲擊或釋放,getKeyChar()方法返回鍵上的字符。
表9.1是KeyEvent類的靜態(tài)常量。
14-1月-23第59
頁(yè)表9.1鍵碼表
14-1月-23第60
頁(yè)9.10.2能力目標(biāo)
能同時(shí)處理KeyEvent和FocusEvent兩種事件。14-1月-23第61
頁(yè)9.10.3任務(wù)驅(qū)動(dòng)將下列Win.java中的【代碼】替換為程序代碼。
Application9_12.java
NumberKeyListener.java
運(yùn)行效果如圖9.14。14-1月-23第62
頁(yè)
任務(wù)
小結(jié)盡管JFrame,JDialog,JPanel等容器也是組件,但不要試圖監(jiān)視這些容器上的KeyEevnt事件。因?yàn)?,某些容器,比如JFrame可能始終處于有焦點(diǎn)狀態(tài),而有些容器,比如JPanel沒有明顯的焦點(diǎn)狀態(tài)。因此,Java屏蔽了這些容器上的KeyEvent事件
。14-1月-23第63
頁(yè)9.11窗口或匿名類的實(shí)例做監(jiān)視器
9.11.1核心知識(shí)
1.窗口做監(jiān)視器能觸發(fā)事件的組件經(jīng)常位于窗口中,如果讓組件所在的窗口做為監(jiān)視器,能讓事件的處理比較方便,這是因?yàn)?,監(jiān)視器可以方便的操作窗口中的其他成員。
2.匿名類的實(shí)例做監(jiān)視器如果用內(nèi)部類的實(shí)例做監(jiān)視器,那么當(dāng)發(fā)生事件時(shí),監(jiān)視器就比較容易操作事件源所在的外嵌類中的成員,不必把監(jiān)視器需要處理的對(duì)象的引用傳遞給監(jiān)視器。14-1月-23第64
頁(yè)9.11.2能力目標(biāo)
能使用窗口以及匿名類的實(shí)例做監(jiān)視器。14-1月-23第65
頁(yè)9.11.3任務(wù)驅(qū)動(dòng)仔細(xì)閱讀下列WindowNumber.java。
Application9_13.java運(yùn)行效果如圖9.15。14-1月-23第66
頁(yè)
任務(wù)
小結(jié)事件源發(fā)生的事件傳遞到監(jiān)視器對(duì)象,這意味著要把監(jiān)視器注冊(cè)到按鈕。當(dāng)事件發(fā)生時(shí),監(jiān)視器對(duì)象將“監(jiān)視”它。在WindowNumber類中,通過(guò)把WindowNumber類的實(shí)例(窗口)的引用傳值給addActionListener()方法中的接口參數(shù),使窗口成為監(jiān)視器:button.addActionListener(this);this出現(xiàn)在構(gòu)造方法中,就代表程序中創(chuàng)建的窗口對(duì)象win,即代表在Application.java中使用WindowNumber類創(chuàng)建的win窗口。14-1月-23第67
頁(yè)9.12對(duì)話框
9.12.1核心知識(shí)_11.消息對(duì)話框消息對(duì)話框是有模式對(duì)話框??梢杂胘avax.swing包中的JOptionPane類的靜態(tài)方法:publicstaticvoidshowMessageDialog(Componentponent,Stringmessage,Stringtitle,intmessageType)創(chuàng)建一個(gè)消息對(duì)話框,其中參數(shù)ponent指定對(duì)話框可見時(shí)的位置,如果ponent為null,對(duì)話框會(huì)在屏幕的正前方顯示出來(lái);如果組件ponent不空,對(duì)話框在組件ponent的正前面居中顯示。message指定對(duì)話框上顯示的消息;title指定對(duì)話框的標(biāo)題;messageType取值是JOptionPane中的類常量,見page223。這些值可以給出對(duì)話框的外觀,例如取值JOptionPane.WARNING_MESSAGE時(shí),對(duì)話框的外觀上會(huì)有一個(gè)明顯的“!”符號(hào)。14-1月-23第68
頁(yè)9.12.1核心知識(shí)_22.輸入對(duì)話框輸入對(duì)話框含有供用戶輸入文本的文本框、一個(gè)確認(rèn)和取消按鈕,是有模式對(duì)話框。當(dāng)輸入對(duì)話框可見時(shí),要求用戶輸入一個(gè)字符串。JOptionPane類的靜態(tài)方法:publicstaticStringshowInputDialog(Componentponent,Objectmessage,Stringtitle,intmessageType)可以創(chuàng)建一個(gè)輸入對(duì)話框,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZZB 3730-2024 3D打印指甲貼片
- 2025年度租賃期滿后房屋產(chǎn)權(quán)無(wú)償轉(zhuǎn)讓協(xié)議
- 二零二五年度美容院合伙經(jīng)營(yíng)店鋪轉(zhuǎn)讓協(xié)議
- 二零二五年度輔導(dǎo)班學(xué)生安全協(xié)議及教師教學(xué)責(zé)任書
- 2025年度洗浴中心員工薪酬福利及雇傭合同
- 二零二五年度股權(quán)激勵(lì)與員工股權(quán)激勵(lì)計(jì)劃執(zhí)行合同模板
- 二零二五年度貸款合同爭(zhēng)議解決協(xié)議書
- 網(wǎng)絡(luò)游戲合作開發(fā)與運(yùn)營(yíng)協(xié)議
- 關(guān)于辦公時(shí)間調(diào)整的通知
- 房屋及土地使用權(quán)轉(zhuǎn)讓合同書
- 2024年中小學(xué)生守則修訂版
- 博覽會(huì)展位裝修及布展投標(biāo)方案技術(shù)標(biāo)
- 顧客提問(wèn)的問(wèn)題100條
- 肝膿腫教學(xué)查房課件
- 跳繩之雙腳跳教案
- 拇外翻護(hù)理課件
- 六年級(jí)英語(yǔ)教學(xué)隨筆5篇
- 讀書分享交流會(huì)《從一到無(wú)窮大》課件
- 蘇教版六年級(jí)下冊(cè)綜合實(shí)踐活動(dòng)計(jì)劃及全冊(cè)教案
- 醫(yī)療器械可用性工程文檔
- GB/T 24475-2023電梯遠(yuǎn)程報(bào)警系統(tǒng)
評(píng)論
0/150
提交評(píng)論