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