面向?qū)ο?教案(第31講) 組件和窗口;(第32講)事件處理_第1頁(yè)
面向?qū)ο?教案(第31講) 組件和窗口;(第32講)事件處理_第2頁(yè)
面向?qū)ο?教案(第31講) 組件和窗口;(第32講)事件處理_第3頁(yè)
面向?qū)ο?教案(第31講) 組件和窗口;(第32講)事件處理_第4頁(yè)
面向?qū)ο?教案(第31講) 組件和窗口;(第32講)事件處理_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

《面向?qū)ο蟪绦蛟O(shè)計(jì)》教案第31講教學(xué)對(duì)象計(jì)算機(jī)科學(xué)技術(shù)專(zhuān)業(yè)授課內(nèi)容12.1組件和窗口12.2容器布局課程標(biāo)準(zhǔn)教學(xué)目標(biāo)(一)知識(shí)目標(biāo)1.了解Java圖形界面開(kāi)發(fā)的基本原理2.掌握常用的容器布局管理器(二)能力目標(biāo)1.學(xué)會(huì)使用Swing開(kāi)發(fā)Java圖形用戶界面程序2.學(xué)習(xí)各種常用容器布局使用教學(xué)方法采用講授法、演示法、討論法、案例教學(xué)。學(xué)時(shí)及分配(第1學(xué)時(shí)50分鐘)課堂講授30分鐘課堂練習(xí)20分鐘12.1.1Swing概述12.1.2組件12.1.3容器12.1.4簡(jiǎn)單的Swing程序?qū)W時(shí)及分配(第2學(xué)時(shí)50分鐘)課堂講授20分鐘課堂練習(xí)30分鐘12.2.1FlowLayout布局12.2.2BorderLayout布局12.2.3GridLayout布局12.2.4JPanel類(lèi)及容器嵌套知識(shí)點(diǎn)分析重點(diǎn):布局管理器的使用難點(diǎn):復(fù)雜界面的布局教學(xué)過(guò)程設(shè)計(jì)內(nèi)容方式問(wèn)題導(dǎo)入:為了開(kāi)發(fā)圖形界面程序,Java從1.0版就提供了一個(gè)AWT類(lèi)庫(kù),稱(chēng)為抽象窗口工具箱。AWT為程序員提供了構(gòu)建GUI程序的組件,如Frame、Button、Label等。使用AWT創(chuàng)建GUI存在嚴(yán)重缺陷,最重要的是它將可視組件轉(zhuǎn)換為它們各自的特定平臺(tái)的對(duì)應(yīng)元素。由于AWT組件使用了本機(jī)代碼資源,所以它們稱(chēng)為重量級(jí)的。Java從1.2版開(kāi)始提供了一個(gè)新的組件庫(kù)Swing,該庫(kù)可以說(shuō)是第二代GUI開(kāi)發(fā)工具集。內(nèi)容要點(diǎn)12.1.1Swing概述Swing組件完全用Java編寫(xiě),不依賴于特定平臺(tái),是輕量級(jí)的組件,每一個(gè)組件的外觀都由Swing確定,組件在任何平臺(tái)下都有一致的行為方式。由于Swing組件比AWT組件有許多優(yōu)點(diǎn),所以新開(kāi)發(fā)的程序應(yīng)該使用Swing組件。但要注意Swing并沒(méi)有完全取代AWT,它只是替代了AWT包中的UI組件(如Button、TextField等),AWT中的一些輔助類(lèi)(如Graphics、Color、Font等)仍然保持不變。另外,Swing仍然使用AWT的事件模型。12.1.2組件Swing圖形界面元素稱(chēng)為組件,大多數(shù)組件都派生于JComponent類(lèi)(頂級(jí)容器除外)。JComponent類(lèi)提供了所有組件的通用功能。JComponent類(lèi)繼承了AWT的Container類(lèi)和Component類(lèi),因此,Swing組件仍然是建立在AWT組件的基礎(chǔ)上的,并且與后者兼容。所有的Swing組件類(lèi)都定義在javax.swing包中,表12-1列出了Swing常用的組件類(lèi)。表12-1Swing常用組件類(lèi)類(lèi)名類(lèi)名類(lèi)名類(lèi)名JButtonJCheckBoxJColorChooserJComboBoxJComponentJDialogJFileChooserJFraneJLabelJListJMenuJMenuBarJMenuItemJOptionPaneJPanelJPasswordFiedJPopupMenuJProgressBarJRadioButtonJRadioButtonMenuItemJScrollBarJScrollPaneJSeparatorJTableJTextAreaJTextFieldJToolTipJTree12.1.3容器Swing組件需要放置到容器中,Swing定義了兩種類(lèi)型的容器,第一種是頂級(jí)容器,如JFrame、JDialog和JApplet(從JDK9開(kāi)始,JApplet已被廢棄)。這些容器繼承自AWT的Container類(lèi),而不是繼承自JComponent類(lèi)。頂級(jí)容器是重量級(jí)組件,它們是Swing組件庫(kù)中的特殊情況。頂級(jí)容器必須位于容器層次結(jié)構(gòu)的頂層,不能被其他任何容器包含。而且,每一個(gè)容器層次結(jié)構(gòu)都必須由頂級(jí)容器開(kāi)始。通常用于應(yīng)用程序的頂級(jí)容器是JFrame。Swing還支持輕量級(jí)容器,它們繼承自JComponent類(lèi),包括JPanel、JScrollPane、JRootPane等。輕量級(jí)容器通常用來(lái)組織和管理一組相關(guān)的組件,因此,可以使用輕量級(jí)容器來(lái)創(chuàng)建相關(guān)控件子組,讓它們包含在一個(gè)外部容器中。12.1.4簡(jiǎn)單的Swing程序每個(gè)使用Swing的程序必須至少有一個(gè)頂層Swing容器。對(duì)GUI應(yīng)用程序來(lái)說(shuō),一般應(yīng)該有一個(gè)主窗口,或稱(chēng)框架窗口。在Swing中,窗口是由JFrame對(duì)象實(shí)現(xiàn)的。下面程序使用JFrame類(lèi)創(chuàng)建一個(gè)空的框架窗口容器,其上放置一個(gè)標(biāo)簽對(duì)象,調(diào)用它的方法設(shè)置有關(guān)屬性,最后顯示該窗口。【程序12-1】HelloSwing.javapackagecom.boda.xy;importjavax.swing.*;publicclassHelloSwing{publicstaticvoidmain(String[]args){varframe=newJFrame("HelloWorldSwing");varlabel=newJLabel("第一個(gè)Swing程序。",SwingConstants.CENTER);frame.setSize(300,100);將標(biāo)簽添加到容器中將標(biāo)簽添加到容器中窗口在屏幕上居中顯示frame.add(label);窗口在屏幕上居中顯示設(shè)置窗口可見(jiàn)frame.setLocationRelativeTo(null);設(shè)置窗口可見(jiàn)frame.setVisible(true);關(guān)閉窗口時(shí)終止應(yīng)用程序frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);關(guān)閉窗口時(shí)終止應(yīng)用程序}}說(shuō)明:JFrame對(duì)象是一個(gè)矩形窗口,其中包含標(biāo)題欄以及關(guān)閉、最小化、最大化等按鈕。JLabel類(lèi)創(chuàng)建一個(gè)標(biāo)簽對(duì)象,該構(gòu)造方法的第二個(gè)參數(shù)指定標(biāo)簽文本的對(duì)齊方式,這里使用SwingConstants類(lèi)的常量CENTER表示居中對(duì)齊。標(biāo)簽不接受用戶的輸入,只是顯示信息??蚣艽翱趧?chuàng)建后,默認(rèn)的大小是0×0像素的,所以使用setSize()方法設(shè)置窗口的大小,兩個(gè)參數(shù)是用像素表示的寬度和高度。下面一行代碼實(shí)現(xiàn)將標(biāo)簽對(duì)象添加到窗口的內(nèi)容窗格中:frame.add(label);要向框架的內(nèi)容窗格中添加組件,可以調(diào)用getContentPane()方法返回窗口的內(nèi)容窗格,然后調(diào)用add()方法將組件添加到窗口的內(nèi)容窗格中。frame.getContentPane().add(label);setLocationRelativeTo()方法用來(lái)設(shè)置窗口顯示的位置,使用null參數(shù)實(shí)現(xiàn)將窗口顯示在屏幕中央。窗口創(chuàng)建之后是不可見(jiàn)的,setVisible()方法設(shè)置為可見(jiàn),才可看到運(yùn)行結(jié)果。默認(rèn)情況下關(guān)閉頂級(jí)窗口時(shí)(用戶單擊關(guān)閉按鈕),窗口從屏幕上消失,但是應(yīng)用程序并沒(méi)有終止。通常希望在頂級(jí)窗口關(guān)閉時(shí)終止這個(gè)應(yīng)用程序,調(diào)用setDefaultCloseOperation()方法可以實(shí)現(xiàn)這一點(diǎn),如下所示。frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);12.2容器布局在Java的圖形界面程序中,是通過(guò)為每種容器提供布局管理器來(lái)實(shí)現(xiàn)組件布局的。所謂布局管理器就是為容器設(shè)置一個(gè)LayoutManager對(duì)象(布局管理器對(duì)象),由它來(lái)管理組件在容器中擺放的順序、位置、大小以及當(dāng)窗口大小改變后組件如何變化等特征。通過(guò)使用布局管理器機(jī)制就可以實(shí)現(xiàn)GUI的跨平臺(tái)性,同時(shí)避免為每個(gè)組件設(shè)置絕對(duì)位置。常用的布局管理器有FlowLayout、BorderLayout、GridLayout、CardLayout和GridBagLayout。每種容器都有默認(rèn)的布局管理器,也可以為容器指定新的布局管理器。使用容器的setLayout(LayoutManagerlayout)方法設(shè)置容器的布局。其中參數(shù)LayoutManager是接口。12.2.1FlowLayout布局FlowLayout布局叫流式布局,它是最簡(jiǎn)單的布局管理器。添加到容器中的組件將從左到右,從上到下,一個(gè)一個(gè)地放置到容器中,一行放不下,放到下一行。當(dāng)調(diào)整窗口大小后,布局管理器會(huì)重新調(diào)整組件的擺放位置,組件的大小和相對(duì)位置不變,組件的大小采用最佳尺寸。下面是FlowLayout類(lèi)常用的構(gòu)造方法:publicFlowLayout(intalign,inthgap,intvgap)創(chuàng)建一個(gè)流式布局管理器對(duì)象,并指定添加到容器中組件的對(duì)齊方式(align)、水平間距(hgap)和垂直間距(vgap)。對(duì)齊方式align的取值必須為下列三者之一:FlowLayout.LEFT、FlowLayout.RIGHT、FlowLayout.CENTER,它們是FlowLayout定義的整型常量,分別表示左對(duì)齊、右對(duì)齊和居中對(duì)齊。下面程序使用FlowLayout布局管理器,并在內(nèi)容窗格中添加多個(gè)按鈕,這些按鈕的大小不同。程【序12-2】FlowLayoutDemo.java12.2.2BorderLayout布局BorderLayout布局叫邊界式布局,它將容器分成上、下、左、右、中5個(gè)區(qū)域,每個(gè)區(qū)域可放置一個(gè)組件或其他容器。中間區(qū)域是在上、下、左、右都填滿后剩下的區(qū)域。BorderLayout布局管理器的構(gòu)造方法有:publicBorderLayout(inthgap,intvgap)參數(shù)hgap和vgap分別指定使用這種布局時(shí)組件之間的水平間隔和垂直間隔距離,單位是像素。向邊界式布局的容器中添加組件應(yīng)該使用add(Componentc,intindex)方法,c為添加的組件,index為指定的位置。指定位置需要使用BorderLayout類(lèi)定義的5個(gè)常量:PAGE_START(頁(yè)頭)、PAGE_END(頁(yè)尾)、LINE_START(行首)、LINE_END(行尾)和CENTER(中部)。如果不指定位置,組件添加到中部位置。下面程序演示BorderLayout邊界式布局的使用,在其5個(gè)區(qū)域各自添加一個(gè)按鈕?!境绦?2-3】BorderLayoutDemo.java12.2.3GridLayout布局GridLayout布局叫網(wǎng)格式布局,這種布局簡(jiǎn)單地將容器分成大小相等的單元格,每個(gè)單元格可放置一個(gè)組件,每個(gè)組件占據(jù)單元格的整個(gè)空間,調(diào)整容器的大小,單元格大小隨之改變。下面是GridLayout類(lèi)的常用構(gòu)造方法:publicGridLayout(introws,intcols,inthgap,intvgap)參數(shù)rows和cols分別指定網(wǎng)格布局的行數(shù)和列數(shù),hgap和vgap指定組件的水平間隔和垂直間隔,單位為像素。行和列參數(shù)至少有一個(gè)為非0值。向網(wǎng)格布局的容器中添加組件,只需調(diào)用容器的add()方法即可,系統(tǒng)按照先行后列的次序依次將組件添加到容器中。下面程序演示了GridLayout布局的使用?!境绦?2-4】GridLayoutDemo.java除上面介紹的布局管理器外,Swing還提供了其他布局管理器,例如CardLayout、GridBagLayout、BoxLayout、GroupLayout和SpringLayout等。如果界面復(fù)雜,可以考慮使用NetBeans集成開(kāi)發(fā)環(huán)境(IDE)來(lái)設(shè)計(jì)用戶界面。12.2.4JPanel類(lèi)及容器的嵌套由于某一種布局管理器的能力有限,在設(shè)計(jì)復(fù)雜布局時(shí)通常采用容器嵌套的方式,即把組件添加到一個(gè)中間容器中,再把中間容器作為組件添加到另一個(gè)容器中,從而實(shí)現(xiàn)復(fù)雜的布局。為實(shí)現(xiàn)這個(gè)功能,經(jīng)常使用JPanel類(lèi),該類(lèi)是JComponent類(lèi)的子類(lèi),稱(chēng)為面板容器。它是一個(gè)通用的容器,可以把它放入其他容器中,也可以把其他容器和組件放到它上面,因此它經(jīng)常在構(gòu)造復(fù)雜布局中作為中間容器,但它不能單獨(dú)顯示,需要放到JFrame或JDialog這樣的頂層容器中。使用面板容器作為中間容器構(gòu)建GUI程序的一般做法是:先將組件添加到面板上,然后將面板作為一個(gè)組件再添加到頂層容器中。使用面板作為中間容器,首先需要?jiǎng)?chuàng)建面板對(duì)象,JPanel的構(gòu)造方法如下:publicJPanel(LayoutManagerlayout)參數(shù)layout指定面板使用的布局管理器對(duì)象,缺省將使用默認(rèn)的布局管理器創(chuàng)建一個(gè)面板,面板的默認(rèn)的布局管理器是FlowLayout。也可以在創(chuàng)建面板對(duì)象后重新設(shè)置它的布局。下面程序通過(guò)一個(gè)簡(jiǎn)單的例子說(shuō)明面板對(duì)象的使用?!境绦?2-5】FrameAndPanel.java采用機(jī)房授課邊講邊練,同時(shí)用啟發(fā)式、討論式、案例教學(xué)等教學(xué)方法。布置課外學(xué)習(xí)任務(wù)教材習(xí)題:編程題1,2實(shí)驗(yàn)指導(dǎo):實(shí)驗(yàn)題目1教學(xué)反思《面向?qū)ο蟪绦蛟O(shè)計(jì)》教案第32講教學(xué)對(duì)象計(jì)算機(jī)科學(xué)技術(shù)專(zhuān)業(yè)授課內(nèi)容12.3事件處理課程標(biāo)準(zhǔn)教學(xué)目標(biāo)(一)知識(shí)目標(biāo)1.理解Java圖形界面的事件處理模型2.掌握各種常用事件處理方法(二)能力目標(biāo)1.掌握各種常用事件處理方法2.熟悉常用組件的常見(jiàn)事件教學(xué)方法采用講授法、演示法、討論法、案例教學(xué)。學(xué)時(shí)及分配(第1學(xué)時(shí)50分鐘)課堂講授30分鐘課堂練習(xí)20分鐘12.3.1事件處理模型12.3.2事件類(lèi)12.3.3事件監(jiān)聽(tīng)器12.3.4事件處理的基本步驟學(xué)時(shí)及分配(第2學(xué)時(shí)50分鐘)課堂講授20分鐘課堂練習(xí)30分鐘編程實(shí)踐知識(shí)點(diǎn)分析重點(diǎn):Swing的事件處理中的基本概念Swing事件處理步驟常用事件的處理方法難點(diǎn):Swing的事件處理模型教學(xué)過(guò)程設(shè)計(jì)內(nèi)容方式問(wèn)題導(dǎo)入圖形界面程序不應(yīng)該是靜態(tài)的,它應(yīng)該能夠響應(yīng)用戶的操作。比如,當(dāng)用戶在GUI上點(diǎn)擊鼠標(biāo)或輸入一個(gè)字符,都會(huì)發(fā)生事件,程序根據(jù)事件類(lèi)型作出反應(yīng)就是事件處理。內(nèi)容要點(diǎn)12.3事件處理12.3.1事件處理模型Java事件處理采用事件代理模型,即將事件的處理從事件源對(duì)象代理給一個(gè)或多個(gè)稱(chēng)為事件監(jiān)聽(tīng)器的對(duì)象,事件由事件監(jiān)聽(tīng)器處理。事件代理模型把事件的處理代理給外部實(shí)體進(jìn)行處理,實(shí)現(xiàn)了事件源和監(jiān)聽(tīng)器分離的機(jī)制。事件代理模型涉及3種對(duì)象:事件源、事件和事件監(jiān)聽(tīng)器。事件源(eventsource):產(chǎn)生事件的對(duì)象,一般來(lái)說(shuō)可以是組件,如按鈕、對(duì)話框等。當(dāng)這些對(duì)象的狀態(tài)改變時(shí),就會(huì)產(chǎn)生事件。事件源可以是可視化組件,也可以是計(jì)時(shí)器等不可視的對(duì)象。事件(event):描述事件源狀態(tài)改變的對(duì)象。如按鈕被點(diǎn)擊,就會(huì)產(chǎn)生ActionEvent動(dòng)作事件。事件監(jiān)聽(tīng)器(listener):接收事件并對(duì)其進(jìn)行處理的對(duì)象。事件監(jiān)聽(tīng)器對(duì)象必須是實(shí)現(xiàn)了相應(yīng)接口的類(lèi)的對(duì)象。Java的事件代理模型如圖12-6所示。事件源事件源注冊(cè)一個(gè)監(jiān)聽(tīng)器對(duì)象事件對(duì)象監(jiān)聽(tīng)器對(duì)象事件處理程序用戶動(dòng)作生成一個(gè)事件通知監(jiān)聽(tīng)器圖12-6GUI事件處理模型首先在事件源上注冊(cè)事件監(jiān)聽(tīng)器,當(dāng)用戶動(dòng)作觸發(fā)一個(gè)事件,運(yùn)行時(shí)系統(tǒng)將創(chuàng)建一個(gè)事件對(duì)象,然后尋找事件監(jiān)聽(tīng)器對(duì)象來(lái)處理該事件。12.3.2事件類(lèi)Swing組件可產(chǎn)生多種事件,如點(diǎn)擊按鈕、選擇菜單項(xiàng)會(huì)產(chǎn)生動(dòng)作事件(ActionEvent),移動(dòng)鼠標(biāo)將發(fā)生鼠標(biāo)事件(MouseEvent)等。為了實(shí)現(xiàn)事件處理,Java定義了大量的事件類(lèi),這些類(lèi)封裝了事件對(duì)象。java.util.EventObject類(lèi)是所有事件類(lèi)的根類(lèi),該類(lèi)定義了getSource()方法,它返回觸發(fā)事件的事件源對(duì)象。java.awt.AWTEvent是EventObject類(lèi)的子類(lèi),同時(shí)又是所有組件AWT事件類(lèi)的根類(lèi),該類(lèi)中定義了getID()方法,它返回事件的類(lèi)型。AWTEvent類(lèi)的常用的子類(lèi)定義在java.awt.event包中,表12-2列出了在哪些組件上可以產(chǎn)生哪些事件。表12-2常用事件及產(chǎn)生事件的組件事件類(lèi)型事件名稱(chēng)產(chǎn)生事件的組件ActionEvent動(dòng)作事件當(dāng)按下按鈕、雙擊列表項(xiàng)或選擇菜單項(xiàng)時(shí)產(chǎn)生該事件AdjustmentEvent調(diào)整事件操作滾動(dòng)條時(shí)產(chǎn)生該事件ComponentEvent組件事件當(dāng)組件被隱藏、移動(dòng)、調(diào)整大小、變?yōu)榭梢?jiàn)時(shí)產(chǎn)生該事件ContainerEvent容器事件從容器中添加或刪除一個(gè)組件時(shí)產(chǎn)生該事件FocusEvent焦點(diǎn)事件當(dāng)一個(gè)組件獲得或失去鍵盤(pán)焦點(diǎn)時(shí)產(chǎn)生該事件ItemEvent選項(xiàng)事件當(dāng)復(fù)選框或列表項(xiàng)被單擊時(shí),以及在做出選擇、或者選擇或取消一個(gè)可選菜單項(xiàng)時(shí)產(chǎn)生該事件KeyEvent鍵盤(pán)事件當(dāng)從鍵盤(pán)接收輸入時(shí)產(chǎn)生該事件MouseEvent鼠標(biāo)事件當(dāng)拖動(dòng)、移動(dòng)、按下或釋放鼠標(biāo)時(shí),或當(dāng)鼠標(biāo)進(jìn)入或退出一個(gè)組件時(shí)產(chǎn)生該事件MouseWheelEvent鼠標(biāo)輪事件當(dāng)滾動(dòng)鼠標(biāo)滾輪時(shí)產(chǎn)生該事件TextEvent文本事件當(dāng)一個(gè)文本域的值或文本域改變時(shí)產(chǎn)生該事件WindowEvent窗口事件當(dāng)窗口被激活、關(guān)閉、取消激活、圖標(biāo)化、解除圖標(biāo)化、打開(kāi)或關(guān)閉時(shí)產(chǎn)生該事件12.3.3事件監(jiān)聽(tīng)器事件的處理必須由實(shí)現(xiàn)了相應(yīng)的事件監(jiān)聽(tīng)器接口的類(lèi)對(duì)象處理。Java為每類(lèi)事件定義了相應(yīng)的接口。事件類(lèi)和接口都是在java.awt.event包中定義的。表12-3列出了常用的事件監(jiān)聽(tīng)器接口、接口中定義的方法以及所處理的事件。表12-3事件監(jiān)聽(tīng)器接口、方法及處理的事件監(jiān)聽(tīng)器接口接口中的方法所處理的事件ActionListeneractionPerformed(ActionEvente)ActionEventItemListeneritemStateChanged(ItemEvente)ItemEventMouseListenermouseClicked(MouseEvente)mouseEntered(MouseEvente)mouseExited(MouseEvente)mousePressed(MouseEvente)mouseReleased(MouseEvente)MouseEventMouseMotionListenermouseMoved(MouseEvente)mouseDragged(MouseEvente)MouseEventKeyListenerkeyPressed(KeyEvente)keyReleased(KeyEvente)keyTyped(KeyEvente)KeyEventCompomentListenercomponentMoved(ComponentEvente)componentHiden(ComponentEvente)componentResized(ComponentEvente)componentShown(ComponentEvente)ComponentEventWindowListenerwindowOpened(WindowEvente)windowClosing(WindowEvente)windowClosed(WindowEvente)windowActivated(WindowEvente)windowDeactivated(WindowEvente)windowIconified(WindowEvente)windowDeiconified(WindowEvente)WindowEventTextListenertextValueChanged(TextEvente)TextEvent大多數(shù)監(jiān)聽(tīng)器接口與事件類(lèi)有一定的對(duì)應(yīng)關(guān)系,如對(duì)于ActionEvent事件,對(duì)應(yīng)的接口為ActionListener,對(duì)于WindowEvent事件,對(duì)應(yīng)的接口為WindowListener。這里有一個(gè)例外,即MouseEvent對(duì)應(yīng)兩個(gè)接口MouseListener和MouseMotionListener。接口中定義了一個(gè)或多個(gè)方法,這些方法都是抽象方法,必須由實(shí)現(xiàn)接口的類(lèi)實(shí)現(xiàn),Java程序就是通過(guò)這些方法實(shí)現(xiàn)對(duì)事件處理的。12.3.4事件處理的基本步驟完成事件處理的一般步驟為:(1)實(shí)現(xiàn)相應(yīng)的監(jiān)聽(tīng)器接口:根據(jù)要處理的事件確定實(shí)現(xiàn)哪個(gè)監(jiān)聽(tīng)器接口。例如,要處理點(diǎn)擊按鈕事件,即ActionEvent事件,就需要實(shí)現(xiàn)ActionListener接口。(2)為組件注冊(cè)監(jiān)聽(tīng)器:每種組件都定義了可以觸發(fā)的事件類(lèi)型,使用相應(yīng)的方法為組件注冊(cè)監(jiān)聽(tīng)器。如果程序運(yùn)行過(guò)程中,對(duì)某事件不需處理,也可以不注冊(cè)監(jiān)聽(tīng)器,甚至注冊(cè)了監(jiān)聽(tīng)器也可以注銷(xiāo)。注冊(cè)和注銷(xiāo)監(jiān)聽(tīng)器的一般方法如下:publicvoidaddXxxListener(XxxListenerel)//注冊(cè)監(jiān)聽(tīng)器publicvoidremoveXxxListener(Xxxlistenerel)//注銷(xiāo)監(jiān)聽(tīng)器只有為組件注冊(cè)了監(jiān)聽(tīng)器后,在程序運(yùn)行時(shí),當(dāng)發(fā)生該事件時(shí)才能由監(jiān)聽(tīng)器對(duì)象處理,否則即使發(fā)生了相應(yīng)的事件,事件也不會(huì)被處理。一個(gè)事件源可能發(fā)生多種事件,因此可以由多個(gè)事件監(jiān)聽(tīng)器處理;反過(guò)來(lái)一個(gè)監(jiān)聽(tīng)器對(duì)象也可以處理多個(gè)事件源的同一類(lèi)型的事件,如上述程序兩個(gè)按鈕可以用一個(gè)監(jiān)聽(tīng)器對(duì)象處理。下面以一個(gè)例子說(shuō)明使用事件代理模型處理事件的主要步驟。程序運(yùn)行當(dāng)單擊“確定”或“取消”按鈕時(shí),在標(biāo)簽中顯示相應(yīng)信息?!境绦?2-6】ActionEventDemo.javaJava圖形界面允許多個(gè)組件注冊(cè)一個(gè)監(jiān)聽(tīng)器對(duì)象,一個(gè)組件對(duì)象也可以注冊(cè)多個(gè)監(jiān)聽(tīng)器對(duì)象。1.使用匿名內(nèi)部類(lèi)還可以使用匿名內(nèi)部類(lèi)為組件注冊(cè)監(jiān)聽(tīng)器,對(duì)上面的程序就可以使用匿名內(nèi)部類(lèi)實(shí)現(xiàn),代碼如下:btn1.addActionListener(newActionListener(){//匿名內(nèi)部類(lèi)publicvoidactionPerformed(ActionEvent

溫馨提示

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

評(píng)論

0/150

提交評(píng)論