第7章AT組件及事件處理_第1頁
第7章AT組件及事件處理_第2頁
第7章AT組件及事件處理_第3頁
第7章AT組件及事件處理_第4頁
第7章AT組件及事件處理_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第章第章awt組件及事件處理組件及事件處理 l7.1java窗口窗口l7.2文本框文本框l7.3內(nèi)部類實例做監(jiān)視器內(nèi)部類實例做監(jiān)視器l7.4按鈕與標簽按鈕與標簽l7.5菜單項菜單項l7.6文本區(qū)文本區(qū)l7.7面板面板l7.8布局布局l7.9畫布畫布l7.10 選擇型組件選擇型組件l7.11 component類的常用方法類的常用方法l7.12 窗口事件窗口事件l7.13 鼠標事件鼠標事件l7.14 焦點事件焦點事件l7.15 鍵盤事件鍵盤事件l7.16 使用剪貼板使用剪貼板l7.17 打印打印l7.18 綜合實例綜合實例 圖形用戶界面圖形用戶界面l通過圖形用戶界面(gui:graphics u

2、ser interface),用戶和程序之間可以方便地進行交互。java的抽象窗口工具包(awt:abstract window toolkit)中包含了許多類來支持gui設計。awt由java的java.awt包提供,該包中有許多用來設計gui的組件類,如:按鈕、菜單、列表、文本框等組件類,同時它還包含窗口、面板等容器類。容器類容器類(container)和組件類和組件類(component) ljava.awt包中一部分類的層次關(guān)系如圖所示 7.1 java窗口窗口lframe類是container類的間接子類。當需要一個窗口時,可使用frame或其子類創(chuàng)建一個對象。窗口也是一個容器,可以

3、向窗口添加組件。需要注意的是,窗口默認地被系統(tǒng)添加到顯示器屏幕上,因此,不允許將一個窗口添加到另一個容器中。 1. frame常用方法l1frame() 該構(gòu)造方法可以創(chuàng)建一個無標題的窗口,窗口的默認布局為borderlayout布局。l2frame(string s) 該構(gòu)造方法可以創(chuàng)建一個標題為s的窗口,窗口的默認布局為borderlayout布局。l3public void setbounds(int a,int b,int width,int height) 窗口調(diào)用該方法可以設置出現(xiàn)在屏幕上時的初始位置是(a,b),即距屏幕左面a個像素、距屏幕上方b個像素;窗口的寬是width,高是

4、height。l4public void setsize(int width,int height) 設置窗口的大小,窗口在屏幕出現(xiàn)是默認位置是(0,0)。l5public void setvisible(boolean b) 設置窗口是可見還是不可見,窗口默認是不可見的。l6public void setresizable(boolean b) 設置窗口是否可調(diào)整大小,窗口默認是可調(diào)整大小的。2.菜單條、菜單、菜單項菜單條、菜單、菜單項 ljava.awt包中的menubar類是負責創(chuàng)建菜單條的,即menubar的一個實例就是一個菜單條。frame類有一個將菜單條放置到窗口中的方法:setm

5、enubar(menubar bar);ljava.awt包中的menu類是負責創(chuàng)建菜單的,即menu的一個實例就是一個菜單 ljava.awt包的munuitem類負責創(chuàng)建菜單項,即menuitem的一個實例就是一個菜單項 7.3 文本框文本框ljava.awt包中的類textfield類創(chuàng)建文本框l用戶可以在文本框輸入單行的文本 .textfield類的主要方法類的主要方法 ltextfield(int x) 如果使用這個構(gòu)造方法創(chuàng)建文本框?qū)ο?,文本框中的可見字符序列的長度為 x個機器字符長。文本框是可編輯的,用戶可以在文本框中輸入若干個字符。ltextfield(string s ) 如

6、果使用這個構(gòu)造方法創(chuàng)建文本框?qū)ο?,則文本框的初始字符串為s。文本框是可編輯的,可以在文本框中輸入若干個字符。lpublic void settext(string s) 文本框?qū)ο笳{(diào)用該方法可以設置文本框中的文本為參數(shù)s指定的文本,文本框中先前的文本將被清除。lpublic string gettext() 文本框?qū)ο笳{(diào)用該方法可以獲取文本框中的文本。lpublic void addactionlistener(actionlistener l) 文本框?qū)ο笳{(diào)用該方法可以向文本框增加動作監(jiān)視器(將監(jiān)視器注冊到文本框)。2.文本框上的文本框上的actionevent事件事件 l學習組件除了了解組

7、件的屬性和功能外,一個更重要的方面是學習怎樣處理組件上發(fā)生的界面事件。 l在學習處理事件時,必須很好地掌握事件源、監(jiān)視器、處理事件的接口這三個概念。 l通過處理文本框這個具體的組件上的事件,來掌握處理事件的基本原理。 java的事件處理模式的事件處理模式l事件源能夠產(chǎn)生事件的對象都可以成為事件源,如文本框、按鈕、下拉式列表等。也就是說,事件源必須是一個對象,而且這個對象必須是java認為能夠發(fā)生事件的對象。l監(jiān)視器需要一個對象對事件源進行監(jiān)視,以便對發(fā)生的事件作出處理。事件源通過調(diào)用相應的方法將某個對象作為自己的監(jiān)視器。例如,對于文本框,這個方法是:addactionlistener(監(jiān)視器)

8、;創(chuàng)建該監(jiān)視器對象的類必須聲明實現(xiàn)相應的接口創(chuàng)建該監(jiān)視器對象的類必須聲明實現(xiàn)相應的接口 l處理事件的接口在文本框獲得輸入焦點之后,如果用戶按回鍵,java運行系統(tǒng)就自動用actionevent類創(chuàng)建了一個對象,即發(fā)生了actionevent事件 當事件源發(fā)生事件時,監(jiān)視器就自動調(diào)用執(zhí)行被類實現(xiàn)的某個接口方法 處理事件示意圖處理事件示意圖 7.4按鈕與標簽按鈕與標簽l標簽的功能是只顯示文本,不能動態(tài)地編輯文本。lalel類的實例就是一個標簽.ljava.awt包中的button類是專門用來建立按鈕的。即button類創(chuàng)建的一個對象就是一個按鈕。l按鈕可以發(fā)生actionevent事件,當按鈕獲得

9、監(jiān)視器之后,用鼠標單擊按鈕,就發(fā)生actioneven事件. 7.5菜單項菜單項l單擊某個菜單項可以發(fā)生actionevent事件,因此,我們可以通過處理actionevent事件實現(xiàn)我們想要進行的操作。 l可以使用menushotcut類為菜單項設置快捷鍵,該類的一個構(gòu)造方法是: menushotcut (int key); 其中key可以取值:keyevent.vk_a keyevent.vk_z; l菜單項使用setshortcut(menushortcut k)方法來設置快捷鍵。 7.6文本區(qū)文本區(qū)ljava.awt包中的類textarea類是專門用來建立文本區(qū)的,即textarea創(chuàng)

10、建的一個對象稱做一個文本區(qū)。用戶可以在文本區(qū)輸入多行的文本。 1. textarea類主要方法類主要方法 ltextarea(int x,int y) 使用這個構(gòu)造方法創(chuàng)建文本區(qū)對象,文本框可見行數(shù)和列數(shù)數(shù)分別為x和y。文本區(qū)有水平和垂直滾動條。lpublic void settext(string s) 文本區(qū)對象調(diào)用該方法可以將文本區(qū)中的文本設置為參數(shù)s指定的文本,文本區(qū)中先前的文本將被清除。lpublic string gettext() 文本區(qū)對象調(diào)用該方法可以獲取文本區(qū)中的文本。lpublic void append(string s) 文本區(qū)對象調(diào)用該方法可以在文本區(qū)中尾加文本 .

11、laddtextlistener(textlistener) 文本區(qū)對象調(diào)用該方法可以向文本框增加文本監(jiān)視器。.文本區(qū)上的文本區(qū)上的textevent事件事件 l對于文本區(qū)事件源,可以發(fā)生textevent事件。當文本區(qū)獲得監(jiān)視器之后,在文本區(qū)域中改變文本的內(nèi)容,如鍵入字符、刪除字符時,textevent類將自動創(chuàng)建一個事件對象。l發(fā)生textevent事件的事件源獲得監(jiān)視器的方法是addtextlistener(監(jiān)視器);, 由于文本區(qū)可以發(fā)生textevent事件,所以textarea類提供了addtextlistener方法。l處理發(fā)生textevent 事件的接口是textlisten

12、er,該接口中只有一個的方法: textvaluechanged (textevent e)l創(chuàng)建文本區(qū)監(jiān)視器的類必須要實現(xiàn)textlistener接口。當文本區(qū)發(fā)生textevent事件時,監(jiān)視器將自動調(diào)用方法: textvaluechanged (textevent e) 對發(fā)生的事件作出處理。 7.7面板面板ljava.awt包的panel類是container(容器)的子類,因此panel類及其子類的實例也是一個容器,panel型容器的默認布局是flowlayout型布局。panel類創(chuàng)建的對象稱做面板,我們經(jīng)常在一個面板里添加若干個組件后,再把面板放到另一個容器里。ljava.awt

13、包中的scrollpane類也是container類的子類,因此該類創(chuàng)建的對象也是一個容器,稱為滾動面板。我們可以把一個組件放到一個滾動面板中,然后通過滾動條來觀察這個組件。與panel創(chuàng)建的容器所不同的是,scrollpane帶有滾動條,而且只能向滾動面板添加一個組件。 7.8布局布局l當把組件添加到容器中時,希望控制組件在容器中的位置,這就需要學習布局設計的知識。我們將分別介紹java.awt包中的flowlayout、borderlayout、cardlayout、gridlayout布局類和java.swing.border包中的boxlayout布局類。l容器可以使用方法: setl

14、ayout(布局對象); 來設置自己的布局。1. flowlayout布局布局 lflowlayout類創(chuàng)建的對象稱做flowlayout型布局。flowlayout型布局是panel型容器的默認布局,即panel及其子類創(chuàng)建的容器對象,如果不專門為其指定布局,則它們的布局就是flowlayout型布局。l如果一個容器使用這個flowlayout型布局,組件按照加入的先后順序從左向右排列,一行排滿之后就轉(zhuǎn)到下一行繼續(xù)從左至右排列 . 2. borderlayout布局布局 lborderlayout 布局是window型容器的默認布局,例如frame、dialog都是window類的子類,它們

15、的默認布局都是borderlayout 布局。 l如果一個容器使用這種布局,那么容器空間簡單地劃分為東、西、南、北、中五個區(qū)域,中間的區(qū)域最大。3. cardlayout 布局布局 l使用cardlayout 的容器可以容納多個組件,但是實際上同一時刻容器只能從這些組件中選出一個來顯示,就像一疊“撲克牌”每次只能顯示最上面一張一樣,這個被顯示的組件將占據(jù)所有的容器空間,依次排序。 4. gridlayout布局布局 lgridlayout的布局策略是把容器劃分成若干行乘若干列的網(wǎng)格區(qū)域,組件就位于這些劃分出來的小格中。gridlayout比較靈活,劃分多少網(wǎng)格由程序自由控制,而且組件定位也比較

16、精確l由于gridlayout布局中每個網(wǎng)格都是相同大小并且強制組件與網(wǎng)格的大小相同,使得容器中的每個組件也都是相同的大小,顯得很不自然。為了克服這個缺點,你可以使用容器嵌套。 . boxlayout布局布局 l盒式布局的容器將組件排列在一行或一列,這取決于創(chuàng)建盒式布局對象時,是否指定了是行排列還是列排列。 l使用行(列)型盒式布局的容器將組件排列在一行(列),組件按加入的先后順序從左(上)向右(下)排列,容器的兩端是剩余的空間。和flowlayou布局不同的是,使用行型盒式布局的容器只有一行(列),即使組件再多,也不會延伸到下一行(列),這些組件可能會被縮小大小,緊縮在這一行(列)中。7.9

17、畫布畫布 ljava.awt包中的類canvas負責創(chuàng)建畫布對象。創(chuàng)建畫布對象的常用辦法是用canvas的子類來創(chuàng)建畫布對象,并在子類中重寫父類的public void paint(graphics g)方法。該方法是component類的一個方法,可以在其子類中重寫這個方法,當重寫這個方法時,參數(shù)g是自動實例化的,這樣我們就可以在子類中使用 g調(diào)用相應方法,比如畫串、畫圖形、圖像等 .7.5選擇型組件選擇型組件l選擇框選擇框 選擇框提供兩種狀態(tài),一種是選中,另一種是未選中。java.awt包中的checkbox用來建立選擇框,即checkbox創(chuàng)建的一個對象就是一個選擇框。l選擇框可以發(fā)生i

18、temevent事件,發(fā)生itemevent事件的事件源獲得監(jiān)視器的方法是:additemlistener(監(jiān)視器) .l創(chuàng)建監(jiān)視器的類必須實現(xiàn)itemlistener接口,該接口中只有一個的方法。當在選擇框發(fā)生itemevent事件時,監(jiān)視器將自動調(diào)用接口方法: temstatechanged(itemevent e) 對發(fā)生的事件作出處理。 l下拉列表下拉列表 choice創(chuàng)建的一個對象稱作一個下拉列表組件,它是用戶十分熟悉的一個組件。用戶可以在下拉列表看到第一個選項和它旁邊的箭頭按鈕,當用戶單擊箭頭按鈕時,選項列表打開。 l下拉式列表可以發(fā)生itemevent事件。當下拉式列表獲得監(jiān)視器

19、之后,用戶在下拉列表選項列表中選中某個選項時就發(fā)生itemevent事件. l滾動列表滾動列表 java.awt包中的類list類建立滾動列表 .l滾動列表和下拉列表的另一不同之處是,滾動列表除了可以發(fā)生itemevent事件外,還可以發(fā)生actionevent事件。當用鼠標單擊滾動列表的某個選項后,發(fā)生itemevent事件;當用鼠標雙擊某個選項后,發(fā)生actionevent事件。 7.11 component類的常用方法類的常用方法lcomponent類是所有組件的父類,這一節(jié)介紹component類的常用方法 1.組件的顏色組件的顏色 lpublic void setbackground

20、(color c) 設置組件的背景色。lpublic void setforeground(color c) 設置組件的前景色。lpublic color getbackground() 獲取組件的背景色。lpublic color getforeground() 獲取組件的前景色。 2組件的字體組件的字體lpublic void setfont(font f) 組件調(diào)用該方法設置組件上的字體。例如,文本組件調(diào)用該方法可以設置文本組件中的字體。lpublic font getfont() 組件調(diào)用該方法獲取組件上的字體。3組件的大小與位置組件的大小與位置lpublic void setsize

21、(int width,int height) 組件調(diào)用該方法設置組件的大小,參數(shù)width指定組件的寬度,height指定組件的高度。lpublic void setlocation(int x,int y) 組件調(diào)用該方法設置組件在容器中的位置,包含該組件的容器都有默認的坐標系,容器的坐標系的左上角的坐標是(0,0),參數(shù)x,y指定該組件的左上角在容器的坐標系中的坐標,即組件距容器的左邊界 x個像素,距容器的上邊界 y 個像素。lpublic dimension getsize() 組件調(diào)用該方法返回一個dimension對象的引用,該對像實體中含有名字是width 和height的成員變量

22、,方法返回的dimension 對象的width的值就是組件的寬度、height的值就是當前組件的高度。lpublic point getlocation() 組件調(diào)用該方法返回一個point對象的引用,該對像實體中含有名字是x 和y的成員變量,方法返回的point對象的x,y的值就是組件的左上角在容器的坐標系中的x坐標和y坐標。lpublic void setbounds(int x,int y,int width,int height) 組件調(diào)用該方法設置組件在容器中的位置和組件的大小。該方法相當于setsize方法和setlocation方法的組合。lpublic rectangle g

23、etbounds() 組件調(diào)用該方法返回一個rectangle對象的引用,該對象實體中含有名字是x、y、width 和height的成員變量,方法返回的rectangle對象的x,y的值就是組件的左上角在容器的坐標系中的x坐標和y坐標,width和height的值就是當前組件的寬度和高度。4組件的激活與可見性組件的激活與可見性lpublic void setenabled(boolean b) 組件調(diào)用該方法可以設置組件是否可被激活,當參數(shù)b取值true時,組件可以被激活,當參數(shù)b取值false 時,組件不可激活。默認情況下,組件是可以被激活的。lpublic void setvisible(

24、boolean) 設置組件在該容器中的可見性,當參數(shù)b取值true時,組件在容器中可見,當參數(shù)b取值false 時,組件在容器中不可見。除了window型組件外,其它類型組件默認是可見的。5組件上的光標組件上的光標lpublic void setcursor(cursor c) 設置鼠標指向組件時的光標形狀。 l可以使用 cursor類的類方法直接獲得一個光標對象,例如:cursor c=cursor.getpredefinedcursor(cursor.hand_cursor);6paint方法與方法與repaint方法方法l調(diào)用repaint()方法時,repaint()方法會再去調(diào)用up

25、date(graphics g)方法。update(graphics g)方法也是component類中的一個方法,這個方法的功能是:清除paint()方法以前所畫的內(nèi)容,然后再調(diào)用paint方法。因此我們可以在子類中重寫update方法(即隱藏父類的方法),根據(jù)需要來清除哪些部分或保留哪些部分。7.12窗口事件窗口事件lframe是window的子類,凡是 window子類創(chuàng)建的對象都可以發(fā)生windowevent類型事件,即窗口事件。l當一個frame窗口被激活、撤消激活、打開、關(guān)閉、圖標化或撤消圖標化時,就引發(fā)了窗口事件,即windowevent創(chuàng)建一個窗口事件對象。windoweven

26、t創(chuàng)建的事件對象調(diào)用getwindow()方法可以獲取發(fā)生窗口事件的窗口。窗口使用addwindowlistener方法獲得監(jiān)視器,創(chuàng)建監(jiān)視器對象的類必須實現(xiàn)windowlistener接口,該接口中有7個不同的方法 . windowlistener接口中的方法接口中的方法lpublic void windowactivated(windowevent e) 當窗口從非激活狀態(tài)到激活時,窗口的監(jiān)視器調(diào)用該方法。lpublic void windowdeactivated(windowevent e) 當窗口激活狀態(tài)到非激活狀態(tài)時,窗口的監(jiān)視器調(diào)用該方法。lpublic void windowc

27、losing(windowevent e) 當窗口正在被關(guān)閉時,窗口的監(jiān)視器調(diào)用該方法。lpublic void windowclosed(windowevent e) 當窗口關(guān)閉后,窗口的監(jiān)視器調(diào)用該方法。lpublic void windowiconified(windowevent e) 當窗口圖標化時,窗口的監(jiān)視器調(diào)用該方法。lpublic void windowdeiconified(windowevent e) 當窗口撤消圖標化時,窗口的監(jiān)視器調(diào)用該方法。lpublic void windowopened(windowevent e) 當窗口打開時,窗口的監(jiān)視器調(diào)用該方法。2. w

28、indowadapter適配器適配器 l適配器可以代替接口來處理事件,當java提供處理事件的接口中多于一個方法時,java相應地就提供一個適配器類,比如windowadapter類。適配器已經(jīng)實現(xiàn)了相應的接口,例如windowadapter類實現(xiàn)了windowlistener接口。因此,可以使用windowadapte的子類創(chuàng)建的對象做監(jiān)視器,在子類中重寫所需要的接口方法即可 7.13鼠標事件鼠標事件 l任何組件上都可以發(fā)生鼠標事件,如:鼠標進入組件、退出組件、在組件上方單擊鼠標、拖動鼠標等都觸發(fā)組件發(fā)生鼠標事件,也就是說,組件可以成為發(fā)生鼠標事件的事件源。1.mouselistener接口

29、接口 l使用mouselistener接口可以處理5種操作觸發(fā)的鼠標事件:(1)在事件源上按下鼠標鍵。(2)在事件源上釋放鼠標鍵。(3)在事件源上擊鼠標鍵。(4)鼠標進入事件源。(5)鼠標退出事件源。l鼠標事件的類型是mouseevent,即當發(fā)生鼠標事件時,mouseevent類自動創(chuàng)建一個事件對象。 mouselistener接口中的方法接口中的方法 l(1)mousepressed(mouseevent) 負責處理在組件上按下鼠標觸發(fā)的鼠標事件,當在組件上按下鼠標時,監(jiān)視器將自動調(diào)用接口中的這個方法對事件作出處理。l(2)mousereleased(mouseevent) 負責處理在組件上釋放鼠標觸發(fā)的鼠標事件,當在組件上釋放鼠標時,監(jiān)視器將自動調(diào)用接口中的這個方法對事件作出處理。l(3)mouseentered(mouseevent) 負責處理鼠進入組件觸發(fā)的鼠標事件,當鼠標進入組件上方時,監(jiān)視器將自動調(diào)用接口中的這個方法對事件作出處理。l(4)mouseexited(mouseevent) 負責處理鼠標離開組件觸發(fā)的鼠標事件,當鼠標離開組件時,監(jiān)視器自動調(diào)用接口中的這個方法對事件作出處理。l(5)mouseclicked(mouseevent) 負責處理在組件上單擊或連擊鼠標觸發(fā)的鼠標事件,當單擊或連擊鼠標時,監(jiān)視器

溫馨提示

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

評論

0/150

提交評論