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