版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1,Java語言,7,Java中的GUI,2,什么是GUI,GUI:Graphics User Interface圖形用戶界面,通過它用戶和程序之間可以方便地進(jìn)行交互。Java的抽象窗口工具包(AWT:Abstract Window Toolkit)中包含了許多類來支持GUI設(shè)計(jì)。,3,本章內(nèi)容,7.1 AWT簡介 7.2 文本框和文本區(qū) 7.3 標(biāo)簽 7.4 按鈕 7.5 選擇框 7.6 下拉列表和滾動(dòng)列表 7.7 面板和畫布 7.8 建立窗口和菜單 7.9 建立對(duì)話框 7.10 布局設(shè)計(jì) 7.11 Java中的鼠標(biāo)事件 7.12 Java中的鍵盤事件,4,7.1 AWT簡介,在java.a
2、wt包中有許多用來設(shè)計(jì)GUI的組件類,如:按鈕、菜單、列表、文本框等組件類,同時(shí)它還包含窗口、面板等容器類。,5,7.1.1 java.awt 包中的類體系結(jié)構(gòu),6,7.1.2組件和容器,在學(xué)習(xí)GUI編程時(shí),組件類(Component)和容器類(Container)是兩個(gè)必須要理解的概念。 由組件類的子類或間接子類創(chuàng)建的對(duì)象稱為一個(gè)組件。由容器類的子類或間接子類創(chuàng)建的對(duì)象稱為一個(gè)容器。組件不能獨(dú)立地顯示出來,必須將組件放在一定的容器中才可顯示出來。Java規(guī)定,可以向容器中添加組件。 容器(Container)實(shí)際是 Component的子類,因此容器類對(duì)象本身也是一個(gè)組件,具有組件的所有性質(zhì)
3、,另外還具有容納其他組件和容器的功能。,7,7.1.2組件和容器,標(biāo)簽,文本框,文本區(qū),按鈕,不同組件,8,7.1.3 注意,(1)Button,Scrollbars等類是java.awt包中的類并且是java.awt包中的Component類的子類,Java把由Component類的子類或間接子類創(chuàng)建的對(duì)象稱為一個(gè)組件。,(2)Java把由Container的子類或間接子類創(chuàng)建的對(duì)象稱為一個(gè)容器。,(3)可以向容器添加組件,Component類提供了一個(gè)public方法add(),一個(gè)容器可以調(diào)用這個(gè)方法將組件添加到容器中。,(5)Applet類不是包java.awt中的類,它只是和Pane
4、l有繼承關(guān)系,它是java.applet中的類,不同包中的類可以有繼承關(guān)系。,(4)容器本身也是一個(gè)組件,因此可以把一個(gè)容器添加到另一個(gè)容器中實(shí)現(xiàn)容器的嵌套。,9,7.1.3 注意,(6)Window類表示可自由停泊的頂級(jí)窗口,這是一個(gè)抽象類,不能實(shí)例化,實(shí)際程序中經(jīng)常使用的是其子類Frame。 (7)Panel類可作為容器容納其他組件,但不能獨(dú)立存在,必須被添加到其他容器中(如: Frame 或Applet)。,10,7.1.4 AWT事件模型,基本概念: 1、交互:用戶界面與用戶之間的交流過程,用戶界面接受用戶的輸入命令、執(zhí)行相應(yīng)的動(dòng)作,并把結(jié)果輸出給用戶。 2、事件:發(fā)生在用戶界面上的用
5、戶交互行為所產(chǎn)生的一種效果,如鼠標(biāo)的各種動(dòng)作、鍵盤輸入以及發(fā)生在組件上的各種動(dòng)作。 3、事件處理:每發(fā)生一個(gè)事件,程序都需要作出相應(yīng)的響應(yīng),這就稱為事件處理。,11,7.1.4.1 事件控制的要點(diǎn),Java 最新的事件處理方法是基于授權(quán)事件模型。 事件源生成事件并將其發(fā)送至一個(gè)或多個(gè)監(jiān)聽器。 監(jiān)聽器簡單地等待,直到它收到一個(gè)事件。一旦事件被接受,監(jiān)聽器將處理這些事件,然后返回。,12,7.1.4.2事件,在授權(quán)事件模型中,事件是一個(gè)描述事件源狀態(tài)改變的對(duì)象 。 通過鼠標(biāo)、鍵盤與 GUI 界面直接或間接交互都會(huì)生成事件。 如:按下一個(gè)按鈕、通過鍵盤輸入一個(gè)字符、選擇列表框中的一項(xiàng)、點(diǎn)擊一下鼠標(biāo)等
6、。,13,7.1.4.3事件源,事件源是一個(gè)生成事件的對(duì)象。 一個(gè)事件源可能會(huì)生成不同類型的事件。 事件源提供了一組方法,用于為事件注冊一個(gè)或多個(gè)監(jiān)聽器。 每種事件的類型都有其自己的注冊方法。一般形式為: public void addListener (TypeListener e),14,7.1.4.4 AWT采取的事件控制過程,監(jiān)聽器對(duì)象屬于一個(gè)類的實(shí)例,這個(gè)類實(shí)現(xiàn)了一個(gè)特殊的接口,名為“監(jiān)聽者接口”。 事件源是一個(gè)對(duì)象,它可以注冊一個(gè)或多個(gè)監(jiān)聽器對(duì)象,并向其發(fā)送事件對(duì)象。 事件源將在發(fā)生事件時(shí)向所有注冊的監(jiān)聽器發(fā)送事件對(duì)象。 監(jiān)聽器對(duì)象使用事件對(duì)象中的信息來確定它們對(duì)事件的響應(yīng)。,15
7、,7.1.4.5按鈕單擊事件示例,public class MyEventTest extends Panel Button myButton = new Button(藍(lán)色); . . . / 創(chuàng)建面板或其他 GUI 組件 MyListener myAction = new MyListener(); MyButton.addActionListener(myAction); private class MyListener implements ActionListener public MyListener() . . . / 初始化 public void actionPerforme
8、d(ActionEvent event) . . ./需要為事件進(jìn)行的操作 ,實(shí)現(xiàn)了ActionListener接口的監(jiān)聽器,實(shí)現(xiàn)了actionPerformed方法,以便根據(jù)參數(shù) ActionEvent 對(duì)象的信息對(duì)事件做出響應(yīng),為按鈕事件 注冊監(jiān)聽器,16,7.1.4.6事件體系結(jié)構(gòu),17,7.1.4.7 AWT 事件類型 2-1,18,7.1.4.7 AWT 事件類型 2-2,19,7.1.4.8監(jiān)聽器接口,監(jiān)聽器通過實(shí)現(xiàn) java.awt.event 包中定義的一個(gè)或多個(gè)接口來創(chuàng)建,即在這些接口中定義了各種Java GUI事件處理方法,只有這些接口的實(shí)現(xiàn)類的對(duì)象才有資格作為監(jiān)聽器。 在
9、發(fā)生事件時(shí),事件源將調(diào)用監(jiān)聽器定義的相應(yīng)方法。 有興趣接收事件的任何監(jiān)聽器類都必須實(shí)現(xiàn)監(jiān)聽器接口。,20,7.1.4.9監(jiān)聽器接口列表 2-1,21,7.1.4.9監(jiān)聽器接口列表 2-2,22,7.1.4.10適配器類,為了使事件處理變得簡單,Java 為具有多個(gè)方法的監(jiān)聽器接口提供適配器類。適配器類實(shí)現(xiàn)并提供了一個(gè)事件監(jiān)聽器接口中的所有的方法,但這些方法都是空方法。程序員在定義監(jiān)聽器類時(shí)可繼承適配器類,并只重寫所需的方法。,23,7.1.4.10適配器類,適配器類只是為了簡化編程而提供的一種中間處理轉(zhuǎn)換工具,使程序員在定義監(jiān)聽器類時(shí)可以不必因直接實(shí)現(xiàn)監(jiān)聽器接口而被迫重寫所有的抽象方法。但因J
10、ava的單繼承機(jī)制的限制,若要定義的監(jiān)聽器類需要同時(shí)能處理兩種以上的GUI事件,則只能直接實(shí)現(xiàn)有關(guān)的監(jiān)聽器接口,而無法只通過繼承適配器實(shí)現(xiàn)。或者,一旦繼承了適配器類,則無法再繼承其他所需的父類。,24,7.1.4.11事件源、監(jiān)聽器和監(jiān)聽器接口,事件源描述事件對(duì)象中事件的性質(zhì)。 每個(gè)事件源都被映射至一個(gè)或多個(gè)事件監(jiān)聽器,發(fā)生事件時(shí)需要調(diào)用這些事件監(jiān)聽器。 事件源隨后通過將事件對(duì)象傳遞至監(jiān)聽器接口類的方法,將事件信息發(fā)送到監(jiān)聽器接口。 監(jiān)聽器分析事件對(duì)象找出事件信息,以便給出響應(yīng) 。,25,7.2.1 文本框,(1)java.awt包中的Textfield類是用來建立文本框的,即TextFiel
11、d類創(chuàng)建的一個(gè)對(duì)象就是一個(gè)文本框。 (2)Textfield類中有下列構(gòu)造方法: TextField() :如果使用這個(gè)構(gòu)造方法創(chuàng)建文本框?qū)ο?,則文本框的長度為一個(gè)字符長。 TextField(String s ) :如果使用這個(gè)構(gòu)造方法創(chuàng)建文本框?qū)ο?,則文本框的初始字符串為s。 TextField(int x) :如果使用這個(gè)構(gòu)造方法創(chuàng)建文本框?qū)ο螅瑒t文本框的長度為x個(gè)字符長。 TextField(String s ,int x) :如果使用這個(gè)構(gòu)造方法創(chuàng)建文本框?qū)ο螅瑒t初始字符串為s,長為x。,一種用來輸入文本的GUI組件 只能接受一行輸入,26,7.2.1 文本框的方法,setText(
12、String s ):在文本框中設(shè)置文本。 getText():獲取文本框中的文本。 setEchoChar(char c):設(shè)置文本框的回顯字符。當(dāng)用戶在文本框中輸入文字時(shí),在屏幕上只會(huì)看到回顯字符,回顯字符由參數(shù)c來指定。 setEditable(boolean b):指定文本框的可編輯性,默認(rèn)為可編輯(true)。 addActionListener(ActionListener l):向文本框增加ActionEvent事件監(jiān)視器(將監(jiān)視器注冊到文本框)。,27,7.2.1 文本框事件,當(dāng)用戶單擊按鈕、鍵入文本、使用鼠標(biāo)或進(jìn)行其它與界面相關(guān)的動(dòng)作時(shí),都會(huì)引發(fā)界面事件。Java的java.
13、awt.event包中包含了許多用來處理事件的類和接口。 程序有時(shí)需對(duì)發(fā)生的事件作出反應(yīng),如在文本框輸入某些字符或當(dāng)按下按鈕時(shí),希望得到某種信息等。,(1)事件源:能夠產(chǎn)生事件的對(duì)象都可以稱為事件源,如文本框、按鈕、列表、鼠標(biāo)等。,(2)監(jiān)視器:需要一個(gè)對(duì)象對(duì)事件源進(jìn)行監(jiān)視,以便對(duì) 發(fā)生的事件做出處理。事件通過調(diào)用相應(yīng)的方法將某個(gè)對(duì)象作為自己的監(jiān)視器。對(duì)于文本框,這個(gè)方法是:addActionListener(監(jiān)視器)。,(3)處理事件的接口:監(jiān)視器負(fù)責(zé)處理事件源發(fā)生的事件。監(jiān)視器是一個(gè)對(duì)象,為了處理事件源發(fā)生的事件,監(jiān)視器這個(gè)對(duì)象會(huì)自動(dòng)調(diào)用一個(gè)方法來處理事件。Java規(guī)定,為了讓監(jiān)視器這個(gè)對(duì)
14、象能對(duì)事件源發(fā)生的事件進(jìn)行處理,創(chuàng)建監(jiān)視器對(duì)象的類必須聲明使用相應(yīng)的接口,并且實(shí)現(xiàn)該接口中的方法,那么當(dāng)事件源發(fā)生事件時(shí),監(jiān)視器就會(huì)自動(dòng)調(diào)用被類實(shí)現(xiàn)了的該接口中的方法。,29,7.2.1 處理文本框事件,當(dāng)在文本框中輸入字符并回車時(shí),Java.awt.event中的ActionEvent類將自動(dòng)創(chuàng)建一個(gè)事件對(duì)象,并將它傳遞給方法actionPerformed(ActionEvent e)中的參數(shù)e,監(jiān)視器將自動(dòng)調(diào)用該方法,對(duì)發(fā)生的事件做出處理。,30,7.2.1 文本框事件,事件源: 監(jiān)視器: 處理事件的接口: 實(shí)現(xiàn)接口中的方法: 返回事件源的方法:,TextField,ActionListe
15、ner,事件對(duì)象的getSource()方法,addActionListener(ActionListener l),actionPerformed(ActionEvent e),31,例1:Example8_2、 Example8_2_2,在一個(gè)文本框中輸入英文單詞并回車,而在另一個(gè)文本框中立刻顯示漢語意思。,注意:,text1.addActionListener(this);的含義為:向文本框text1增加監(jiān)視器,監(jiān)視器為當(dāng)前類(Example8_2小應(yīng)用程序)的對(duì)象“this”。由于Example8_2類使用了接口“ActionListener”: public class Exampl
16、e8_2 extends Applet implements ActionListener,所以Example8_2類的對(duì)象可以做為addActionListener (ActionListener l)方法中的參數(shù)。因此,可以作為text1的監(jiān)視器。 在text1中輸入文本回車后,監(jiān)視器就會(huì)知道所發(fā)生的事件,這時(shí)方法: public void actionPerformed(ActionEvent e)會(huì)被自動(dòng)地執(zhí)行,對(duì)所發(fā)生的事件作出處理。Java.awt.event包中的類ActonEvent自動(dòng)創(chuàng)建了一個(gè)事件對(duì)象,并將它傳遞給方法 actionPerformed(ActionEvent
17、 e)中的參數(shù)e。,33,練習(xí):,在第一個(gè)文本框中輸入密碼并回車,在另一文本框中被顯示。,34,7.2.2 文本區(qū),(1)java.awt包中的TextArea類是專門用來建立文本區(qū)的,比文本框要大,通常帶滾動(dòng)條。即TextArea類創(chuàng)建的一個(gè)對(duì)象就是一個(gè)文本區(qū)。 (2)TextArea類的主要構(gòu)造方法如下: TextArea() :如果使用這個(gè)構(gòu)造方法創(chuàng)建文本區(qū)對(duì)象,則文本區(qū)的列數(shù)和行數(shù)取默認(rèn)值。 TextArea(int x ,int y) :如果使用這個(gè)構(gòu)造方法創(chuàng)建文本區(qū)對(duì)象,則文本區(qū)的行為x,列為y。 TextArea(String s) :如果使用這個(gè)構(gòu)造方法創(chuàng)建文本區(qū)對(duì)象,則文本區(qū)
18、的初始字符串為s。,要接受輸入多行文本時(shí)使用 可以包括滾動(dòng)條,35,7.2.2 文本區(qū),TextArea(String s,int x,int y) :如果使用這個(gè)構(gòu)造方法創(chuàng)建文本區(qū)對(duì)象,則文本區(qū)的行為x,列為y,初始字符串是s 。 TextArea(String s,int x,int y,int scrollbar) :如果使用這個(gè)構(gòu)造方法創(chuàng)建文本區(qū)對(duì)象,則文本區(qū)的行為x,列為y,初始字符串是s, scrollbar取值: TextArea.SCROLLBARS_BOTH TextArea.SCROLLBARS_VERTICAL_ONLY TextArea.SCROLLBARS_HORIZ
19、ONTAL_ONLY TextArea.SCROLLBARS_NONE 其他構(gòu)造方法創(chuàng)建的文本區(qū)都自帶滾動(dòng)條。,36,7.2.2 文本區(qū)的方法,setText(String s):在文本區(qū)中設(shè)置文本,同時(shí)清除文本區(qū)中原有內(nèi)容。 getText():獲取文本區(qū)中的文本。 addTextListener(TextListener l):向文本區(qū)增加TextEvent事件監(jiān)視器。 insert(String s ,int x):在指定位置x(列)插入指定文本s。 Append(String s):在文本區(qū)中附加文本,即連接到文本區(qū)已有文本的后面。,37,7.2.2 處理文本區(qū)事件,當(dāng)用戶改變文本區(qū)中
20、的內(nèi)容,如鍵入字符、刪除字符時(shí),java.awt.event中的TextEvent類將自動(dòng)創(chuàng)建一個(gè)事件對(duì)象,并將它傳遞給方法textValueChanged(TextEvent e)中的參數(shù)e,監(jiān)視器將自動(dòng)調(diào)用該方法,對(duì)發(fā)生的事件做出處理。,38,7.2.2 文本區(qū)事件,事件源: 監(jiān)視器: 處理事件的接口: 實(shí)現(xiàn)接口中的方法: 返回事件源的方法:,TextArea,TextListener,事件對(duì)象的getSource()方法,addTextListener(TextListener l),textValueChanged(TextEvent e),39,7.2.2 文本區(qū)例,1、有兩個(gè)文本區(qū)
21、,修改第一個(gè)文本區(qū)的內(nèi)容時(shí),第二個(gè)文本區(qū)的內(nèi)容會(huì)同步變化。Example8_5 2、有兩個(gè)文本區(qū),在一個(gè)文本區(qū)中輸入若干個(gè)數(shù)時(shí),另一個(gè)文本區(qū)同時(shí)對(duì)輸入的數(shù)從小到大排序。 Example8_6,40,7.3 標(biāo)簽,java.awt包中的Label類是用來建立標(biāo)簽的,即Label類創(chuàng)建的一個(gè)對(duì)象就是一個(gè)標(biāo)簽。 可以通過以下任一構(gòu)造函數(shù)來創(chuàng)建: Label( ) : 新建一個(gè)空標(biāo)簽。 Label(String labeltext): 新建一個(gè)包含給定文本的標(biāo)簽。 Label(String labeltext, int alignment) :新建一個(gè)包含給定對(duì)齊方式的標(biāo)簽,對(duì)齊方式可以為 Label
22、.LEFT、Label.RIGHT 或 Label.CENTER。 Label類的主要方法有: setText(String s) getText() setBackground(Color c) setForeground(Color c),通常用來指明項(xiàng)目的用途 標(biāo)簽不可以被用戶編輯,41,7.3 標(biāo)簽,例:讓一個(gè)標(biāo)簽做監(jiān)視器,監(jiān)視一個(gè)文本框,當(dāng)在這個(gè)文本框中輸入數(shù)字后,另一個(gè)文本框顯示這個(gè)數(shù)的全部因子。Example10_3,42,7.4 按鈕,(1)java.awt包中的Button類是用來建立按鈕的,即Button類創(chuàng)建的一個(gè)對(duì)象就是一個(gè)按鈕。 (2)Button類中有下列主要方法:
23、 Button()構(gòu)造方法:如果使用這個(gè)構(gòu)造方法創(chuàng)建按鈕對(duì)象,則按鈕沒有名稱。 Button(String s ) 構(gòu)造方法:如果使用這個(gè)構(gòu)造方法創(chuàng)建按鈕對(duì)象,則按鈕的名稱為字符串s。 setLabel(String s ):設(shè)置按鈕的名稱。 getLabel():獲取按鈕的名稱。addActionListener(ActionListener l):向按鈕增加ActionEvent事件監(jiān)視器(將監(jiān)視器注冊到按鈕)。,按鈕是任何GUI都不可或缺的組件 用來捕捉用戶操作的最為簡便的方式,43,7.4.1 處理按鈕事件,當(dāng)用戶單擊按鈕時(shí),java.awt.event中的ActionEvent類將自
24、動(dòng)創(chuàng)建一個(gè)事件對(duì)象,并將它傳遞給方法actionPerformed(ActionEvent e)中的參數(shù)e,監(jiān)視器將自動(dòng)調(diào)用該方法,對(duì)發(fā)生的事件做出處理。,44,7.4.2 按鈕事件,事件源: 監(jiān)視器: 處理事件的接口: 實(shí)現(xiàn)接口中的方法: 返回事件源的方法:,Button,ActionListener,事件對(duì)象的getSource()方法,addActionListener(ActionListener l),actionPerformed(ActionEvent e),45,7.4.2 按鈕事件,例1:涉及4個(gè)按鈕,分別命名為加、減、乘、除。有3個(gè)文本框,程序?qū)蓚€(gè)文本框的數(shù)字作運(yùn)算,在第
25、3個(gè)文本框中顯示結(jié)果。Example9_2 例2:習(xí)題九第2題。應(yīng)用程序Exercise9_2,46,7.5 選擇框,(1)java.awt包中的Checkbox類是用來建立選擇框的,即Checkbox類創(chuàng)建的一個(gè)對(duì)象就是一個(gè)選擇框。 (2)Checkbox類中有下列主要方法: Checkbox()構(gòu)造方法:如果使用這個(gè)構(gòu)造方法創(chuàng)建選擇框?qū)ο?,則選擇框前無標(biāo)題。 Checkbox(String s)構(gòu)造方法:如果使用這個(gè)構(gòu)造方法創(chuàng)建選擇框?qū)ο?,則選擇框前的標(biāo)題為字符串s。 Checkbox(String s,boolean b)構(gòu)造方法:如果使用這個(gè)構(gòu)造方法創(chuàng)建選擇框?qū)ο螅瑒t選擇框前的標(biāo)題為字
26、符串s,選擇框的狀態(tài)為b。 Checkbox(String s,boolean b,CheckboxGroup g)構(gòu)造方法:如果使用這個(gè)構(gòu)造方法創(chuàng)建選擇框?qū)ο?,則選擇框前的標(biāo)題為字符串s,選擇框的狀態(tài)為b,選擇框所在的選擇框組為g(此方法是為了設(shè)置單項(xiàng)選擇的)。,用于單選或多選的用戶輸入,用戶可以通過單擊選擇框來選定或取消選定某選項(xiàng)。,47,7.5.1 選擇框的方法,setLabel():設(shè)置選擇框的標(biāo)題。 getLabel():獲取選擇框的標(biāo)題。 setState(boolean b):設(shè)置選擇框的狀態(tài),單選時(shí)設(shè)置為false不可用。 getState(boolean b):獲取選擇框的狀
27、態(tài)。 addItemListener(ItemListener l):向選擇框增加ItemEvent事件監(jiān)視器(將監(jiān)視器注冊到選擇框)。 注:如果在一個(gè)容器中添加了個(gè)多選擇框,而這多個(gè)選擇框沒有使用CheckboxGroup進(jìn)行分組,那么可以進(jìn)行多項(xiàng)選擇;如果這多個(gè)選擇框使用CheckboxGroup歸成了一組,那么只能進(jìn)行單項(xiàng)選擇。,48,7.5.2 處理選擇框事件,當(dāng)用戶將選擇框從未選中狀態(tài)變成選中狀態(tài)或從選中狀態(tài)變成未選中狀態(tài)時(shí),即選擇框的狀態(tài)發(fā)生變化時(shí),java.awt.event中的ItemEvent類將自動(dòng)創(chuàng)建一個(gè)事件對(duì)象,并將它傳遞給方法itemStateChanged(Item
28、Event e)中的參數(shù)e,監(jiān)視器將自動(dòng)調(diào)用該方法,對(duì)發(fā)生的事件做出處理。,49,7.5.3 選擇框事件,事件源: 監(jiān)視器: 處理事件的接口: 實(shí)現(xiàn)接口中的方法: 返回事件源的方法:,Checkbox,ItemListener,事件對(duì)象的getItemSelectable()方法,addItemListener(ItemListener l),itemStateChanged(ItemEvent e),50,7.5.3 選擇框事件,例1:有三種產(chǎn)品的介紹,當(dāng)選中某個(gè)產(chǎn)品時(shí),一個(gè)文本區(qū)顯示該產(chǎn)品的信息,另一個(gè)文本區(qū)根據(jù)購買情況顯示價(jià)格。Example13_3 例2:統(tǒng)計(jì)選票。Example13_
29、5,51,7.6.1 下拉列表,(1)java.awt包中的Choice類是用來建立下拉列表框的,即Choice類創(chuàng)建的一個(gè)對(duì)象就是一個(gè)下拉列表框。 (2)Choice類中有下列主要方法(均為public的): Choice()構(gòu)造方法:構(gòu)造下拉列表框。 addItem (String s):向下拉列表中增加一個(gè)選項(xiàng)。 getSelectedIndex():返回當(dāng)前選項(xiàng)的索引,從0開始。 getSelectedItem():返回當(dāng)前選項(xiàng)的字符串。 insert(String s,int n):將字符串插入下拉列表中的指定位置。 remove(int n):從下拉列表中刪除指定的選項(xiàng)。 remo
30、veAll():刪除全部選項(xiàng)。 addItemListener(ItemListener):向下拉列表框增加監(jiān)視器。,用來向用戶顯示一個(gè)下拉列表,52,7.6.1 處理下拉列表事件,當(dāng)用戶選中下拉列表中的選項(xiàng)時(shí),java.awt.event中的ItemEvent類將自動(dòng)創(chuàng)建一個(gè)事件對(duì)象,并將它傳遞給方法itemStateChanged(ItemEvent e)中的參數(shù)e,監(jiān)視器將自動(dòng)調(diào)用該方法,對(duì)發(fā)生的事件做出處理。,53,7.6.1 下拉列表事件,事件源: 監(jiān)視器: 處理事件的接口: 實(shí)現(xiàn)接口中的方法: 返回事件源的方法:,Choice,ItemListener,事件對(duì)象的getItemSe
31、lectable()方法,addItemListener(ItemListener l),itemStateChanged(ItemEvent e),54,7.6.1 下拉列表事件,例: Example14_2,55,7.6.2 滾動(dòng)列表,(1)java.awt包中的List類是用來建立滾動(dòng)列表框的,即List類創(chuàng)建的一個(gè)對(duì)象就是一個(gè)滾動(dòng)列表框。 (2)List類中有下列主要方法(均為public的): List()構(gòu)造方法:構(gòu)造滾動(dòng)列表框,使用默認(rèn)可見行。 List(int n)構(gòu)造方法:構(gòu)造滾動(dòng)列表框,可見行為n。 List(int n,boolean b)構(gòu)造方法:構(gòu)造滾動(dòng)列表框,可見行
32、為n,b為是否允許多項(xiàng)選擇。,56,7.6.2 滾動(dòng)列表的方法,add(String s):向滾動(dòng)列表中增加一個(gè)選項(xiàng)。 add(String s,int n):向滾動(dòng)列表的給定位置n增加一個(gè)選項(xiàng)。 getSelectedIndex():返回當(dāng)前選項(xiàng)的索引。 getSelectedItem():返回當(dāng)前選項(xiàng)的字符串。 remove(int n):從滾動(dòng)列表中刪除指定的選項(xiàng)。 removeAll():刪除全部選項(xiàng)。 addActionListener(ActionListener):向滾動(dòng)列表框增加雙擊事件的監(jiān)視器。 addItemListener(ItemListener):向滾動(dòng)列表框增加單擊
33、事件的監(jiān)視器。,57,7.6.2 處理滾動(dòng)列表事件,滾動(dòng)列表框有兩種事件:一種是鼠標(biāo)單擊某選項(xiàng),另一種是鼠標(biāo)雙擊某選項(xiàng)。單擊事件的事件源獲得監(jiān)視器的方法是addItemListener()。雙擊事件的事件源獲得監(jiān)視器的方法是addActionListener()。,58,7.6.2 滾動(dòng)列表事件單擊,事件源: 監(jiān)視器: 處理事件的接口: 實(shí)現(xiàn)接口中的方法: 返回事件源的方法:,List,ItemListener,事件對(duì)象的getItemSelectable()方法,addItemListener(ItemListener l),itemStateChanged(ItemEvent e),59,
34、7.6.2 滾動(dòng)列表事件雙擊,事件源: 監(jiān)視器: 處理事件的接口: 實(shí)現(xiàn)接口中的方法: 返回事件源的方法:,List,ActionListener,事件對(duì)象的getSource()方法,addActionListener(ActionListener l),actionPerformed(ActionEvent e),60,7.6.2 滾動(dòng)列表事件,例1:Example14_4 例2: Example14_6,61,7.7.1 面板,(1)Panel類 java.awt包的類Panel是用來建立面板的。因?yàn)镻anel類是Container(容器)的子類,因此Panel類及它的子類的實(shí)例也是一個(gè)
35、容器。在一個(gè)容器里添加若干個(gè)組件后,再放到另一個(gè)容器里,就叫做容器的嵌套。,62,7.7.1 面板,(2)ScrollPane類 與Panel創(chuàng)建的容器所不同的是,ScrollPane帶有滾動(dòng)條,稱為滾動(dòng)窗口。但只能向滾動(dòng)窗口添加一個(gè)組件。所以,經(jīng)常將一些組件添加到一個(gè)面板容器中,然后再把這個(gè)面板添加到滾動(dòng)窗口中。ScrollPane有兩個(gè)構(gòu)造方法: 1)ScrollPane():創(chuàng)建滾動(dòng)窗口,滾動(dòng)條初始不可見,當(dāng)添加的組件的可見范圍大于滾動(dòng)窗口時(shí),滾動(dòng)條自動(dòng)出現(xiàn)。 2)ScrollPane(int a):創(chuàng)建滾動(dòng)窗口,參數(shù)指定滾動(dòng)條的初始狀態(tài)。a取下列3個(gè)值之一:ScrollPane.SCR
36、OLLBARS_ALWAYSScrollPane.SCROLLBARS_AS_NEEDEDScrollPane.SCROLLBARS_NEVER,63,7.7.2 畫布,畫布是一個(gè)可以在上面繪畫的簡單組件,不是容器。java.awt包中的類Canvas負(fù)責(zé)創(chuàng)建畫布對(duì)象,并在子類中重寫父類的方法:paint。需要注意的是,一定要在創(chuàng)建畫布的類的構(gòu)造方法中給出畫布的尺寸。,64,7.7.2 畫布,例1: 小程序Example11_4。 例2:應(yīng)用程序Example11_5。,65,7.8.1 窗口,java的java.awt包中的Frame類或子類創(chuàng)建的一個(gè)對(duì)象就是一個(gè)窗口(它也是一個(gè)容器)。默認(rèn)
37、布局是BorderLayout布局。Frame類的構(gòu)造方法是:Frame():創(chuàng)建無名窗口Frame(String s):創(chuàng)建名字為字符串s的窗口 Frame類的主要方法: setVisible(boolean b):設(shè)置窗口是否可見。 pack():用緊湊方式顯示窗口。若不使用該方法,窗口初始顯示時(shí)可能看不到窗口的組件,當(dāng)用戶調(diào)整窗口的大小時(shí)才能看到這些組件。,66,7.8.1 窗口,setTitle(String name):設(shè)置窗口的名字。 getTitle():獲取窗口的名字。 setResizable(boolean b):設(shè)置窗口的大小是否可調(diào)。 例:學(xué)生成績登記表的應(yīng)用程序Exa
38、mple15_3。,67,7.8.2 向窗口增加菜單,菜單的創(chuàng)建需要菜單條、菜單和菜單項(xiàng)。菜單項(xiàng)添加到菜單里,菜單添加到菜單條里,菜單條再通過setMenuBar(MenuBar)方法添加到窗口中。 1)菜單條: java.awt包中的MenuBar類創(chuàng)建的對(duì)象就是一個(gè)菜單條。 2)菜單: java.awt包中的Menu類創(chuàng)建的對(duì)象就是一個(gè)菜單。,Menu類的主要方法:,Menu():建立一個(gè)空標(biāo)題的菜單 Menu(String s):建立一個(gè)標(biāo)題為s的菜單。 add(MenuItem item):向菜單中添加由參數(shù)item指定的菜單選項(xiàng)對(duì)象。 add(String s):向菜單增加指定的選項(xiàng)
39、。 getItem(int n):得到指定索引處的選項(xiàng)。 getItemCount():得到菜單選項(xiàng)數(shù)目。 insert(MenuItem item,int n):在菜單的指定位置插入菜單選項(xiàng)。 insert(String s,int n):在菜單的指定位置插入菜單選項(xiàng)。 remove(int n):刪除菜單的指定位置的菜單選項(xiàng)。 removeAll():刪除菜單的所有選項(xiàng)。,69,7.8.2 向窗口增加菜單,3)菜單項(xiàng): MenuItem類是負(fù)責(zé)創(chuàng)建菜單項(xiàng)的,即MenuItem的一個(gè)實(shí)例就是一個(gè)菜單項(xiàng)。菜單項(xiàng)將被放在菜單里。,MenuItem類的主要方法:,MenuItem():構(gòu)造無標(biāo)題菜
40、單項(xiàng)。 MenuItem(String s):構(gòu)造有標(biāo)題菜單項(xiàng)。 setEnabled(boolean b):設(shè)置當(dāng)前菜單項(xiàng)是否可被選擇。 getLabel():得到菜單選項(xiàng)的名字。 addActionListener(ActionListener):向菜單項(xiàng)增加監(jiān)視器。,71,7.8.2 處理菜單項(xiàng)事件,當(dāng)用戶用鼠標(biāo)單擊某個(gè)選項(xiàng)時(shí),java.awt.event包中的ActionEvent類將自動(dòng)創(chuàng)建一個(gè)事件對(duì)象,并將它傳遞給方法actionPerformed(ActionEvent e)中的參數(shù)e,監(jiān)視器將自動(dòng)調(diào)用該方法,對(duì)發(fā)生的事件做出處理。,72,7.8.2 菜單項(xiàng)上的事件,事件源: 監(jiān)
41、視器: 處理事件的接口: 實(shí)現(xiàn)接口中的方法: 返回事件源的方法:,MenuItem,ActionListener,事件對(duì)象的getSource()方法,addActionListener(ActionListener l),actionPerformed(ActionEvent e),73,7.8.2 菜單項(xiàng)上的事件,例:計(jì)算常見的幾何圖形的面積。Example15_6,74,7.8.3 使用適配器,問題:窗口標(biāo)題欄中的關(guān)閉按鈕不工作。 這是因?yàn)槌绦蛑袥]有使用適配器或未實(shí)現(xiàn)WindowListener接口。 適配器類和監(jiān)聽器接口使用對(duì)比: 詳見第7章例中的TestAdapter.java和Te
42、stListener.java。,75,7.9 建立對(duì)話框,(1)對(duì)話框使用java.awt中的Dialog類創(chuàng)建,它也是一個(gè)容器。 (2)對(duì)話框的主要方法: Dialog(Frame f,String s):構(gòu)造一個(gè)有標(biāo)題的初始不可見的對(duì)話框。 S設(shè)置名字, f設(shè)置對(duì)話框所依賴的窗口。 Dialog(Frame f,String s,Boolean b):構(gòu)造一個(gè)帶有模式的對(duì)話框,b為true有模式。,76,7.9.1 對(duì)話框的主要方法,getTitle():獲取對(duì)話框的標(biāo)題。 setTitle(String s):設(shè)置對(duì)話框的標(biāo)題。 setModal(boolean):設(shè)置對(duì)話框的模式。
43、setSize(int a,int b):設(shè)置對(duì)話框的大小。 setVisible(boolean):顯示或隱藏對(duì)話框。 對(duì)話框必須依賴一個(gè)窗口,因此要建立對(duì)話框,必須首先建立一個(gè)窗口類。 對(duì)話框的默認(rèn)布局是BorderLayout,在創(chuàng)建對(duì)話框時(shí),最好有對(duì)話框大小的設(shè)置。 例:Example16_2,77,7.9.2 FileDialog類,(1)FileDialog是Dialog類的子類,它創(chuàng)建的對(duì)象稱為文件對(duì)話框,文件對(duì)話框是一個(gè)打開文件和保存文件的對(duì)話框窗口。 (2)文件對(duì)話框的主要方法: FileDialog(Frame f, String s,int mode):建立文件對(duì)話框,f
44、為對(duì)話框所依賴的窗口對(duì)象,s是對(duì)話框的名字,mode的取值為Filedialog.LOAD或Filedialog.SAVE,決定對(duì)話框是打開文件模式或是保存文件模式。 getDirectory():獲取當(dāng)前文件對(duì)話框中的文件的所屬目錄。 getfile():獲取當(dāng)前文件對(duì)話框中顯示的文件的字符串表示,如果不存在則為null。 例:Example16_3,78,7.10 布局設(shè)計(jì),所謂布局設(shè)計(jì)就是控制組件在容器中的位置。Java中設(shè)置布局的類也叫布局管理器,最頂級(jí)的布局管理器是LayoutManager接口,它在java.awt 包中定義了常用的五種布局類: FlowLayout(流式布局) B
45、orderLayout (邊界布局) GridLayout(網(wǎng)格布局) GridBagLayout(網(wǎng)格包布局) CardLayout (卡片布局),79,7.10 布局設(shè)計(jì),布局類型的選用 每個(gè)布局管理器都有自己特定的用途。 要按行和列顯示幾個(gè)同樣大小的組件,GridLayout 會(huì)比較合。 要在盡可能大的空間里顯示一個(gè)組件,就要選擇 BorderLayout 或 GridBagLayout。,80,7.10 布局設(shè)計(jì),如何設(shè)置布局 每個(gè)容器(Container對(duì)象)都有一個(gè)與它相關(guān)的缺省的布局管理器。 - Applet 的缺省布局是 FlowLayout 。 在沒有設(shè)置新的布局前,在容器中
46、添加組件都按照該容器的缺省布局排列。 可以通過setLayout( )方法為容器設(shè)置新的布局。,81,7.10.1 FlowLayout布局,FlowLayout是Panel型容器和Applet型容器的默認(rèn)使用的布局。遵循這種布局的容器將其中的組件按加入的先后順序從左到右排列,一行排滿之后就轉(zhuǎn)向下一行繼續(xù)從左到右排列,每一行中的組件都居中排列。自動(dòng)調(diào)用組件的setPreferredSize()方法,使用組件的最佳尺寸來顯示。 在該布局下,如果改變窗口的大小,那么組件的排列方式也會(huì)隨著變化,但是,組件的大小不會(huì)改變,總是保持自然狀態(tài)。 對(duì)于一個(gè)原本不使用FlowLayout布局的容器,若需要將其
47、布局改為FlowLayout,可以用Container類提供的“setLayout(new FlowLayout();”方法為容器設(shè)定布局。,82,7.10.1 FlowLayout布局,FlowLayout的構(gòu)造函數(shù)有: FlowLayout( ):生成一個(gè)默認(rèn)的流式布局。 FlowLayout(int alignment):可以設(shè)定每一行組件的對(duì)齊方式 。 FlowLayout(int alignment,int hgap,int vgap):可以設(shè)定組件間的水平和垂直距離。,FlowLayout mylayout = new FlowLayout(); FlowLayout exLayo
48、ut = new FlowLayout(FlowLayout.RIGHT); setLayout(exlayout); / 為容器設(shè)置新布局,83,7.10.2 BorderLayout布局,BorderLayout是Frame型容器和Dialog型容器默認(rèn)使用的布局。遵循這種布局的容器,將其容器內(nèi)的空間簡單地劃分為東、南、西、北、中5個(gè)區(qū)域,每加入一個(gè)組件都應(yīng)指明把這個(gè)組件加在哪個(gè)區(qū)域中。 如果容器中需要加入超過5個(gè)組件,就必須使用容器的嵌套或改用其它的布局策略。 BorderLayout構(gòu)造方法如下: public BorderLayout() 所包含的組件間沒有間距。 public Bo
49、rderLayout(int hgap,int vgap) 按參數(shù)指定的組件間間距構(gòu)造布局管理器。 對(duì)于一個(gè)原本不使用BorderLayout布局的容器,若需要將其布局改為BorderLayout,可以用“setLayout(new BorderLayout();”方法為容器設(shè)定布局。,84,7.10.2 BorderLayout布局,BorderLayout 類定義了幾個(gè)常量值以指定相應(yīng)區(qū)域: BorderLayout.NORTH 對(duì)應(yīng)容器的頂部 BorderLayout.EAST 對(duì)應(yīng)容器的右部 BorderLayout.SOUTH 對(duì)應(yīng)容器的底部 BorderLayout.WEST 對(duì)應(yīng)
50、容器的左部 BorderLayout.CENTER 對(duì)應(yīng)容器的中部 加入組件方法: void add(Component Obj, int region);,. . . setLayout(new BorderLayout(); Button btnEast=new Button(東); Button btnWest=new Button(西); Button btnNorth=new Button(北); Button btnSouth=new Button(南); Button btnCenter=new Button(中); add(btnEast,BorderLayout.EAST);
51、 add(btnWest,BorderLayout.WEST); add(btnNorth,BorderLayout.NORTH); add(btnSouth,BorderLayout.SOUTH); add(btnCenter,BorderLayout.CENTER); . . .,85,7.10.2 BorderLayout布局,注意: (1)如果不指定方向,則所有的組件都居中放置。 (2)BorderLayout不能保持組件的自然狀態(tài),但是可以保證南北方向組件的高度以及東西方向組件的寬度。 (3)當(dāng)向BorderLayout布局的容器中添加了多余5個(gè)的組件時(shí),后面添加的組件會(huì)占用前面添加
52、組件的位置。,86,7.10.3 GridLayout,GridLayout布局是使用較多的布局,其基本布局策略是把容器劃分成若干行乘若干列的網(wǎng)格區(qū)域。組件就位于這些劃分出來的小格中。GridLayout比較靈活,劃分多少網(wǎng)格由程序自由控制,而且組件定位也比較精確。 GridLayout構(gòu)造方法如下: public GridLayout() 使用默認(rèn)設(shè)置,所有組件位于一行中,各占一列。 public GridLayout(int rows,int cols) 通過參數(shù)指定行數(shù)和列數(shù)。 public GridLayout(int rows,int cols,int hgap,int vgap) 通過參數(shù)指定行數(shù)、列數(shù)以及組件間的水平間距和垂直間距(單位是像素)。,. . . Button btn; / 聲明按鈕數(shù)組 String str=1,2,3,4,5,6,7,8,9; setLayout(new GridLayout(3,3); btn=new Buttonstr.length; / 創(chuàng)建按鈕數(shù)組 for(int i=0;istr.length;i+)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版亻黟拓么乃運(yùn)動(dòng)健身營養(yǎng)補(bǔ)充品訂購協(xié)議一
- 2025年度智慧社區(qū)管理與居民服務(wù)合同模板3篇
- 13《種子發(fā)芽了》說課稿-2023-2024學(xué)年科學(xué)三年級(jí)下冊青島版(五四制)
- 2024清工承包合同協(xié)議書-城市道路建設(shè)專項(xiàng)3篇
- 2024汽車駕駛安全設(shè)備檢測與維修合同3篇
- 福建省南平市武夷山上梅中學(xué)2022年高一數(shù)學(xué)文測試題含解析
- 福建省南平市吳屯中學(xué)高三生物模擬試題含解析
- 4《地球 我們的家園》《環(huán)境問題敲響了警鐘》說課稿-2023-2024學(xué)年道德與法治六年級(jí)下冊統(tǒng)編版
- 個(gè)人向公司租用pos機(jī)協(xié)議(2024版)2篇
- 2024清潔服務(wù)合同協(xié)議書-體育場館深度清潔維護(hù)協(xié)議3篇
- 無人機(jī)駕駛員培訓(xùn)計(jì)劃及大綱
- 初三化學(xué)學(xué)情分析
- 2023-2024學(xué)年重慶市康德卷生物高一第一學(xué)期期末檢測模擬試題含解析
- 4.與食品經(jīng)營相適應(yīng)的主要設(shè)備設(shè)施布局操作流程等文件
- 《施工組織設(shè)計(jì)編制指南》正文
- 【企業(yè)采購業(yè)務(wù)內(nèi)部控制研究文獻(xiàn)綜述及理論基礎(chǔ)2600字】
- (完整word)軟件驗(yàn)收單
- 施工員質(zhì)量員責(zé)任制月度考核記錄三
- 醫(yī)院重點(diǎn)崗位工作人員輪崗制度
- 第二章植物纖維
- 《論語》中英對(duì)照(理雅各譯)
評(píng)論
0/150
提交評(píng)論