




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第8章 圖形用戶界面,8.1 組件 8.2 組件布局管理 8.3 事件處理方法 習(xí)題,GUI(graphic user interface)的中文意思是圖形用戶界面。在GUI中,用戶可以看到什么就操作什么,取代了以往字符方式下知道是什么后才能操作的方式,極大地方便了用戶對計算機(jī)的操作,GUI現(xiàn)在已經(jīng)成為當(dāng)前的編程標(biāo)準(zhǔn)。 Java語言可以編寫出良好的圖形用戶界面,因為它提供了圖形用戶界面所需要的基本組件,如窗口、按鈕、文本框、選擇框、滾動條等,Java類庫java.awt包含了所有這些基本組件。 本章的任務(wù)是了解圖形用戶界面基本組件的使用方法,了解如何使用布局管理器對組件進(jìn)行管理,以及如何使用J
2、ava的事件處理機(jī)制。,組件(Component)是構(gòu)成GUI的基本要素,通過對不同事件的響應(yīng)來完成和用戶的交互或組件之間的交互。組件一般作為一個對象放置在容器(Container)內(nèi),容器是能容納和排列組件的對象,如Applet、Panel、Frame等。組件通過容器的add方法加入到容器中。,8.1 組件,1. 創(chuàng)建標(biāo)簽 標(biāo)簽(Label)的功能是顯示單行的字符串,可在屏幕上顯示一些提示性、說明性的文字。 例8.1 創(chuàng)建標(biāo)簽,結(jié)果如圖8.1所示。 import java.awt.*; import java.applet.Applet; public class Label1 extend
3、s Applet public void init() Label label1=new Label(); Label label2=new Label(歡迎你使用標(biāo)簽!); Label label3=new Label(這是一個寫標(biāo)簽的例子, Label.RIGHT); add(label1); add(label2);,8.1.1 標(biāo)簽,add(label3); 圖 8.1,2. 標(biāo)簽的構(gòu)造方法 (1) Label() 該方法用來創(chuàng)建一個沒有顯示內(nèi)容的對象。 (2) Label(String label) 該方法用來創(chuàng)建一個顯示內(nèi)容為label的對象。 (3) Label(String l
4、abel, int alignment) 該方法除了用來創(chuàng)建一個顯示內(nèi)容為label的對象外,還設(shè)置了Label的對齊方式。 Label的對齊方式有3種,分別用Label類的3個常量LEFT、CENTER和RIGHT來表示左對齊、居中對齊和右對齊。,3. 標(biāo)簽的常用方法 (1) public int getAlignment() 返回當(dāng)前的對齊方式。 (2) public String getText() 返回當(dāng)前顯示的字符串。 (3) public void setAlignment(int alignment) 設(shè)置對齊方式。 (4) public void setText(String
5、label) 設(shè)置顯示的字符串。,Java提供了標(biāo)準(zhǔn)按鈕(Button),可帶有文字標(biāo)題。 1. 創(chuàng)建按鈕 例8.2 創(chuàng)建按鈕,結(jié)果如圖8.2所示。 import java.awt.*; import java.applet.Applet public class Button1 extends Applet Button button=new Button(確定); public void init() add (button); ,8.1.2 按鈕,圖 8.2 在例8.2中,button是作為主類的一個對象成員創(chuàng)建的,因此,主類的所有方法都可以使用它。參數(shù)“確定”指定了按鈕上顯示的標(biāo)題。,
6、2. 按鈕的構(gòu)造方法 (1) Button() 創(chuàng)建一個沒有標(biāo)題的按鈕。 (2) Button(String label) 創(chuàng)建一個有顯示標(biāo)題的按鈕。 3. 按鈕的常用方法 (1) public String getLabel() 返回按鈕的顯示標(biāo)題。 (2) public void setLabel(String label) 設(shè)置按鈕上的顯示標(biāo)題。,選項框(Choice)又稱下拉式列表。這種選項框一次只能顯示一個選項,要改變被選中的選項,可以單擊下拉箭頭,從選項框中選擇一個選項。,8.1.3 選項框,1. 創(chuàng)建選項框 例8.3 創(chuàng)建選項框,結(jié)果如圖8.3所示。 import java.aw
7、t.*; import java.applet.Applet; public class Choice1 extends Applet public void init() Label label=new Label(選項框的例子); Choice c=new Choice(); c.addItem(北 京); c.addItem(上 海); c.addItem(天 津); c.addItem(南 京); c.addItem(鄭 州); c.addItem(武 漢); add(c); add(label); ,圖 8.3,2. 選項框的常用方法 (1) public void addItem(
8、String item) 向選項框中加入選項item。 (2) public int countItem () 返回選項框中的選項個數(shù)。 (3) public String getItem(int index) 返回指定下標(biāo)值的某個選項。 (4) public int getSelectIndex() 返回被選中的選項的下標(biāo)值。 (5) public String getSelectItem() 返回被選中的選項。 (6) public void select(int pos) 選擇指定下標(biāo)值的選項。,(7) public void select(String str) 選擇指定的選項。,復(fù)選
9、框(Checkbox)可以讓用戶作出多項選擇。選項按鈕(CheckboxGroup)又稱單選框,是一組按鈕,用戶只能選擇其中的一個。,8.1.4 復(fù)選框和選項按鈕,1. 創(chuàng)建復(fù)選框 例8.4 創(chuàng)建復(fù)選框,結(jié)果如圖8.4所示。 圖 8.4,例8.4 創(chuàng)建復(fù)選框,結(jié)果如圖8.4所示。 import java.awt.*; import java.applet.Applet; public class Check1 extends Applet final static int CITY_NUM=6; String city=北京,上海,天津,南京,鄭州,武漢; Checkbox c=new Che
10、ckbox6; Label label=new Label(這是一個復(fù)選框的例子); public void init() add(new Label(請選擇中國的大城市: ); for (int i=0; iCITY_NUM; i+) ci=new Checkbox(cityi); add(ci); add(label); ,例8.5 創(chuàng)建選項按鈕,結(jié)果如圖8.5所示。 import java.awt.*; import java.applet.Applet; public class Check2 extends Applet final static int CITY_NUM=6; St
11、ring city=北京,上海,天津,南京,鄭州,武漢; Checkbox radio=new Checkbox6; Label label=new Label(這是一個選項按鈕的例子); public void init() CheckboxGroup c=new CheckboxGroup(); add(new Label(請選擇中國最大的城市: ); for (int i=0; iCITY_NUM; i+) radioi=new Checkbox(cityi, c, false); add(radioi); add(label); ,圖 8.5,2. 復(fù)選框和選項按鈕的構(gòu)造方法 (1)
12、Checkbox() 創(chuàng)建一個沒有標(biāo)簽的復(fù)選框。 (2) Checkbox(北京) 創(chuàng)建有標(biāo)簽的復(fù)選框。 (3) CheckboxGroup() 創(chuàng)建選項按鈕。 要生成選項按鈕,必須先生成一個類CheckboxGroup的對象,例如: checkboxGroup1=new CheckboxGroup(); 然后再使用下面的語句: checkbox1=new Checkbox(Radio, checkboxGroup1, false); 其中第一個參數(shù)是選項按鈕的標(biāo)簽,第二個參數(shù)是選項按鈕對象,第三個參數(shù)表示該選項按鈕創(chuàng)建時,是否被選中(true表示選中)。,3. 復(fù)選框和選項按鈕的常用方法 (
13、1) public CheckboxGroup getCheckboxGroup() 返回選項按鈕所屬的復(fù)選框組。 (2) public String getLabel() 返回復(fù)選框或選項按鈕的標(biāo)簽。 (3) public Boolean getState() 返回復(fù)選框或選項按鈕是否被選中。 (4) public void setCheckboxGroup(CheckboxGroup g) 設(shè)置選項按鈕所屬復(fù)選框組。 (5) public void setLabel(String label) 設(shè)置復(fù)選框或選項按鈕的標(biāo)簽。 (6) public void setState(Boolean
14、state) 設(shè)置復(fù)選框或選項按鈕被選中與否。,列表框(List)可以使用戶選擇多個選項。列表框的所有選項都是可見的,如果選項數(shù)目超出了列表框可見區(qū)的范圍,則列表框右邊會出現(xiàn)一個滾動條。,8.1.5 列表框,例8.6 創(chuàng)建列表框、添加選項,結(jié)果如圖8.6所示。 圖 8.6 import java.awt.*; import java.applet.Applet; public class List1 extends Applet List list1=new List(); List list2=new List(6, true); ,public void init() add(new La
15、bel(這是一個列表框的例子); list1.add(長江); list1.add(黃河); list1.add(淮河); add(list1); list2.add(北京大學(xué)); list2.add(清華大學(xué)); list2.add(吉林大學(xué)); list2.add(復(fù)旦大學(xué)); list2.add(南開大學(xué)); list2.add(天津大學(xué)); list2.add(南京大學(xué)); add(list2); ,說明: 構(gòu)造方法中的第一個參數(shù)指定了在列表框里顯示選項的個數(shù)。第二個參數(shù)若為false,表示這個列表框是單選的,若為true,則表示是多選的。無參構(gòu)造方法將創(chuàng)建一個默認(rèn)大小的列表框。,文本
16、框(TextField)用來接受用戶鍵盤輸入的單行文本信息。 1. 創(chuàng)建文本框 例8.7 創(chuàng)建兩個不同的文本框,結(jié)果如圖8.7所示。 import java.awt.*; import java.applet.Applet; public class Text1 extends Applet public void init() add(new Label(用戶名); add(new TextField(請輸入用戶名, 20); add(new Label(口令); add(new TextField(20); ,8.1.6 文本框,圖 8.7,2. 文本框的構(gòu)造方法 (1) TextFiel
17、d() 創(chuàng)建一個默認(rèn)長度的文本框。 (2) TextField(int columns) 創(chuàng)建一個指定長度的文本框。 (3) TextField(String text) 創(chuàng)建一個帶有初始文本內(nèi)容的文本框。 (4) TextField(String text, int columns) 創(chuàng)建一個帶有初始文本內(nèi)容并具有指定長度的文本框。,3. 文本框的常用方法 (1) public void setEchoChar(char c) 設(shè)定用戶輸入字符的回顯字符,例如輸入口令時可設(shè)定回顯字符“*”來屏蔽。 (2) public void setText(String t) 設(shè)定文本框的文本內(nèi)容。,與
18、文本框只顯示一行不同,文本區(qū)(TextArea)可以顯示大段的文本。 1. 創(chuàng)建文本區(qū) 例8.8 創(chuàng)建兩個不同的文本區(qū),結(jié)果如圖8.8所示。 import java.awt.*; import java.applet.Applet; public class TextAreaDemo extends Applet public void init() TextArea ta1=new TextArea(這里是文本區(qū)1,8,20); add(ta1); ta1.setEditable(false); TextArea ta2=new TextArea(這里是文本區(qū)2,8,20); add(ta2
19、);,8.1.7 文本區(qū),ta2.setEditable(true); 圖 8.8,2. 文本區(qū)的構(gòu)造方法 (1) TextArea() 創(chuàng)建一個默認(rèn)大小的文本區(qū)。 (2) TextArea(int rows, int columns) 創(chuàng)建一個指定行和列數(shù)的文本區(qū)。 (3) TextArea(String text) 創(chuàng)建一個帶有初始文本內(nèi)容的文本區(qū)。 (4) TextArea(String text, int rows, int columns) 創(chuàng)建一個帶有初始文本內(nèi)容并具有指定行和列數(shù)的文本區(qū)。 (5) TextArea(String text, int rows, int colum
20、ns, int scrollbars) 在(4)的基礎(chǔ)上添加滾動條。,3. 文本區(qū)的常用方法 (1) public void append(String str) 在文本區(qū)尾部添加文本。 (2) public void insert(String str, int pos) 在文本區(qū)指定位置插入文本。 (3) public void setText(String t) 設(shè)定文本區(qū)內(nèi)容。 (4) public int getRows() 返回文本區(qū)的行數(shù)。 (5) public void setRows(int rows) 設(shè)定文本區(qū)的行數(shù)。 (6) public int getColumns(
21、) 返回文本區(qū)的列數(shù)。 (7) public void setColumns(int columns) 設(shè)定文本區(qū)的列數(shù)。,(8) public void setEditable(boolean b) 設(shè)定文本區(qū)的可編輯狀態(tài)。 從上面創(chuàng)建組件的例子可以知道,要創(chuàng)建組件先要創(chuàng)建組件對象,然后添加對象到容器中。,在上面的例子中,組件的位置由容器的默認(rèn)布局管理器擺放,這樣當(dāng)組件較多時窗口就會顯得凌亂。如何控制組件的擺放位置呢?本節(jié)介紹的布局管理器就是解決這個問題的。,8.2 組件布局管理,順序布局(FlowLayout)是最基本的一種布局,是面板(Panel)及其子類Applet的默認(rèn)布局方式,前面
22、介紹的例子都使用了默認(rèn)的順序布局。Panel是一個容器,可以容納多個組件,作為它的子類,Applet也具有容納組件的能力。 順序布局指的是把組件一個接一個地從左到右順序排列,一行排滿后就轉(zhuǎn)到下一行繼續(xù)排列,直到把所有組件都顯示出來。它將根據(jù)容器的大小隨時調(diào)整它里面的組件的大小,包括高度和寬度,這個管理器不會約束組件的大小,而是允許它們獲得自己的最佳大小。,8.2.1 順序布局,邊界布局(BorderLayout)把容器(這里是Applet)分為5個區(qū): 北區(qū)、南區(qū)、東區(qū)、西區(qū)和中區(qū)。這幾個區(qū)的分布規(guī)律是“上北下南,左西右東”,與地圖的方位相同。組件可以指定自己放在哪個區(qū)內(nèi),因為只有5個區(qū),所以
23、最多只能容納5個組件,否則要采取其他布局方式。,8.2.2 邊界布局,例8.9 使用邊界布局添加5個組件,結(jié)果如圖8.9所示。 import java.awt.*; import java.applet.Applet; public class Border1 extends Applet Button bN, bS, bW, bE, bC; public void init() setLayout(new BorderLayout(); bN=new Button(北); bS=new Button(南); bE=new Button(東); bW=new Button(西); bC=new
24、 Button(中); add(North, bN); add(South, bS); add(East, bE); add(West, bW); add(Center, bC); ,圖 8.9 說明: 在add方法中,第一個參數(shù)表示組件的擺放位置,必須從North、South、East、West、Center中選擇一個。第二個參數(shù)是組件對象名。,卡片布局(CardLayout)將組件像卡片一樣疊放起來,每次只顯示一個。因此需要使用某種方法翻閱這些卡片,參見例8.10。,8.2.3 卡片布局,例8.10 組件的卡片布局,如圖8.10所示。 import java.awt.*; import j
25、ava.applet.Applet; public class Card1 extends Applet CardLayout card=new CardLayout(); public void init() setLayout(card); setFont(new Font(Arial, Font.PLAIN, 24); for (int i=1; i=5; i+) add(String.valueOf(i), new Button(卡片號為: +i); card.show (this, String.valueOf(2); ,圖 8.10,使用卡片布局時,先要創(chuàng)建一個卡片布局管理器對象,
26、例如程序中創(chuàng)建的card對象。然后用setLayout(card) 設(shè)定容器的布局方式。由于布局管理器將組件疊放起來時要確定組件的編號,這可通過add(字符串編號, 組件) 方法來加入組件。顯示一個組件時要通過布局管理器的show方法,它需要兩個參數(shù): 容器對象名和組件的字符串編號。,網(wǎng)格布局(GridLayout)把容器(這里是Applet)區(qū)域分成若干個網(wǎng)格,每個網(wǎng)格可以放置一個組件,這種布局方式對數(shù)量眾多的組件很合適。創(chuàng)建網(wǎng)格布局管理器時,可以給出網(wǎng)格的行數(shù)和列數(shù)。,8.2.4 網(wǎng)格布局,例8.11 組件的網(wǎng)格布局如圖8.11所示。 import java.awt.*; import j
27、ava.applet.Applet; public class Grid1 extends Applet Button b1, b2, b3, b4, b5, b6; public void init() setLayout(new GridLayout(3,3); / 設(shè)置為3行3列共9個網(wǎng)格 b1 = new Button(按鈕1); b2 = new Button(按鈕2); b3 = new Button(按鈕3); b4 = new Button(按鈕4); b5 = new Button(按鈕5); b6 = new Button(按鈕6); add(new Label(label
28、1);add(b1); add(b2); add(b3); add(new Label(); add(b4); add(b5); add(b6); add(new Label(label2); ,圖 8.11 網(wǎng)格數(shù)可以比組件多,但不能少。如果希望某個網(wǎng)格為空白,可以為它加上一個空標(biāo)簽。在網(wǎng)格布局中也可以添加間距,如setLayout(new GridLayout(3, 3, 10, 10) 將網(wǎng)格之間設(shè)為10個點。,面板(Panel)是一個無邊框的容器,可以包容其他組件或另一個面板。使用面板的目的是為了分層次、分區(qū)域管理各種組件,通過各個面板的布局管理器對本身的組件進(jìn)行管理,互不妨礙,這樣就
29、可以使布局更加合理和美觀。 在前面的例子里沒有使用面板,Applet本身就是一個特殊的面板,現(xiàn)在來看看如何在Applet中添加面板進(jìn)行組件布局。,8.2.5 面板的使用,例8.12 用面板控制組件布局,結(jié)果如圖8.12所示。 import java.awt.*; import java.applet.Applet; public class Panel1 extends Applet public void init() setLayout(new BorderLayout(); setForeground(Color.black); setFont(new Font(Arial,Font.P
30、LAIN,20); add(North, new Label(我在 Applet 中,Label.CENTER); Panel panel1=new Panel(); add(West, panel1); panel1.setBackground(Color.blue); panel1.setForeground(Color.red); panel1.setLayout(new BorderLayout(); panel1.add(East, new Button(東); panel1.add(West, new Button(西); panel1.add(Center, new Label(
31、我在 Panel1 中); ,Panel panel2=new Panel(); add(East, panel2); panel2.setBackground(Color.green); panel2.setLayout(new BorderLayout(); panel2.add(North, new Label(我在 Panel2 中); panel2.add(South, new Button(我在 Panel2 中); 圖 8.12,Java允許使用手工布局放置各個組件,這種方法比較靈活。 例8.13 手工放置組件,結(jié)果如圖8.13所示。 import java.awt.*; imp
32、ort java.applet.Applet; public class No1 extends Applet Choice c=new Choice (); Button b1=new Button(Button1); Button b2=new Button(Button2); Button b3=new Button(Button3); public void init() setLayout(null);,8.2.6 手工布局,c.addItem(Item1); c.addItem(Item2); c.addItem(Item3); add(c); c.setBounds(80,80,
33、100,20); add(b1); b1.setBounds(20,20,50,30); add(b2); b2.setBounds(100,20,50,30); add(b3); b3.setBounds(200,60,50,50); 圖 8.13,該程序先通過setLayout(null) 語句關(guān)閉了默認(rèn)的布局管理器。 然后使用setBounds方法設(shè)置組件的擺放位置和大小。 setBounds方法有4個參數(shù), x和y指定了組件的水平和縱向位置坐標(biāo);width指定了組件的寬度;height指定了組件的高度。例如b2.setBounds(100,20,50,30) 將按鈕b2放在(120,
34、20)位置,寬度和高度分別是50和30。,在Java中,程序和用戶的交互是通過響應(yīng)各種事件來實現(xiàn)的。每當(dāng)一個事件發(fā)生,Java虛擬機(jī)就會將事件的消息傳遞給程序,由程序中的事件處理方法對事件進(jìn)行處理。 如果希望能對各種事件作出反應(yīng),要編寫一個或多個事件處理方法,當(dāng)程序監(jiān)聽到事件發(fā)生后,就可以調(diào)用事件處理方法來處理了。Java通過委托型事件處理機(jī)制解決如何對事件作出響應(yīng)的問題。,8.3 事件處理方法 8.3.1 事件與事件處理方法,能產(chǎn)生事件的組件叫做事件源,如按鈕。如果希望對單擊按鈕事件進(jìn)行處理,可給事件源(按鈕)注冊一個事件監(jiān)聽器(如包含按鈕的容器),如同簽訂了一個委托合同,當(dāng)事件源發(fā)生事件時
35、,事件監(jiān)聽器就代替事件源對發(fā)生的事件進(jìn)行處理,這就是所謂的委托事件處理機(jī)制。 事件監(jiān)聽器可以是一個自定義類或其他容器,如定義的類S1、Applet、Canvas、Frame等,它們本身并沒有事件處理方法,所以需要使用事件接口中的事件處理方法來創(chuàng)建事件處理方法。因此,事件監(jiān)聽器必須實現(xiàn)事件接口的方法。,8.3.2 Java的事件處理機(jī)制,注意,這里的事件監(jiān)聽器不一定是包容事件源的容器對象,只要一個對象實現(xiàn)了事件監(jiān)聽器接口就能成為事件監(jiān)聽器。這樣處理可使程序中的事件處理代碼與GUI代碼分離,有利于優(yōu)化程序結(jié)構(gòu)。 事件接口定義了抽象方法來統(tǒng)一處理某一類事件,事件監(jiān)聽器可以覆蓋這些處理方法以作出響應(yīng)。
36、不同類型的事件必須由不同的事件接口處理,因此,一個事件監(jiān)聽器如果要處理多種事件,就必須實現(xiàn)多個事件接口。當(dāng)事件源的事件被觸發(fā)后,系統(tǒng)將這個事件作為參數(shù)傳遞給事件監(jiān)聽器的事件處理方法以響應(yīng)處理操作。,Java將所有組件可能發(fā)生的事件進(jìn)行了分類,具有共同特征的事件被抽象為一個事件類AWTEvent,其中包括ActionEvent單擊事件類、MouseEvent鼠標(biāo)事件類等,它們不是某個具體組件如按鈕或選項框的事件,而是屬于所有組件,只要該組件能產(chǎn)生這種事件。這種處理方式使Java加強(qiáng)了對事件的管理,提高了代碼的重用性。,1. 單擊按鈕事件處理 例8.14 本程序在Applet上創(chuàng)建兩個面板,分別在
37、面板上創(chuàng)建了一個按鈕和一個標(biāo)簽。用鼠標(biāo)單擊按鈕時,會聽到一聲響聲,參見圖8.14。 圖 8.14,8.3.3 事件處理實例,import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class Beep extends Applet implements ActionListener / 實現(xiàn)動作事件監(jiān)聽接口 public void init() add(new Label(按一下按鈕可聽到響聲!, Label.CENTER); Button btn=new Button(按鈕); add(btn
38、); btn.addActionListener (this); / 注冊事件源的動作監(jiān)聽者 public void actionPerformed(ActionEvent e) Toolkit.getDefaultToolkit ().beep(); / 動作事件發(fā)生時要作出的反應(yīng) ,從本例中可以概括出事件處理的步驟: (1) 引入系統(tǒng)事件類包。如import java.awt.event.*。 (2) 在定義類的同時聲明實現(xiàn)單擊事件監(jiān)聽器接口。如implements ActionListener。 (3) 在方法中調(diào)用事件源對象的addActionListener注冊事件監(jiān)聽器方法,給事件
39、源對象注冊事件監(jiān)聽器。如btn.addActionListener (this),這里this為當(dāng)前類Beep。 (4) 實現(xiàn)actionPerformed事件接口方法。ActionListener接口中的方法一定要實現(xiàn),即編寫事件處理代碼以響應(yīng)事件的發(fā)生。當(dāng)單擊按鈕時,系統(tǒng)將產(chǎn)生ActionEvent事件,動作事件監(jiān)聽器就調(diào)用actionPerformed方法處理這個事件。,2. 選項事件處理 例8.15 處理復(fù)選框和選項按鈕事件,結(jié)果如圖8.15所示。 圖 8.15,import java.applet.Applet; import java.awt.*; import java.awt.
40、event.*; public class ItemDemo extends Applet implements ItemListener TextArea area=new TextArea(6,30); String City=北京,上海,天津,南京,武漢; Checkbox cb=new Checkbox5; Checkbox radio=new Checkbox5; public void init() add(new Label(這是一個選項事件例子); add(area); add(new Label( 請選擇中國的大城市: ); for(int i=0; i5; i+) cbi=
41、new Checkbox(Cityi); add(cbi); cbi.addItemListener(this); ,CheckboxGroup cbGroup=new CheckboxGroup(); add(new Label(請選擇中國最大的城市: ); for(int i=0; i5; i+) radioi=new Checkbox(Cityi,cbGroup,false); add(radioi); radioi.addItemListener(this); public void itemStateChanged(ItemEvent e) area.append (你選擇的是+e.
42、getItem ()+n); 注意: 要為每一個事件源進(jìn)行注冊。,3. 文本動作事件處理 例8.16介紹了在文本框輸入文本后按回車鍵發(fā)生的情況,這種情況屬于動作事件。 例8.16 處理文本的動作事件,結(jié)果如圖8.16所示。 import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class TextDemo1 extends Applet implements ActionListener TextArea Area=new TextArea (6,40); TextField tf1=new
43、TextField(10); TextField tf2=new TextField(10); public void init() setFont(new Font(Arial,Font.PLAIN,12); add(Area); add(new Label(用戶名); add(tf1);,add(new Label(電話); add(tf2); tf1.addActionListener(this); tf2.addActionListener(this); public void actionPerformed(ActionEvent e) if (e.getSource()=tf1)
44、Area.append(用戶名: +tf1.getText()+n); else Area.append(電 話: +tf2.getText()+n); ,圖 8.16,4. 卡片布局的事件處理 例8.17 添加卡片按鈕來翻看卡片組件,結(jié)果如圖8.17所示。 import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class CardDemo1 extends Applet implements ActionListener CardLayout card=new CardLayout(); p
45、ublic void init() Button cb=new Button6; setLayout(card); setFont(new Font(Arial,Font.PLAIN,24); for (int i=1;i=5;i+) cbi=new Button(卡片號為: +i); add(String.valueOf(i),cbi); cbi.addActionListener(this); ,card.show(this,String.valueOf(1); public void actionPerformed(ActionEvent e) card.next(this); 圖 8.
46、17,現(xiàn)在單擊卡片將會翻動了。 卡片布局提供的常用方法: (1) public void first(Container parent) 顯示第一張卡片。 (2) public void last(Container parent) 顯示最后一張卡片。 (3) public void next(Container parent) 顯示下一張卡片。 (4) public void previous(Container parent) 顯示上一張卡片。 (5) public void show(Container parent, String name) 顯示指定的卡片。,5. 實現(xiàn)多個事件接口 如果在程序中有多個事件發(fā)生可使用多個事件接口,然后實現(xiàn)各自的事件處理方法。 例8.18 在窗口中用鼠標(biāo)拖動畫線。運行結(jié)果如圖8.18所示。 import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class DrawLine extends Applet implements MouseLis
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)業(yè)產(chǎn)品棉花購銷合同書(3篇)
- 機(jī)床專業(yè)知識培訓(xùn)課件
- 內(nèi)科護(hù)理學(xué)課程肺結(jié)核課件
- 個人借款抵押車合同
- 2025年哈爾濱年貨運從業(yè)資格證考試題庫
- 2025年青海年貨運從業(yè)資格證考試答案
- 掘進(jìn)機(jī)出租承包協(xié)議書
- 2025年張掖貨運運輸駕駛員從業(yè)資格證考試試題
- 垃圾填埋場垃圾壓實技術(shù)
- 高分子材料壓縮模量測量
- 【幼兒園園本教研】幼兒表征的教師一對一傾聽策略
- 人教版新教材高一上學(xué)期期末考試數(shù)學(xué)試卷及答案(共五套)
- 采血知情同意書模板
- Mysql 8.0 OCP 1Z0-908 CN-total認(rèn)證備考題庫(含答案)
- 教科版二年級科學(xué)下冊 (磁鐵能吸引什么) 課件
- 學(xué)習(xí)探究診斷 化學(xué) 必修二
- 冀教2011版九年級英語全一冊《Lesson9ChinasMostFamous“Farmer”》教案及教學(xué)反思
- 三年級下冊音樂教學(xué)計劃含教學(xué)進(jìn)度安排活動設(shè)計word表格版
- 無極繩絞車檢修技術(shù)規(guī)范
- 雷鋒生平事跡簡介
- 市政工程施工安全檢查標(biāo)準(zhǔn)
評論
0/150
提交評論