已閱讀5頁,還剩108頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第七講 AWT組件及事件處理,7.1 Java窗口 7.2 文本框 7.3 內(nèi)部類實例做監(jiān)視器 7.4 按鈕與標(biāo)簽 7.5 菜單項 7.6 文本區(qū) 7.7 面板 7.8 布局,7.9 畫布 7.10 選擇型組件 7.11 Component類的常用方法 7.12 窗口事件 7.13 鼠標(biāo)事件 7.14 焦點事件 7.15 鍵盤事件,教學(xué)目的: 1.掌握圖形用戶界面中各種基本組件的屬性及使用方法; 2.掌握圖形用戶界面的事件處理機(jī)制。 教學(xué)內(nèi)容: 本講主要介紹Java GUI中各種組件的用法,及相應(yīng)的事件處理機(jī)制。,重點: 1各組件的屬性及使用。 2. 事件的處理方法。 難點: GUI中的事件處理機(jī)制。,補(bǔ)充知識,一、Java圖形用戶界面 圖形用戶界面(GUI,Graphical User Interface)是為應(yīng)用程序提供一個圖形化的界面,程序通過GUI與用戶交互,GUI能使一個應(yīng)用程序具有與眾不同的“外觀”與“感覺”。 二、容器 容器(Container)是組件(Component)的抽象子類,在該類中允許裝入其他的組件,要裝入的組件也可以是容器,在這些窗口中還可以裝入其他的組件,這樣可以創(chuàng)建完整的層次結(jié)構(gòu)。容器有助于在屏幕上布置GUI組件。最常用的容器是Panel和Frame。,補(bǔ)充知識,三、 java.awt中的各個類,四、圖形組件類的繼承關(guān)系(補(bǔ)充知識),補(bǔ)充知識,五、窗口類 AWT提供了三個在屏幕上顯示窗口的組件:Window、Frame和Dialog。這三個組件都用于顯示窗口,而且相互之間的區(qū)別也不明顯,因此有時候很難確定到底使用哪個組件更好。,補(bǔ)充知識,1、窗口(Window) java.awt.Window是三個窗口組件中最基本的組件,它實際上是Frame與Dialog組件的超類。窗口組件沒有邊界、標(biāo)題欄與菜單欄,而且大小不可以調(diào)整。 常用窗口實現(xiàn)的界面包括:產(chǎn)品信息的封面(如Outlook等軟件啟動時,顯示在屏幕中間且?guī)酌牒笞詣酉У姆饷娲翱?,提示幫助信息(如使用金山詞霸等軟件時,移動鼠標(biāo)到某個英文單詞上時自動彈出的解釋信息)等。,補(bǔ)充知識,2、框架(Frame) java.awt.Frame是Window的一個子類,它是帶有標(biāo)題欄和邊界的窗口,而且允許調(diào)整大小。另外,用戶還可以為框架附加一個菜單欄。用戶在程序設(shè)計過程中,當(dāng)程序窗口需要圖表化或者需要包含菜單欄時,則可以選擇使用框架組件。 構(gòu)造一個框架后,可以用add()方法來給框架添加組件??蚣艿娜笔〔季止芾砥鲗傩允荁orderLayout。可以用setLayout()方式來改變布局管理器屬性。,補(bǔ)充知識,3、對話框(Dialog) java.awt.Dialog也是Window的擴(kuò)展類。與框架相同的是,對話框也擁有邊界與標(biāo)題欄,而且也可以調(diào)整大??;而與框架不同的是,對話框不支持附加菜單欄,而且對話框可以模式化屬性設(shè)置,這是窗口和框架都不允許的。因此,如果用戶在程序設(shè)計過程中需要創(chuàng)建一個臨時窗口與用戶交換信息時,使用模式對話框是最方便的。,補(bǔ)充知識,另外,AWT中還提供了Dialog類的一個常用的擴(kuò)展類FileDialog(文件對話框)。它可以為用戶選擇一個待打開或保存的文件。 文件對話框是文件選擇設(shè)備的一個實現(xiàn)。它有自己的自由窗口以及窗口元素,并且允許用戶瀏覽文件系統(tǒng),以及為以后的操作選擇一個特定的文件。(詳見例程),7.1 Java窗口,Frame類是Container類的間接子類。當(dāng)需要一個窗口時,可使用Frame或其子類創(chuàng)建一個對象。窗口也是一個容器,可以向窗口添加組件。需要注意的是,窗口默認(rèn)地被系統(tǒng)添加到顯示器屏幕上。因此,不允許將一個窗口添加到另一個容器中。,7.1 Java窗口,一、 Frame常用方法 1Frame() 該構(gòu)造方法可以創(chuàng)建一個無標(biāo)題的窗口,窗口的默認(rèn)布局為BorderLayout布局。 2Frame(String s) 該構(gòu)造方法可以創(chuàng)建一個標(biāo)題為s的窗口,窗口的默認(rèn)布局為BorderLayout布局。 3public void setBounds(int a,int b,int width,int height) 窗口調(diào)用該方法可以設(shè)置出現(xiàn)在屏幕上時的初始位置是(a,b),即距屏幕左面a個像素、距屏幕上方b個像素;窗口的寬是width,高是height。,7.1 Java窗口,4public void setSize(int width,int height) 設(shè)置窗口的大小,窗口在屏幕出現(xiàn)是默認(rèn)位置是(0,0)。 5public void setVisible(boolean b) 設(shè)置窗口是可見還是不可見,窗口默認(rèn)是不可見的。 6public void setResizable(boolean b) 設(shè)置窗口是否可調(diào)整大小,窗口默認(rèn)是可調(diào)整大小的。,7.1 Java窗口,二、菜單條、菜單、菜單項 java.awt包中的Menubar類是負(fù)責(zé)創(chuàng)建菜單條的,即Menubar的一個實例就是一個菜單條。Frame類有一個將菜單條放置到窗口中的方法:setMenuBar(MenuBar bar); java.awt包中的Menu類是負(fù)責(zé)創(chuàng)建菜單的,即Menu的一個實例就是一個菜單 java.awt包的MunuItem類負(fù)責(zé)創(chuàng)建菜單項,即MenuItem的一個實例就是一個菜單項。,例7.1,import java.awt.*; class FirstWindow extends Frame MenuBar menubar=new MenuBar(); Menu menu; MenuItem item1, item2; setBounds(0,0,dim.width,dim.heigth/2); setTitle(s); item2=new MenuItem(“打開”); setMenuBar(menubar); public class Example7_1,7.2文本框,Java.awt包中的TextField類是專門用來建立文本框的,用戶可以在文本框中輸入單行文本。,7.2文本框,.TextField類的主要方法 1)TextField(int x) 如果使用這個構(gòu)造方法創(chuàng)建文本框?qū)ο?,文本框中的可見字符序列的長度為 x個機(jī)器字符長。文本框是可編輯的,用戶可以在文本框中輸入若干個字符。 2)TextField(String s ) 如果使用這個構(gòu)造方法創(chuàng)建文本框?qū)ο?,則文本框的初始字符串為s。文本框是可編輯的,可以在文本框中輸入若干個字符。 3)public void setText(String s) 文本框?qū)ο笳{(diào)用該方法可以設(shè)置文本框中的文本為參數(shù)s指定的文本,文本框中先前的文本將被清除。,7.2文本框,4)public String getText() 文本框?qū)ο笳{(diào)用該方法可以獲取文本框中的文本。 5)public void addActionListener (ActionListener l)文本框?qū)ο笳{(diào)用該方法可以向文本框增加動作監(jiān)視器(將監(jiān)視器注冊到文本框)。,7.2文本框,2.文本框上的ActionEvent事件 學(xué)習(xí)組件除了了解組件的屬性和功能外,一個更重要的方面是學(xué)習(xí)怎樣處理組件上發(fā)生的界面事件。 在學(xué)習(xí)處理事件時,必須很好地掌握事件源、監(jiān)視器、處理事件的接口這三個概念。 通過處理文本框這個具體的組件上的事件,來掌握處理事件的基本原理。,例7.2,class WindowText extends Frame TextFiled text1=new TextFiled(“輸入密碼:”,10); text1.setEditable(false); super(s); setLayout(new FlowLayout(); text2.setEchochar(*); ,7.2文本框,3、Java的事件處理模式 1)事件源:能夠產(chǎn)生事件的對象都可以成為事件源,如文本框、按鈕、下拉式列表等。也就是說,事件源必須是一個對象,而且這個對象必須是Java認(rèn)為能夠發(fā)生事件的對象。 2)監(jiān)視器:需要一個對象對事件源進(jìn)行監(jiān)視,以便對發(fā)生的事件作出處理。事件源通過調(diào)用相應(yīng)的方法將某個對象作為自己的監(jiān)視器。例如,對于文本框,這個方法是: addActionListener(監(jiān)視器); 創(chuàng)建該監(jiān)視器對象的類必須聲明實現(xiàn)相應(yīng)的接口 ,一個監(jiān)聽器對象是一個實現(xiàn)了專門的監(jiān)聽器接口的類的實例。,7.2文本框,3)處理事件的接口:在文本框獲得輸入焦點之后,如果用戶按回鍵,Java運(yùn)行系統(tǒng)就自動用ActionEvent類創(chuàng)建了一個對象,即發(fā)生了ActionEvent事件 當(dāng)事件源發(fā)生事件時,監(jiān)視器就自動調(diào)用執(zhí)行被類實現(xiàn)的某個接口方法。 4)Event handlers(事件處理器):接收事件對象、解釋事件對象并處理用戶交互的方法。,處理事件示意圖,7.2文本框,4、引入事件處理機(jī)制后的編程基本方法如下: 對java.awt中組件實現(xiàn)事件處理必須使用java.awt.event包,所以在程序開始應(yīng)加入import java.awt.event.*語句。 用如下語句設(shè)置事件監(jiān)聽者: 事件源.addXXListener(XXListener代表某種事件監(jiān)聽者)。,7.2文本框, 事件監(jiān)聽者所對應(yīng)的類實現(xiàn)事件所對應(yīng)的接口XXListener,并重寫接口中的全部方法。這樣就可以處理圖形用戶界面中的對應(yīng)事件了。要刪除事件監(jiān)聽者可以使用語句: 事件源.removeXXListener; (詳見課本例子例7.3),例7.3,import java.awt.*; import java.awt.event.*; class MyWindow extends Frame implements ActionListener text1.addActionListener(this); text2.addActionListener(this); public void actionPerformed(ActionEvent e) if(e.getSource()=text1) String word=text1.getText(); else if(e.getSource()=text2) ,補(bǔ)充: Java常用事件 _列表,7.3內(nèi)部類實例做監(jiān)視器,內(nèi)部類實例做監(jiān)視器的本質(zhì)就是:用內(nèi)部類實現(xiàn)了相應(yīng)的接口,使用其定義的對象做監(jiān)視器。(詳見課本例7.5),例7.5,text1.addActionListener(police); /內(nèi)部類的實例做監(jiān)視器 text1.addActionListener(new ActionListener() /和接口有關(guān)的匿名類的實例做監(jiān)視器 public void actionPerformed(ActionEvent e) String number=e.getActionCommand(); int n=Integer.parseInt(number); int m=n*n; text2.setText(n+“的平方是:“+m); );,7.4按鈕與標(biāo)簽,1、標(biāo)簽組件 標(biāo)簽的功能是只顯示文本,不能動態(tài)地編輯 文本。Lalel類的實例就是一個標(biāo)簽。 標(biāo)簽使用Label類來創(chuàng)建,而Label類是從 Component類直接擴(kuò)展而來的。Label類的構(gòu)造 函數(shù)及常用方法 如圖所示。,7.4按鈕與標(biāo)簽,7.4按鈕與標(biāo)簽,2、按鈕組件 Java.awt包中的Button類是專門用來建立按鈕的。而Button類是由Component類直接擴(kuò)展的,即Button類創(chuàng)建的一個對象就是一個按鈕。要想使Button可見,必須使用add方法將它們添加到一個容器中。 Button類的構(gòu)造函數(shù)及常用方法如圖所示。,7.4按鈕與標(biāo)簽,7.4按鈕與標(biāo)簽,3、按鈕的ActionEvent事件 按鈕可以發(fā)生ActionEvent事件,當(dāng)按鈕獲得監(jiān)視器之后,用鼠標(biāo)單擊按鈕,就發(fā)生ActionEven事件。,例7.6,Label 提示條; TextField 輸入框; Button buttonGetNumber,buttonEnter; 提示條=new Label(“輸入你的猜測: “, Label.CENTER); 提示條.setBackground(Color.cyan); buttonGetNumber=new Button(“得到一個隨機(jī)數(shù)“); buttonEnter.addActionListener(this); buttonGetNumber.addActionListener(this);,7.5菜單項,菜單及其相關(guān)的類在java.awt軟件包中的 層次關(guān)系如下:,7.5菜單項,MenuBar類用于創(chuàng)建菜單欄,菜單欄是菜單的容器。 Menu類用于創(chuàng)建菜單,菜單中包含若干菜單項,并將其添加到菜單欄上。當(dāng)使用鼠標(biāo)點擊一個菜單時,就將展開該菜單,并顯示一列菜單項。 MenuItem類用于創(chuàng)建菜單項。一個菜單項就是包含在菜單中的一個字符串,當(dāng)選中它時將會執(zhí)行一個動作。,7.5菜單項,CheckboxMenuItem類用于創(chuàng)建復(fù)選框菜單。復(fù)選框菜單項就是帶有選擇標(biāo)記的菜單項。當(dāng)選中復(fù)選框菜單項時,在該菜單項左邊出現(xiàn)一個選擇標(biāo)記。如果再次選中該項,則該選項左邊的選擇標(biāo)記就會消失。 (見補(bǔ)充例程MenuDemo , pop MenuDemo ),7.5菜單項,當(dāng)單擊某個菜單項時可以發(fā)生ActionEvent事件,因此,我們可以通過處理ActionEvent事件實現(xiàn)我們想要進(jìn)行的操作。 另外,可以使用MenuShotcut類為菜單項設(shè)置快捷鍵,該類的一個構(gòu)造方法是: MenuShotcut (int key); 其中key可以取值:KeyEvent.VK_A KeyEvent.VK_Z; 菜單項使用setShortcut(MenuShortcut k)方法來設(shè)置快捷鍵。,例7.8,menubar=new MenuBar(); menu=new Menu(“文件“); itemExit=new MenuItem(“退出“); itemExit.setShortcut(new MenuShortcut(KeyEvent.VK_E); menu.add(itemExit); menubar.add(menu); itemExit.addActionListener(this);,7.6文本區(qū),java.awt包中的類TextArea類是專門用來建立文本區(qū)的,即TextArea創(chuàng)建的一個對象稱做一個文本區(qū)。用戶可以在文本區(qū)輸入多行的文本。,7.6文本區(qū),1. TextArea類主要方法 1)TextArea(int x,int y) 使用這個構(gòu)造方法創(chuàng)建文本區(qū)對象,文本框可見行數(shù)和列數(shù)數(shù)分別為x和y。文本區(qū)有水平和垂直滾動條。 2)public void setText(String s) 文本區(qū)對象調(diào)用該方法可以將文本區(qū)中的文本設(shè)置為參數(shù)s指定的文本,文本區(qū)中先前的文本將被清除。,7.6文本區(qū),3)public String getText() 文本區(qū)對象調(diào)用該方法可以獲取文本區(qū)中的文本。 4)public void append(String s) 文本區(qū)對象調(diào)用該方法可以在文本區(qū)中尾加文本。 5)addTextListener(TextListener) 文本區(qū)對象調(diào)用該方法可以向文本框增加文本監(jiān)視器。,7.6文本區(qū),.文本區(qū)上的TextEvent事件 1)對于文本區(qū)事件源,可以發(fā)生TextEvent事件。當(dāng)文本區(qū)獲得監(jiān)視器之后,在文本區(qū)域中改變文本的內(nèi)容,如鍵入字符、刪除字符時,TextEvent類將自動創(chuàng)建一個事件對象。 2)發(fā)生TextEvent事件的事件源獲得監(jiān)視器的方法是addTextListener(監(jiān)視器),由于文本區(qū)可以發(fā)生TextEvent事件,所以TextArea類提供了addTextListener方法。,7.6文本區(qū),3)處理發(fā)生TextEvent 事件的接口是TextListener,該接口中只有一個的方法: textValueChanged (TextEvent e); 4)創(chuàng)建文本區(qū)監(jiān)視器的類必須要實現(xiàn)TextListener接口。當(dāng)文本區(qū)發(fā)生TextEvent事件時,監(jiān)視器將自動調(diào)用方法: textValueChanged (TextEvent e) 對發(fā)生的事件作出處理。,例7.9,class WindowTextArea extends Frame implements TextListener,ActionListener TextArea text1,text2; text1=new TextArea(6,15); text2=new TextArea(6,15); text2.setEditable(false); text1.addTextListener(this); buttonClear.addActionListener(this); public void textValueChanged(TextEvent e) public void actionPerformed(ActionEvent e) ,public void textValueChanged(TextEvent e) String s=text1.getText(); StringTokenizer fenxi=new StringTokenizer(s,“ ,n“); int n=fenxi.countTokens(); String a=new Stringn; for(int i=0;i=n-1;i+) String temp=fenxi.nextToken(); ai=temp; Arrays.sort(a); text2.setText(null); for(int i=0;in;i+) text2.append(ai+“n“); ,7.7面板,1、Panel類 java.awt包的Panel類是Container(容器)的子類,因此Panel類及其子類的實例也是一個容器,Panel型容器的默認(rèn)布局是FlowLayout型布局。Panel類創(chuàng)建的對象稱做面板,我們經(jīng)常在一個面板里添加若干個組件后,再把面板放到另一個容器里。,例7.10,class Mypanel extends Panel implements ActionListener setBackground(Color.pink); backColor=getBackground(); button1.addActionListener(this); button2.addActionListener(this); class WindowPanel extends Frame implements ActionListener panel1=new Mypanel(); panel2=new Mypanel(); button.addActionListener(this);,7.7面板,2、ScrollPane類 java.awt包中的ScrollPane類也是Container類的子類,因此該類創(chuàng)建的對象也是一個容器,稱為滾動面板。我們可以把一個組件放到一個滾動面板中,然后通過滾動條來觀察這個組件。與Panel創(chuàng)建的容器所不同的是,ScrollPane帶有滾動條,而且只能向滾動面板添加一個組件。,7.7面板,滾動面板(ScrollPane)實現(xiàn)了為單一組件提供水平方向或者/和豎直方向的滾動條。滾動條的顯示方式可以設(shè)置成三種模式:需要的時候才顯示(SCROLLBARS_AS_NEEDED(默認(rèn)),只有當(dāng)滾動面板需要的時候才創(chuàng)建并顯示滾動條)、總是顯示(SCROLLBARS_ALWAYS,滾動面板總是創(chuàng)建并顯示滾動條)和決不顯示(SCROLLBARS_NEVER,滾動面板決不創(chuàng)建和顯示滾動條)。 ScrollPane類的構(gòu)造函數(shù)如下:,7.7面板,例7.11,Panel p; ScrollPane scrollpane; p=new Panel(); scrollpane=new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS); scrollpane.add(p); add(scrollpane);,7.8布局,布局管理器會依據(jù)組件的加入順序決定其擺放方式。組件的大小、形狀、位置,在不同的布局管理器下有顯著的不同。此外,布局管理器會自動適應(yīng)小程序或應(yīng)用程序窗口的大小,所以如果某個窗口的大小改變了,那么其上各個組件的大小、形狀、位置都有可能發(fā)生改變。,7.8布局,Java提供以下幾種布局管理器:流布局(Fl-owLayout)、邊界布局(BorderLayout)、網(wǎng)格布局(GridLayout)、網(wǎng)格包布局(GridBagLayout)、卡片布局(CardLayout)和手工布局。 Panel、Applet的默認(rèn)布局為流布局, Window、Frame的默認(rèn)布局為邊界布局。容器可以使用方法:setLayout(布局對象);來設(shè)置自己的布局。,7.8布局,1、FlowLayout布局 FlowLayout類創(chuàng)建的對象稱做FlowLayout型布局。FlowLayout型布局是Panel型容器的默認(rèn)布局,即Panel及其子類創(chuàng)建的容器對象,如果不專門為其指定布局,則它們的布局就是FlowLayout型布局。 如果一個容器使用這個FlowLayout型布局,組件按照加入的先后順序從左向右排列,一行排滿之后就轉(zhuǎn)到下一行繼續(xù)從左至右排列。,7.8布局,7.8布局,例7.12,FlowLayout flow=new FlowLayout(); flow.setAlignment(FlowLayout.LEFT); flow.setHgap(2); flow.setVgap(8); setLayout(flow);,7.8布局,2、BorderLayout布局 BorderLayout 布局是Window型容器的默認(rèn)布局,例如Frame、Dialog都是Window類的子類,它們的默認(rèn)布局都是BorderLayout 布局。 如果一個容器使用這種布局,那么容器空間簡單地劃分為東、西、南、北、中五個區(qū)域,中間的區(qū)域最大。,7.8布局,注意:在邊界布局下add方法的使用方法: add(Component c, int position);,7.8布局,其中參數(shù)position可取以下常量之一:BorderLayout.NORTH,BorderLayout.SOUTH,BorderLayout.EAST,BorderLayout.WEST,BorderLayout.CENTER。 例如:下面語句將按鈕eastButton放置在東區(qū): add(eastButton, BorderLayout.EAST); 由于組件放置的位置必須由參數(shù)指定,因此可按任何順序向容器添加組件。,例7.12,Frame win=new Frame(“窗體“); win.add(bNorth,BorderLayout.NORTH); win.add(bSouth,BorderLayout.SOUTH); win.add(bEast,BorderLayout.EAST); win.add(bWest,BorderLayout.WEST); win.add(bCenter,BorderLayout.CENTER);,7.8布局,3、CardLayout 布局 使用CardLayout 的容器可以容納多個組件,但是實際上同一時刻容器只能從這些組件中選出一個來顯示,就像一疊“撲克牌”每次只能顯示最上面一張一樣,這個被顯示的組件將占據(jù)所有的容器空間,依次排序。,例7.14,CardLayout mycard; mycard=new CardLayout(); pCenter=new Panel(); pCenter.setLayout(mycard); mycard.first(pCenter); mycard.next(pCenter); mycard.last(pCenter);,7.8布局,4、GridLayout布局 網(wǎng)格布局將容器劃分成網(wǎng)格,這樣各個組件就可以按行列放置到每個網(wǎng)格中,每個組件的大小一樣(均分)。在向GridLayout添加組件時,其順序是從網(wǎng)格的左上角開始,從左向右排列,直到排滿一行,再從下一行開始從左向右依次排列。GridLayout類的構(gòu)造函數(shù)如下:,7.8布局,7.8布局,GridLayout的布局策略是把容器劃分成若干行乘若干列的網(wǎng)格區(qū)域,組件就位于這些劃分出來的小格中。GridLayout比較靈活,劃分多少網(wǎng)格由程序自由控制,而且組件定位也比較精確 由于GridLayout布局中每個網(wǎng)格都是相同大小并且強(qiáng)制組件與網(wǎng)格的大小相同,使得容器中的每個組件也都是相同的大小,顯得很不自然。為了克服這個缺點,你可以使用容器嵌套。,例7.15,GridLayout grid; grid=new GridLayout(12,12); setLayout(grid); Label label=new Label1212; labelij.setBackground(Color.black);,7.8布局,5、BoxLayout布局 盒式布局的容器將組件排列在一行或一列,這取決于創(chuàng)建盒式布局對象時,是否指定了是行排列還是列排列。 使用行(列)型盒式布局的容器將組件排列在一行(列),組件按加入的先后順序從左(上)向右(下)排列,容器的兩端是剩余的空間。和FlowLayou布局不同的是,使用行型盒式布局的容器只有一行(列),即使組件再多,也不會延伸到下一行(列),這些組件可能會被縮小大小,緊縮在這一行(列)中。,例7.16,import javax.swing.border.*; Box baseBox ,boxV1,boxV2; boxV1=Box.createVerticalBox(); boxV1.add(new Label(“姓名“); boxV1.add(Box.createVerticalStrut(8); baseBox=Box.createHorizontalBox(); baseBox.add(boxV1); baseBox.add(Box.createHorizontalStrut(10); baseBox.add(boxV2);,7.9畫布,java.awt包中的類Canvas負(fù)責(zé)創(chuàng)建畫布對象。創(chuàng)建畫布對象的常用辦法是用Canvas的子類來創(chuàng)建畫布對象,并在子類中重寫父類的public void paint(Graphics g)方法。該方法是Component類的一個方法,可以在其子類中重寫這個方法,當(dāng)重寫這個方法時,參數(shù)g是自動實例化的,這樣我們就可以在子類中使用 g調(diào)用相應(yīng)方法,比如畫串、畫圖形、圖像等。,例7.18,class Mycanvas extends Canvas public void paint(Graphics g) g.drawOval(x,y,2*r,2*r); Mycanvas canvas; canvas=new Mycanvas(); canvas.repaint();,7.10選擇型組件,1、選擇框 選擇框提供兩種狀態(tài),一種是選中,另一種是未選中。java.awt包中的Checkbox用來建立選擇框,即Checkbox創(chuàng)建的一個對象就是一個選擇框。 1) Checkbox類的常用方法,7.10選擇型組件,7.10選擇型組件,2)選擇框上的ItemEvent事件 選擇框可以發(fā)生ItemEvent事件,發(fā)生ItemEvent事件的事件源獲得監(jiān)視器的方法是:addItemListener(監(jiān)視器)。 創(chuàng)建監(jiān)視器的類必須實現(xiàn)ItemListener接口,該接口中只有一個的方法。當(dāng)在選擇框發(fā)生ItemEvent事件時,監(jiān)視器將自動調(diào)用接口方法: ItemStateChanged(ItemEvent e) 對發(fā)生的事件作出處理。,例7.19,class Mypanel1 extends Panel implements ItemListener Checkbox box1,box2,box3; CheckboxGroup sex; sex=new CheckboxGroup(); box1=new Checkbox(“男“,true,sex); box2=new Checkbox(“女“,false,sex); box1.addItemListener(this); box2.addItemListener(this);,public void itemStateChanged(ItemEvent e) Checkbox box=(Checkbox)e.getSource(); if(box.getState() int n=text.getCaretPosition(); text.insert(box.getLabel(),n); ,7.10選擇型組件,2、下拉列表 下拉列表框由Choice類創(chuàng)建,它只能從列表中選擇一個選項,當(dāng)用戶單擊旁邊下拉箭頭按鈕時,選項列表打開。 下拉式列表可以發(fā)生ItemEvent事件。當(dāng)下拉式列表獲得監(jiān)視器之后,用戶在下拉列表選項列表中選中某個選項時就發(fā)生ItemEvent事件。,例7.20,Choice choice; choice=new Choice(); choice.add(“音樂天地“); choice.add(“武術(shù)天地“); choice.addItemListener(this); add.addActionListener(this); text.addActionListener(this); del.addActionListener(this);,public void itemStateChanged(ItemEvent e) String name=choice.getSelectedItem(); int index=choice.getSelectedIndex(); area.setText(“n“+index+“:“+name); String name=text.getText(); choice.add(name); choice.select(name); area.append(“n列表添加:“+name);,7.10選擇型組件,3、滾動列表 滾動列表框由List類創(chuàng)建,用于顯示一系列的選項,用戶可以從中選擇一個或多個選項。 滾動列表和下拉列表的另一不同之處是,滾動列表除了可以發(fā)生ItemEvent事件外,還可以發(fā)生ActionEvent事件。當(dāng)用鼠標(biāo)單擊滾動列表的某個選項后,發(fā)生ItemEvent事件;當(dāng)用鼠標(biāo)雙擊某個選項后,發(fā)生ActionEvent事件。,7.11 Component類的常用方法,Component類是所有組件的父類,這一節(jié)介紹 Component類的常用方法 。 1、組件的顏色 public void setBackground(Color c) 設(shè)置組件的背景色。 public void setForeground(Color c) 設(shè)置組件的前景色。 public Color getBackground() 獲取組件的背景色。 public Color getForeground() 獲取組件的前景色。,7.11 Component類的常用方法,2、組件的字體 public void setFont(Font f) 組件調(diào)用該方法設(shè)置組件上的字體。例如,文本組件調(diào)用該方法可以設(shè)置文本組件中的字體。 public Font getFont() 組件調(diào)用該方法獲取組件上的字體。,7.11 Component類的常用方法,3、組件的大小與位置 public void setSize(int width,int height) 組件調(diào)用該方法設(shè)置組件的大小,參數(shù)width指定組件的寬度,height指定組件的高度。 public void setLocation(int x,int y) 組件調(diào)用該方法設(shè)置組件在容器中的位置,包含該組件的容器都有默認(rèn)的坐標(biāo)系,容器的坐標(biāo)系的左上角的坐標(biāo)是(0,0),參數(shù)x,y指定該組件的左上角在容器的坐標(biāo)系中的坐標(biāo),即組件距容器的左邊界 x個像素,距容器的上邊界 y 個像素。 public Dimension getSize() 組件調(diào)用該方法返回一個Dimension對象的引用,該對像實體中含有名字是width 和height的成員變量,方法返回的Dimension 對象的width的值就是組件的寬度、height的值就是當(dāng)前組件的高度。,7.11 Component類的常用方法,public Point getLocation() 組件調(diào)用該方法返回一個Point對象的引用,該對像實體中含有名字是x 和y的成員變量,方法返回的Point對象的x,y的值就是組件的左上角在容器的坐標(biāo)系中的x坐標(biāo)和y坐標(biāo)。 public void setBounds(int x,int y,int width,int height) 組件調(diào)用該方法設(shè)置組件在容器中的位置和組件的大小。該方法相當(dāng)于setSize方法和setLocation方法的組合。 public Rectangle getBounds() 組件調(diào)用該方法返回一個Rectangle對象的引用,該對象實體中含有名字是x、y、width 和height的成員變量,方法返回的Rectangle對象的x,y的值就是組件的左上角在容器的坐標(biāo)系中的x坐標(biāo)和y坐標(biāo),width和height的值就是當(dāng)前組件的寬度和高度。,7.11 Component類的常用方法,4、組件的激活與可見性 public void setEnabled(boolean b) 組件調(diào)用該方法可以設(shè)置組件是否可被激活,當(dāng)參數(shù)b取值true時,組件可以被激活,當(dāng)參數(shù)b取值false 時,組件不可激活。默認(rèn)情況下,組件是可以被激活的。 public void setVisible(boolean) 設(shè)置組件在該容器中的可見性,當(dāng)參數(shù)b取值true時,組件在容器中可見,當(dāng)參數(shù)b取值false 時,組件在容器中不可見。除了Window型組件外,其它類型組件默認(rèn)是可見的。,7.11 Component類的常用方法,5、組件上的光標(biāo) public void setCursor(Cursor c) 設(shè)置鼠標(biāo)指向組件時的光標(biāo)形狀。 可以使用 Cursor類的類方法直接獲得一個光標(biāo)對象,例如: Cursor c=Cursor. getPredefinedCursor (Cursor.HAND_CURSOR);,7.11 Component類的常用方法,6、paint方法與repaint方法 調(diào)用repaint()方法時,repaint()方法會再去調(diào)用update(Graphics g)方法。update(Graphics g)方法也是Component類中的一個方法,這個方法的功能是:清除paint()方法以前所畫的內(nèi)容,然后再調(diào)用paint方法。因此我們可以在子類中重寫update方法(即隱藏父類的方法),根據(jù)需要來清除哪些部分或保留哪些部分。,7.12窗口事件,Frame是Window的子類,凡是 Window子類創(chuàng)建的對象都可以發(fā)生WindowEvent類型事件,即窗口事件。 當(dāng)一個Frame窗口被激活、撤消激活、打開、關(guān)閉、圖標(biāo)化或撤消圖標(biāo)化時,就引發(fā)了窗口事件,即WindowEvent創(chuàng)建一個窗口事件對象。WindowEvent創(chuàng)建的事件對象調(diào)用getWindow()方法可以獲取發(fā)生窗口事件的窗口。窗口使用addWindowlistener方法獲得監(jiān)視器,創(chuàng)建監(jiān)視器對象的類必須實現(xiàn)WindowListener接口,該接口中有7個不同的方法。,7.12窗口事件,1、WindowListener接口中的方法 public void windowActivated(WindowEvent e) 當(dāng)窗口從非激活狀態(tài)到激活時,窗口的監(jiān)視器調(diào)用該方法。 public void windowDeactivated(WindowEvent e) 當(dāng)窗口激活狀態(tài)到非激活狀態(tài)時,窗口的監(jiān)視器調(diào)用該方法。 public void windowClosing(WindowEvent e) 當(dāng)窗口正在被關(guān)閉時,窗口的監(jiān)視器調(diào)用該方法。,7.12窗口事件,public void windowClosed(WindowEvent e) 當(dāng)窗口關(guān)閉后,窗口的監(jiān)視器調(diào)用該方法。 public void windowIconified(WindowEvent e) 當(dāng)窗口圖標(biāo)化時,窗口的監(jiān)視器調(diào)用該方法。 public void windowDeiconified(WindowEvent e) 當(dāng)窗口撤消圖標(biāo)化時,窗口的監(jiān)視器調(diào)用該方法。 public void windowOpened(WindowEvent e) 當(dāng)窗口打開時,窗口的監(jiān)視器調(diào)用該方法。,例7.25,class MyFrame extends Frame implements WindowListener addWindowListener(this);,7.12窗口事件,2、WindowAdapter適配器 為了方便,Java為那些聲明了多個方法的Listener接口提供了一個對應(yīng)的適配器(Adapter)類,在該類中實現(xiàn)了對應(yīng)接口的所有方法,只是方法體為空。 在創(chuàng)建新類時,可以不實現(xiàn)接口,而是只繼承某個適當(dāng)?shù)倪m配器,并且僅覆蓋所關(guān)心的事件處理方法即可。 接口及對應(yīng)的適配器類 如下所示:,7.12窗口事件,例7.26,class MyFrame extends Frame Boy police; addWindowListener(police); class Boy extends WindowAdapter,7.13鼠標(biāo)事件,任何組件上都可以發(fā)生鼠標(biāo)事件,如:鼠標(biāo)進(jìn)入組件、退出組件、在組件上方單擊鼠標(biāo)、拖動鼠標(biāo)等都觸發(fā)組件發(fā)生鼠標(biāo)事件,也就是說,組件可以成為發(fā)生鼠標(biāo)事件的事件源。 1、MouseListener接口,7.13鼠標(biāo)事件,使用MouseListener接口可以處理5種操作觸發(fā)的鼠標(biāo)事件: (1)在事件源上按下鼠標(biāo)鍵。 (2)在事件源上釋放鼠標(biāo)鍵。 (3)在事件源上擊鼠標(biāo)鍵。 (4)鼠標(biāo)進(jìn)入事件源。 (5)鼠標(biāo)退出事件源。 鼠標(biāo)事件的類型是MouseEvent,即當(dāng)發(fā)生鼠標(biāo)事件時,MouseEvent類自動創(chuàng)建一個事件對象。,7.13鼠標(biāo)事件,2、MouseListener接口中的方法: (1)mousePressed(MouseEvent) 負(fù)責(zé)處理在組件上按下鼠標(biāo)觸發(fā)的鼠標(biāo)事件,當(dāng)在組件上按下鼠標(biāo)時,監(jiān)視器將自動調(diào)用接口中的這個方法對事件作出處理。 (2)mouseReleased(MouseEvent) 負(fù)責(zé)處理在組件上釋放鼠標(biāo)觸發(fā)的鼠標(biāo)事件,當(dāng)在組件上釋放鼠標(biāo)時,監(jiān)視器將自動調(diào)用接口中的這個方法對事件作出處理。,7.13鼠標(biāo)事件,(3)mouseEntered(MouseEvent) 負(fù)責(zé)處理鼠進(jìn)入組件觸發(fā)的鼠標(biāo)事件,當(dāng)鼠標(biāo)進(jìn)入組件上方時,監(jiān)視器將自動調(diào)用接口中的這個方法對事件作出處理。 (4)mouseExited(MouseEvent) 負(fù)責(zé)處理鼠標(biāo)離開組件觸發(fā)的鼠標(biāo)事件,當(dāng)鼠標(biāo)離開組件時,監(jiān)視器自動調(diào)用接口中的這個方法對事件作出處理。 (5)mouseClicked(MouseEvent) 負(fù)責(zé)處理在組件上單擊或連擊鼠標(biāo)觸發(fā)的鼠標(biāo)事件,當(dāng)單擊或連擊鼠標(biāo)時,監(jiān)視器自動調(diào)用接口中的這個方法對事件作出處理。,例7.29,class MyCanvas extends Canvas implements MouseListener MyCanvas() setBackground(Color.cyan) ; addMouseListener(this); if(e.getModifiers()=InputEvent.BUTTON1_MASK) if(e.getModifiers()=InputEvent.BUTTON3_MASK),public class Example7_29 public static void main(String args) Frame f=new Frame(); f.set
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度私營企業(yè)商務(wù)用車租賃及維護(hù)服務(wù)合同3篇
- 二零二五年度養(yǎng)豬場養(yǎng)殖廢棄物資源化利用項目合作合同3篇
- 二零二五年度養(yǎng)牛產(chǎn)業(yè)鏈可持續(xù)發(fā)展合作協(xié)議3篇
- 2025年度智慧城市基礎(chǔ)設(shè)施建設(shè)投資入股協(xié)議3篇
- 二零二五年度農(nóng)村土地租賃與農(nóng)業(yè)廢棄物資源化利用及循環(huán)經(jīng)濟(jì)合作協(xié)議2篇
- 二零二五年度農(nóng)村土地承包經(jīng)營權(quán)流轉(zhuǎn)與農(nóng)業(yè)廢棄物資源化利用及循環(huán)農(nóng)業(yè)合作合同
- 2025年度農(nóng)村房屋買賣合同及附屬土地使用權(quán)轉(zhuǎn)讓協(xié)議2篇
- 2025年度新材料研發(fā)合伙人股權(quán)分配與市場推廣合同3篇
- 二零二五年度農(nóng)村墓地墓園祭祀活動策劃與執(zhí)行協(xié)議
- 2025年度養(yǎng)殖土地租賃及農(nóng)業(yè)廢棄物資源化利用協(xié)議3篇
- “青藍(lán)工程”師徒結(jié)對體育青年教師總結(jié)反思
- 設(shè)備維護(hù)檢查修理三級保養(yǎng)記錄表
- 施工安全風(fēng)險分析及應(yīng)對措施表
- 《針灸推拿》題庫
- 2023年上海市初中物理競賽復(fù)賽試題銀光杯
- GB/T 20475.2-2006煤中有害元素含量分級第2部分:氯
- GB 18218-2000重大危險源辨識
- 神通數(shù)據(jù)庫管理系統(tǒng)v7.0企業(yè)版-2實施方案
- 油田視頻監(jiān)控綜合應(yīng)用平臺解決方案
- 福建省泉州市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名明細(xì)及行政區(qū)劃代碼
- 酒精性腦病的護(hù)理查房實用版課件
評論
0/150
提交評論