




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第五章第五章 程序設(shè)計程序設(shè)計 及事件驅(qū)動機制及事件驅(qū)動機制 圖形用戶界面圖形用戶界面 事件驅(qū)動機制事件驅(qū)動機制教學(xué)內(nèi)容n5.1 圖形用戶界面概述n5.2 事件驅(qū)動設(shè)計n5.3 Swing容器和組件n5.3 Swing的基本組件n5.5 布局管理器n5.6 Swing其它組件教學(xué)目標(biāo)n掌握使用Swing編寫圖形用戶界面程序的基本方法n熟悉應(yīng)用Swing的容器和組件的概念n準(zhǔn)確描述Swing中常用組件的作用及主要方法的功能n熟悉應(yīng)用Swing的基本組件設(shè)計圖形用戶界面n通過布局管理器設(shè)計窗口布局 用戶界面用戶界面:用戶與計算機進行交互的渠道,:用戶與計算機進行交互的渠道,人人( (眼睛和眼睛和手
2、指手指) )和計算機(硬件和軟件)的通信,協(xié)同完成一定和計算機(硬件和軟件)的通信,協(xié)同完成一定任務(wù)。任務(wù)。與計算機輸入與計算機輸入/輸出過程都相關(guān)。輸出過程都相關(guān)。 人的主體參與人的主體參與:接受信息、思考、決策、發(fā)出命令。:接受信息、思考、決策、發(fā)出命令。 計算機軟硬件參與的工作計算機軟硬件參與的工作:進一步明確所要執(zhí)行命令,:進一步明確所要執(zhí)行命令,執(zhí)行計算,反饋信息。執(zhí)行計算,反饋信息。人與計算機交互有兩種方式:人與計算機交互有兩種方式:q 命令行式全字符命令行式全字符用戶界面用戶界面q 圖形用戶界面:讓計算機變得更加容易使用圖形用戶界面:讓計算機變得更加容易使用5.1 GUI概述概述
3、面向?qū)ο蟮膱D形用戶界面面向?qū)ο蟮膱D形用戶界面:基于:基于“面向?qū)ο竺嫦驅(qū)ο蟆钡乃枷牖ハ嘟坏乃枷牖ハ嘟粨Q信息,即盡可能在屏幕上用形象的圖標(biāo)和窗口等來代表有換信息,即盡可能在屏幕上用形象的圖標(biāo)和窗口等來代表有用的資源和可啟用的對象。用的資源和可啟用的對象。圖形界面對象:圖形界面對象:代表特定的軟件、命令、過程、資源、提示代表特定的軟件、命令、過程、資源、提示信息等信息等q 圖標(biāo)(圖標(biāo)(Icon)q 窗口(窗口(Window)q 菜單(菜單(Menu)/菜單項(菜單項(Menu Item)q 按鈕(按鈕(Button)、文本框()、文本框(Label)、列表框()、列表框(List)q 5.1 GU
4、I概述概述圖形界面編程的主要特征:圖形界面編程的主要特征:q 圖形界面對象及其框架(圖形界面對象及其框架(圖形界面對象之間的包含關(guān)系圖形界面對象之間的包含關(guān)系)q 圖形界面對象的布局(圖形界面對象的布局(圖形界面對象之間的位置關(guān)系圖形界面對象之間的位置關(guān)系)q 圖形界面對象上的事件響應(yīng)(圖形界面對象上的事件響應(yīng)(圖形界面對象上的動作圖形界面對象上的動作)5.1 GUI概述概述5.1 GUI概述如圖是我們常用的Jcreator的GUI圖圖5-1 JCreator的的GUI n在Java中,AWT(Abstract Windowing Tookit,抽象窗口工具包)是用來處理圖形最基本的方式,它可
5、以用來創(chuàng)建Java的applet及窗口程序。5.1 GUI概述(續(xù))5.1 GUI概述(續(xù))AWT是Java早期的技術(shù),提供的組件有限,無法滿足應(yīng)用程序組件多樣化的要求。為了彌補這個不足,Sun公司開發(fā)出Swing包,它有別于AWT,不依賴于特定的系統(tǒng)平臺,對外提供多樣化的組件及外觀,并且保持外觀風(fēng)格的一致。 5.1.1 GUI組成元素分類 n構(gòu)成圖形用戶界面的各種元素和成份可以粗構(gòu)成圖形用戶界面的各種元素和成份可以粗略地分為三類:容器(略地分為三類:容器(container)、組件)、組件(components)和用戶自定義成份。和用戶自定義成份。1容器容器容器是用來組織或容納其他界面成份和
6、元容器是用來組織或容納其他界面成份和元素的組件。素的組件。Java提供了相應(yīng)的容器類,例如,框架提供了相應(yīng)的容器類,例如,框架(JFrame/Frame)、面板)、面板(JPanel/Panel)及滾動面板)及滾動面板(JScrollPanel/ScrollPanel)等類。)等類。2組件組件與容器不同,組件是圖形用戶界面的基與容器不同,組件是圖形用戶界面的基本單位。組件是一個可以以圖形化的方式本單位。組件是一個可以以圖形化的方式顯示在屏幕上并能與用戶進行交互的對象顯示在屏幕上并能與用戶進行交互的對象,5.1.1 GUI組成元素分類(續(xù)) 例如例如:一個按鈕,一個標(biāo)簽等。一個按鈕,一個標(biāo)簽等。
7、組件不能獨立地顯示出來,必須將組件放組件不能獨立地顯示出來,必須將組件放在一定的容器中才可以顯示出來。在一定的容器中才可以顯示出來。5.1.1 GUI組成元素分類(續(xù)) 3用戶自定義成份用戶自定義成份除了上述的標(biāo)準(zhǔn)圖形界面元素外,編程人除了上述的標(biāo)準(zhǔn)圖形界面元素外,編程人員還可以根據(jù)用戶的需要,使用各種字型字員還可以根據(jù)用戶的需要,使用各種字型字體和顏色設(shè)計一些幾何圖形、標(biāo)志圖案等,體和顏色設(shè)計一些幾何圖形、標(biāo)志圖案等,它們被稱作用戶自定義成份。它們被稱作用戶自定義成份。 用戶自定義成份通常只起到顯示結(jié)果、用戶自定義成份通常只起到顯示結(jié)果、裝飾美化的作用,不能響應(yīng)用戶的動作,不裝飾美化的作用,
8、不能響應(yīng)用戶的動作,不具有交互功能。具有交互功能。 5.1.2 AWT和Swing介紹 nSun公司提供了兩個圖形工具類包公司提供了兩個圖形工具類包AWT和和Swing,負(fù)責(zé)構(gòu)建,負(fù)責(zé)構(gòu)建GUI界面。界面。由于由于AWT直接調(diào)用本地圖形構(gòu)件來實直接調(diào)用本地圖形構(gòu)件來實現(xiàn)圖形界面,對本地平臺依賴比較現(xiàn)圖形界面,對本地平臺依賴比較多,因此也被稱做重量級組件。多,因此也被稱做重量級組件。用用AWT構(gòu)件的構(gòu)件的GUI往往在不同的操作系統(tǒng)往往在不同的操作系統(tǒng)平臺上具有不同的風(fēng)格,而且平臺上具有不同的風(fēng)格,而且GUI的性的性能也受到了限制。能也受到了限制。nSwing重寫了重寫了AWT中的組件,還為這些組
9、件中的組件,還為這些組件增添了新的圖形用戶界面的組件,增強了增添了新的圖形用戶界面的組件,增強了GUI與與Java程序的交互功能程序的交互功能5.1.2 AWT和Swing介紹(續(xù)) Swing是用是用Java編寫的,實現(xiàn)時降低了對平臺編寫的,實現(xiàn)時降低了對平臺的依賴,也被稱做輕量級組件,方便用戶創(chuàng)建的依賴,也被稱做輕量級組件,方便用戶創(chuàng)建出跨平臺的出跨平臺的GUI。Swing和和AWT部分組件的繼承關(guān)系和層次關(guān)系部分組件的繼承關(guān)系和層次關(guān)系如圖如圖5-2所示。所示。圖圖5-2 Swing和和AWT部分組件的繼承和層次關(guān)系部分組件的繼承和層次關(guān)系5.1.2 AWT和Swing介紹(續(xù)) jav
10、a.awt包中最核心的類就是包中最核心的類就是Component類,它類,它是構(gòu)成是構(gòu)成Java圖形用戶界面的基礎(chǔ),大部分組件都是圖形用戶界面的基礎(chǔ),大部分組件都是由該類派生出來的。由該類派生出來的。 Component類是一個抽象類,類是一個抽象類,其中定義了組件所具有的一般功能:其中定義了組件所具有的一般功能:基本的繪畫支持基本的繪畫支持(paint, repaint, update等等) 字體和顏色等外形控制字體和顏色等外形控制(setFont,等等) 大小和位置控制大小和位置控制(SetSize, SetLocation等等) 圖象處理圖象處理(實現(xiàn)接口實現(xiàn)接口ImageObserve
11、r) 組件狀態(tài)控制組件狀態(tài)控制(SetEnable, isEnable, isVisible, isValid等等) ,。5.1.2 AWT和和Swing介紹介紹 - Component類類 常見的組件包括:常見的組件包括:Button, Checkbox, CheckboxGroup, Choice, Label, List, TextComponent, Scrollbar等。等。5.1.2 AWT和和Swing介紹介紹 - Component類類5.1.2 AWT和和Swing介紹介紹 - Component類類 Container類是由類是由Component類派生出來的一種特類派生出
12、來的一種特殊類,用來表示各種殊類,用來表示各種GUI組件的容器,其主要功能包組件的容器,其主要功能包括:括: 組件的管理:方法組件的管理:方法add()可以向其中添加一個組件,可以向其中添加一個組件,remove()刪除其中的一個組件,刪除其中的一個組件, 布局管理:每個布局管理:每個Container類都和一個布局管理類都和一個布局管理器相聯(lián),以確定其中組件的布局。器相聯(lián),以確定其中組件的布局。 Container類可類可以通過以通過setLayout()方法設(shè)置某種布局方式。方法設(shè)置某種布局方式。 常見的常見的Container類有:類有:Frame, Panel, Applet等。等。5
13、.1.2 AWT和和Swing介紹介紹 - Container類類菜單類也是一種重要的圖形組件,只不過菜菜單類也是一種重要的圖形組件,只不過菜單類并不是由一般的單類并不是由一般的Component類派生的,類派生的,而是從而是從MenuComponent類繼承得到的。類繼承得到的。5.1.2 AWT和和Swing介紹介紹 - Menu類類Java中提供了各種布局管理器類來管理各種組中提供了各種布局管理器類來管理各種組件在容器中的放置狀態(tài)件在容器中的放置狀態(tài),這些類都是實現(xiàn)了這些類都是實現(xiàn)了LayoutManager接口的接口的.標(biāo)準(zhǔn)的布局管理器類有:標(biāo)準(zhǔn)的布局管理器類有: FlowLayout
14、 BorderLayout GridLayout CardLayout GridBagLayout 還可以通過實現(xiàn)還可以通過實現(xiàn)LayoutManager接口來定義接口來定義自己的布局管理器。自己的布局管理器。5.1.2 AWT和和Swing介紹介紹 -布局管理器類布局管理器類Graphics類是所有用來在組件上進行圖形繪類是所有用來在組件上進行圖形繪制時所使用的圖形環(huán)境上下文的父類,它提供制時所使用的圖形環(huán)境上下文的父類,它提供了對組件進行圖形繪制的一般方法的接口,一了對組件進行圖形繪制的一般方法的接口,一個個Graphics對象中封裝了用來進行圖形繪制對象中封裝了用來進行圖形繪制時必須得狀
15、態(tài)信息,包括:時必須得狀態(tài)信息,包括: 要繪制的組件對象要繪制的組件對象 當(dāng)前顏色當(dāng)前顏色 當(dāng)前字體當(dāng)前字體 當(dāng)前邏輯點操作的功能(當(dāng)前邏輯點操作的功能(XOR和和Paint) 當(dāng)前當(dāng)前XOR方式的替代顏色方式的替代顏色 5.1.2 AWT和和Swing介紹介紹 - Graphics類類 Graphics類還提供了一系列的方法來繪制幾何類還提供了一系列的方法來繪制幾何圖形、文字、圖象以及動畫:圖形、文字、圖象以及動畫: Lines:drawLine() Rectangles:drawRect(), fillRect() 和和 clearRect()Ovals:drawOval() 和和 fil
16、lOval() Arcs:drawArc() 和和 fillArc() Polygons :drawPolygon() 和和 fillPolygon() Text :drawString() Image :drawImage()5.1.2 AWT和和Swing介紹介紹 - Graphics類類 事件類:描述各種事件的類,包括事件類:描述各種事件的類,包括Event類、類、 AWTEvent類及其子類。類及其子類。 字體類:用來表示字體的類字體類:用來表示字體的類,通過它可以在通過它可以在 GUI中使用多種系統(tǒng)支持的字體。中使用多種系統(tǒng)支持的字體。 圖象類:用來表示與處理圖象的類圖象類:用來表示
17、與處理圖象的類 (GIF、JEPG)。)。 顏色類:封裝了各種顏色。顏色類:封裝了各種顏色。 其他類:光標(biāo)類、各種幾何類等其他類:光標(biāo)類、各種幾何類等 5.1.2 AWT和和Swing介紹介紹 - 其它類其它類javax.swing包中包含了存包中包含了存java的完整的類的完整的類集以支持集以支持GUI程序的設(shè)計(輕量級構(gòu)件)程序的設(shè)計(輕量級構(gòu)件)java.lang.Objectjava.awt.Componentjava.awt.Containerjavax.swing.JComponent.5.1.2 AWT和和Swing介紹介紹 -swing JLabel顯示一行文字,可帶圖標(biāo)顯示一
18、行文字,可帶圖標(biāo)JTextField 用戶讓用戶輸入一行文字的構(gòu)件用戶讓用戶輸入一行文字的構(gòu)件JButton用于點擊執(zhí)行命令用于點擊執(zhí)行命令JCheckBox標(biāo)記狀態(tài)標(biāo)記狀態(tài)JRadioButton標(biāo)記多狀態(tài)標(biāo)記多狀態(tài)JCombox下拉列表框供選取下拉列表框供選取JList一組列表項供選擇一組列表項供選擇5.1.2 AWT和和Swing介紹介紹 - swingn在進行用戶界面設(shè)計時,經(jīng)常會用到Graphics類、 Color類和Font類,分別用來繪制圖形、設(shè)置顏色和字體,這三個類屬于java.awt包,同樣可以在創(chuàng)建Swing界面時使用5.1.3 顏色、字體和圖形顏色、字體和圖形 5.1.3
19、 顏色、字體和圖形(續(xù)) 一一Graphics類類Graphics類是所有圖形類的根類,允許應(yīng)用類是所有圖形類的根類,允許應(yīng)用程序在組件上進行圖形繪制。程序在組件上進行圖形繪制。1.如何獲得如何獲得Graphics對象:對象:(1)調(diào)用調(diào)用Component類的類的getGraphics()方法。()方法。 比如,想在窗口中繪制一個矩形,下面的語句就比如,想在窗口中繪制一個矩形,下面的語句就可以實現(xiàn)??梢詫崿F(xiàn)。Graphics g=frame.getGraphics();g.drawRect(30,60,140,40); npublic class MyjavaApplet extends A
20、ppletpublic class MyjavaApplet extends Appletn n public void paint(Graphics g) public void paint(Graphics g)n n g.setColor(Color.red); g.setColor(Color.red);n g.setFont(new Font(SansSerif,Font.BOLD,28); g.setFont(new Font(SansSerif,Font.BOLD,28);n g.drawString( g.drawString(“我在學(xué)我在學(xué)習(xí)習(xí)Java Java 小應(yīng)用程序小
21、應(yīng)用程序! !”); ); n n (2).paint()/ paintComponent(Graphics g) 或或 update()方法方法 AWT提供了一個自發(fā)性的paint()方法,Swing包里叫paintComponent(Graphics g) .5.1.3 顏色、字體和圖形(續(xù)) 這兩個這兩個方法在下列情況發(fā)生時,會自動運行:方法在下列情況發(fā)生時,會自動運行:1當(dāng)新建的窗口顯示在顯示器上,或從隱藏變成當(dāng)新建的窗口顯示在顯示器上,或從隱藏變成顯示時;顯示時;2從縮小圖標(biāo)還原之后;從縮小圖標(biāo)還原之后;3正在改變窗口的大小時正在改變窗口的大小時4. . 有輸出需求時有輸出需求時總結(jié)
22、:當(dāng)有重繪需求的時候,自動執(zhí)行總結(jié):當(dāng)有重繪需求的時候,自動執(zhí)行類Graphics的常用方法 類Graphics的常用方法(續(xù)) 注意,上面的所有方法只要涉及到坐標(biāo),均是以窗口注意,上面的所有方法只要涉及到坐標(biāo),均是以窗口的左上角為原點,向右為正的左上角為原點,向右為正x方向,向下為正方向,向下為正y方法。方法。圖圖5-3 AWT的繪圖的繪圖例5.1 AWT繪圖示例(續(xù)) Graphics類定義了很多繪制圖形的方法。這些方類定義了很多繪制圖形的方法。這些方法與法與Color類和類和Font類結(jié)合,就能繪制出不同顏類結(jié)合,就能繪制出不同顏色的圖形以及在圖形中繪制各種文字符號色的圖形以及在圖形中繪
23、制各種文字符號。例:一個簡單的繪圖程序例:一個簡單的繪圖程序 DrawTest.java例5.1 AWT繪圖示例 class DrawFrame extends JFrame public DrawFrame() setTitle(DrawTest); setSize(WIDTH, HEIGHT); / add panel to frame DrawPanel panel = new DrawPanel(); Container contentPane = getContentPane(); contentPane.add(panel); public static final int WID
24、TH = 400; public static final int HEIGHT = 400; nclass DrawPanel extends JPaneln n public void paintComponent(Graphics g)n n super.paintComponent(g);n Graphics2D g2 = (Graphics2D)g;n / draw a rectanglen double leftX = 100;n double topY = 100;n double width = 200;n double height = 150;n Rectangle2D r
25、ect = new Rectangle2D.Double(leftX, topY, width, height);n g2.draw(rect);例例5.1 AWT繪圖示例繪圖示例 n Ellipse2D ellipse = new Ellipse2D.Double();n ellipse.setFrame(rect);n g2.draw(ellipse)n / draw a diagonal linen g2.draw(new Line2D.Double(leftX, topY, n leftX + width, topY + height);n / draw a circle with t
26、he same centern double centerX = rect.getCenterX();n double centerY = rect.getCenterY();n double radius = 150;n Ellipse2D circle = new Ellipse2D.Double();n circle.setFrameFromCenter(centerX, centerY,n centerX + radius, centerY + radius);n g2.draw(circle);n n例例5.1 AWT繪圖示例繪圖示例 5.1.3 顏色、字體和圖形(續(xù)) 二二Colo
27、r類類Color類用于封裝默認(rèn)sRGB顏色空間中的顏色,或者用于封裝由ColorSpace標(biāo)識的任意顏色空間中的顏色。Color類中已經(jīng)創(chuàng)建了一些常見的顏色對象,包類中已經(jīng)創(chuàng)建了一些常見的顏色對象,包括括BLACK、BLUE、CYAN、GRAY、GREEN、MAGENTA、ORANGE、PINK、RED、WHITE等,等,這些顏色對象可以直接使用。這些顏色對象可以直接使用。當(dāng)然,也可以通過當(dāng)然,也可以通過Color類的構(gòu)造方法來創(chuàng)建顏類的構(gòu)造方法來創(chuàng)建顏色。表色。表5-2列出了列出了Color類的構(gòu)造方法。類的構(gòu)造方法。5.1.3 顏色、字體和圖形(續(xù)) 設(shè)置顏色的方法: java.awt.G
28、raphicsnvoid setcolor(Color c)njava.awt.Graphic2Dnvoid setPaint(paint p) njava.awt.Componentnvoid setBackground(Color c)nvoid setForeground(Color c)5.1.3 顏色、字體和圖形(續(xù)) 比如,要使用一個紅色對象,下面幾種方法都可以實現(xiàn):5.1.3 顏色、字體和圖形(續(xù)) Color.redColor.REDnew Color(255,0,0)new Color(1.0,0.0,0.0)例例5.5.填充顏色的例子填充顏色的例子FillTest.java
29、FillTest.javaclass FillPanel extends JPanel public void paintComponent(Graphics g) super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; / draw a rectangle double leftX = 100; double topY = 100; double width = 200; double height = 150; 例例5.5.填充顏色的例子填充顏色的例子Rectangle2D rect = new Rectangle2D.Double
30、(leftX, topY,width, height); g2.setPaint(Color.red); g2.fill(rect); / draw the enclosed ellipse Ellipse2D ellipse = new Ellipse2D.Double(); ellipse.setFrame(rect); g2.setPaint(new Color(0, 128, 128); / a dull blue-green g2.fill(ellipse); 例例5.5.填充顏色的例子填充顏色的例子三三Font類類Font類是用來設(shè)置所用文字的字體、大小和樣式等類是用來設(shè)置所用文字
31、的字體、大小和樣式等。5.1.3 顏色、字體和圖形(續(xù)) Font(String fontname,int style,int size)1.定義字體定義字體2.設(shè)置字體的成員方法設(shè)置字體的成員方法setFont(Font f)例:設(shè)置字體的例子例:設(shè)置字體的例子FontTest.java例例5.35.3設(shè)置字體的例子設(shè)置字體的例子class FontPanel extends JPanel public void paintComponent(Graphics g) super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; String
32、message = Hello, World!; Font f = new Font(Serif, Font.BOLD, 36); g2.setFont(f); / measure the size of the message FontRenderContext context = g2.getFontRenderContext(); Rectangle2D bounds = f.getStringBounds(message, context); / set (x,y) = top left corner of text double x = (getWidth() - bounds.ge
33、tWidth() / 2; double y = (getHeight() - bounds.getHeight() / 2; / add ascent to y to reach the baseline double ascent = -bounds.getY(); double baseY = y + ascent; / draw the messagen g2.drawString(message, (int)x, (int)(baseY);n g2.setPaint(Color.gray);n / draw the baselinen g2.draw(new Line2D.Doubl
34、e(x, baseY, n x + bounds.getWidth(), baseY);n / draw the enclosing rectanglen Rectangle2D rect = new Rectangle2D.Double(x, y, n bounds.getWidth(), n bounds.getHeight();n g2.draw(rect);n n例例5.35.3設(shè)置字體的例子設(shè)置字體的例子5.1.4 圖形用戶界面程序的設(shè)計 n使用AWT構(gòu)建一個圖形用戶界面的基本步驟:3.創(chuàng)建布局管理器,用來自動設(shè)置容器中組件的位創(chuàng)建布局管理器,用來自動設(shè)置容器中組件的位置和大小。置和
35、大小。4.使用委派事件模型來響應(yīng)用戶操作,實現(xiàn)用戶和使用委派事件模型來響應(yīng)用戶操作,實現(xiàn)用戶和程序的交互。程序的交互。 AWT中各種基本組件類如表中各種基本組件類如表5-3所示。所示。 1.創(chuàng)建容器組件(如創(chuàng)建容器組件(如Frame、Panel等)等)2.在容器中添加需要的其他組件(如在容器中添加需要的其他組件(如Button等)。等)。AWT基本組件AWT創(chuàng)建圖形用戶界面示例例例5.5. 顯示一個數(shù)字驗證窗口,并通過信息顯示是否輸入顯示一個數(shù)字驗證窗口,并通過信息顯示是否輸入正確正確Jpro4.java。AWT創(chuàng)建圖形用戶界面示例(續(xù))n運行結(jié)果如圖5-4所示。 圖圖5-4 AWT窗口示例程
36、窗口示例程序序 5.2 AWT的事件驅(qū)動模型nJava事件處理機制涉及三個非常重要的概念:事件源、事件和事件監(jiān)聽器(也稱作事件處理者)。1.事件源是指產(chǎn)生事件的對象,如容器、按鈕等。3.事件監(jiān)聽器:能夠接收事件源通知的對象。 2.事件:用于在事件源與事件監(jiān)聽器間傳遞信息的對象。事件源事件源監(jiān)聽器監(jiān)聽器消消息息事件事件驅(qū)動程序驅(qū)動程序Java AWTJava AWT事件驅(qū)動模型事件驅(qū)動模型 5.1 Java 5.1 Java 事件處理機制事件處理機制5.2.1 委托事件模型n一.事件源n 能夠產(chǎn)生事件的對象都可以成為事件源.如:文本框、按鈕、鼠標(biāo)、鍵盤等n 一個事件源是一個能夠注冊監(jiān)聽器并且為監(jiān)
37、聽器發(fā)送消息的一些對象二.監(jiān)聽器1.監(jiān)聽器類:一個使用了專門事件監(jiān)聽器接口的類,該類必須實現(xiàn)接口中的方法.這些方法就是事件驅(qū)動方法,當(dāng)事件發(fā)生時,被自動指行。2.監(jiān)聽器:由監(jiān)聽器類創(chuàng)建的對象.監(jiān)聽器對象會接收事件源對象發(fā)送的消息,并對發(fā)生的事件作出反應(yīng).5.2.1 委托事件模型5.2 注冊監(jiān)聽器方法n監(jiān)聽器類必須使用與事件源相對應(yīng)的接口(例:ActionListener),從而必須 提供接口中的方法:nactionPerformed(ActionEvent event)n的實現(xiàn),此方法即是與事件相關(guān)聯(lián)的事件驅(qū)動方法監(jiān)聽器類的定義監(jiān)聽器類的定義 class Mylistener class My
38、listener implements ActionListener implements ActionListener./使用了與事件相對應(yīng)的接口使用了與事件相對應(yīng)的接口 public void actionPerformed(public void actionPerformed( ActionEvent event) ActionEvent event) . . /實現(xiàn)了接口里的方法實現(xiàn)了接口里的方法 MylistenerMylistener類的對象就可以用來作監(jiān)聽器類的對象就可以用來作監(jiān)聽器監(jiān)聽器類的定義監(jiān)聽器類的定義三三. .注冊監(jiān)聽器注冊監(jiān)聽器 例:例: MyListener li
39、stener=new MyListener(); JButton button=new JButton(“ok”); button.addActionListener(Listener);eventSourceObject.addEventListener( eventListenerObject)例5.5事件驅(qū)動方法的實現(xiàn)npublic class ButtonTestn public static void main(String args)n n ButtonFrame frame = new ButtonFrame(); frame.setDefaultCloseOperation(J
40、Frame.EXIT_ON_CLOSE);n frame.show();n nclass ButtonFrame extends JFramenn public ButtonFrame()n n setTitle(ButtonTest);n setSize(WIDTH, HEIGHT);n ButtonPanel panel = new ButtonPanel();n Container contentPane = getContentPane();n contentPane.add(panel);n n public static final int WIDTH = 300;n public
41、 static final int HEIGHT = 200; 例5.5事件驅(qū)動方法的實現(xiàn)nclass ButtonPanel extends JPaneln n public ButtonPanel()n n JButton yellowButton = new JButton(Yellow);n JButton blueButton = new JButton(Blue);n JButton redButton = new JButton(Red);n add(yellowButton);n add(blueButton);n add(redButton);n ColorAction ye
42、llowAction = new ColorAction(Color.yellow);n ColorAction blueAction = new ColorAction(Color.blue);n ColorAction redAction = new ColorAction(Color.red);n yellowButton.addActionListener(yellowAction);n blueButton.addActionListener(blueAction);n redButton.addActionListener(redAction);n n 例5.5事件驅(qū)動方法的實現(xiàn)n
43、private class ColorAction implements ActionListenern n public ColorAction(Color c)n n backgroundColor = c;n n public void actionPerformed(ActionEvent event)n n setBackground(backgroundColor);n repaint();n n private Color backgroundColor;n nn四四. .用匿名類簡化程序用匿名類簡化程序在例在例ButtonTest.javaButtonTest.java中,每個
44、按鈕需要中,每個按鈕需要同樣的處理:同樣的處理: 1.1.使用字符串構(gòu)造按鈕使用字符串構(gòu)造按鈕 2.2.把按鈕添加到面板把按鈕添加到面板 3.3.用適當(dāng)?shù)念伾珮?gòu)造一個監(jiān)聽器用適當(dāng)?shù)念伾珮?gòu)造一個監(jiān)聽器 4.4.注冊動作監(jiān)聽器注冊動作監(jiān)聽器void makeButton(String name , color bcolor)JButton button=new JButton(name); add(button); Coloraction act=newColoraction(bcolor); button.addActionListener(act); 設(shè)計一個方法用來構(gòu)造按鈕:設(shè)計一個方法用來
45、構(gòu)造按鈕:四四. .用匿名類簡化程序用匿名類簡化程序ButtonPanel構(gòu)造器變?yōu)椋簶?gòu)造器變?yōu)椋簃akeButton(“yellow”,Color.yellow);makeButton(“blue”,Color.blue);makeButton(“red”,Color.red);進一步簡化,把進一步簡化,把ColorActionColorAction改寫成匿名類改寫成匿名類void makeButton(String name ,color bcolor)JButton button=new JButton(name); add(button);注冊監(jiān)聽器的方法注冊監(jiān)聽器的方法nbutton
46、.addActionListener(button.addActionListener(n new ActionListener()new ActionListener()n public void actionPerformed(public void actionPerformed(n actionEvent event) actionEvent event)n setBackground(bcolor); setBackground(bcolor);n repaint() repaint()n n ););n n例例5.65.6 NonameTest.javaNonameTest.jav
47、a四四.用匿名類簡化程序(內(nèi)部類)用匿名類簡化程序(內(nèi)部類)5.2.2 事件類 nJava將事件類大致分成兩種:n語義事件(semantic events)與底層事件(low-lever events)。其中語義事件直接繼承自其中語義事件直接繼承自AWTEvent,如,如ActionEvent、AdjustmentEvent與與ComponentEvent等等,等等,底層事件則是繼承自底層事件則是繼承自ComponentEvent類,如類,如ContainerEvent、FocusEvent、WindowEvent與與KeyEvent等等。等等。表表5-4顯示了常用的事件類、事件監(jiān)聽接口與事顯
48、示了常用的事件類、事件監(jiān)聽接口與事件監(jiān)聽接口提供的方法。件監(jiān)聽接口提供的方法。5.2.2 事件類(續(xù))5.2.2 事件類(續(xù))5.2.2 事件類(續(xù))5.2.3 ActionEvent類nActionEvent事件類是組件的事件處理常用類。當(dāng)點擊按鈕、選擇菜單項目、或向單行文本框輸入字符串并敲擊Enter鍵時,都會發(fā)生ActionEvent事件。nActionEvent類提供了如表5-5所示的幾個方法。 npublic class Jpro4_19 extends JFramen implements ActionListenern n Container cp =getContentPane
49、();n JButton btn1=new JButton(按鈕一按鈕一);n JButton btn2=new JButton(按鈕二按鈕二);n JButton btn3=new JButton(退出退出);n JLabel lab=new JLabel(鍵入鍵入Enter后文本框內(nèi)容:后文本框內(nèi)容:);n JTextField txt=new JTextField(,20);n public Jpro4_19()n super(Action Event);n btn1.addActionListener(this);n btn2.addActionListener(this);n btn
50、3.addActionListener(this);n txt.addActionListener(new ActionListener()n public void actionPerformed(ActionEvent e)n lab.setText(鍵入鍵入Enter后文本框內(nèi)容后文本框內(nèi)容:+txt.getText();); 例5.7 ActionEvent事件類的處理 cp.setLayout(new FlowLayout(FlowLayout.CENTER);n cp.add(lab);n cp.add(txt);n cp.add(btn1);n cp.add(btn2);n cp
51、.add(btn3);n setSize(260,140); n setVisible(true); n public static void main(String args)n Jpro4_19 frm=new Jpro4_19(); n npublic void actionPerformed(ActionEvent e)n JButton btn=(JButton)e.getSource();n if(btn=btn1) txt.setText(按鈕一被按下);n else if(btn=btn2) txt.setText(按鈕二被按下);n else System.exit(0);n
52、 n例5.7 ActionEvent事件類的處理例5.7 ActionEvent事件類的處理n在文本框中輸入內(nèi)容并單擊Enter鍵時,文本框內(nèi)容顯示在標(biāo)簽中,如果點擊“按鈕一”,文本框?qū)@示“按鈕一被按下”,點擊“退出”按鈕,程序?qū)⒔Y(jié)束。 圖圖5-5 Actionepent類類5.2.4 KeyEvent類nKeyEvent類繼承自InputEvent類,是屬于低層次的事件類,只要在鍵盤上按下任何鍵,都會觸發(fā)按鍵事件。虛擬鍵代碼:虛擬鍵代碼:VKVK鍵名鍵名例如:例如:VKVKA A代表代表A A鍵鍵VKVK0 0代表代表0 0鍵鍵KeyEvent類中的常用方法如表類中的常用方法如表5-61用
53、KeyListener接口處理KeyEvent事件 n用KeyListener接口處理KeyEvent事件KeyListener接口聲明了三個方法,如表5-7所示。例例5-8:鍵盤事件程序鍵盤事件程序 Jpro4_20.java 例5.8 用KeyListener接口處理KeyEvent事件npublic class Jpro4_20 extends JFrame implements KeyListenern JTextField txf=new JTextField(14);n JLabel lab1=new JLabel(未按鍵盤);n JLabel lab2=new JLabel(未按
54、鍵盤);n JLabel lab3=new JLabel(未按鍵盤);n int keyCode;n Container cp =getContentPane(); n public Jpro4_20()n super(Key Event);n cp.setLayout(new GridLayout(4,1);n txf.addKeyListener(this);n cp.add(txf);n cp.add(lab1);n cp.add(lab2);n cp.add(lab3);n setSize(200,150); n setVisible(true); 例5.8 用KeyListener接
55、口處理KeyEvent事件npublic static void main(String args)n Jpro4_20 frm=new Jpro4_20(); n npublic void keyReleased(KeyEvent e) npublic void keyPressed(KeyEvent e)n keyCode=e.getKeyCode();npublic void keyTyped(KeyEvent e)n lab1.setText(按鍵代碼:+keyCode);n lab2.setText(按鍵名稱:+e.getKeyText(keyCode);n lab3.setText
56、(按鍵字符:+e.getKeyChar(); n n 例5.8 用KeyListener接口處理KeyEvent事件(續(xù))n當(dāng)在文本框中按下鍵盤時,KeyEvent事件將被觸發(fā),窗口對象監(jiān)聽到之后,KeyListener接口定義的三個方法將會執(zhí)行。圖圖5-6 使用使用KeyListener接口來處理接口來處理KeyEvent事件事件nint getModifiers()返回一個整數(shù),它返回一個整數(shù),它的個位說明了的個位說明了SHIFT、CONTROL、ALT狀態(tài)狀態(tài)nboolean isAltdown()nboolean isControlDown()nboolean isMetaDown()
57、nboolean isShiftDown()InputEvent常用方法常用方法n例:復(fù)合鍵的測試?yán)簭?fù)合鍵的測試n int ketcode=event.getKeyCode();n if(keycode=keyEvent.VK_RIGHT&n event.isShiftDown()n. InputEvent常用方法常用方法鍵盤事件的例子n例例5.10打字訓(xùn)練器打字訓(xùn)練器TypingApplication.javan例例5.11畫線程序畫線程序Sketch.javaSketch.java2以KeyAdapter類事件處理KeyEvent事件nKeyAdapter類是使用類是使用KeyL
58、istener接口定義的一接口定義的一個類,在類里對個類,在類里對KeyListener接口里的方法全部空接口里的方法全部空實現(xiàn)實現(xiàn)KeyListener接口提供了接口提供了3 個事件處理方法,在實現(xiàn)的個事件處理方法,在實現(xiàn)的監(jiān)聽器類里針對每一個方法都要編寫處理代碼。監(jiān)聽器類里針對每一個方法都要編寫處理代碼。即使沒有作相關(guān)的處理,也必須寫上這些方法,用起即使沒有作相關(guān)的處理,也必須寫上這些方法,用起來有點不方便。來有點不方便。除了除了KeyListener之外,之外,Java還提供了還提供了KeyAdapter類類來處理來處理KeyEvent事件事件例5.9 以KeyAdapter類事件處理K
59、eyEvent事件 npublic class Jpro4_21 extends JFramen JTextField txf=new JTextField(14);n JLabel lab1=new JLabel(未按鍵盤);n JLabel lab2=new JLabel(未按鍵盤);n JLabel lab3=new JLabel(未按鍵盤);n Container cp =getContentPane(); n public Jpro4_21()n super(Key Event);n cp.setLayout(new GridLayout(4,1);n txf.addKeyListe
60、ner(new KeyLis();n cp.add(txf);n cp.add(lab1);n cp.add(lab2);n cp.add(lab3);n setSize(200,150); n setVisible(true); 例5.9 以KeyAdapter類事件處理KeyEvent事件 npublic static void main(String args)n Jpro4_21 frm=new Jpro4_21(); nclass KeyLis extends KeyAdaptern public void keyPressed(KeyEvent e)n int keyCode=e.getK
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東酒店管理職業(yè)技術(shù)學(xué)院《Java語言程序設(shè)計B》2023-2024學(xué)年第二學(xué)期期末試卷
- 江蘇海事職業(yè)技術(shù)學(xué)院《植物營養(yǎng)分子生物學(xué)基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 公司門衛(wèi)管理制度及崗位職責(zé)
- 【2025年飲食產(chǎn)業(yè)布局加速:澳門零售與餐飲市場呈現(xiàn)分化趨勢】
- 監(jiān)控機房施工方案
- 直線段支架施工方案
- 保溫冷棚施工方案
- 一卡通方案資料
- 5年級下冊數(shù)學(xué)所有公式
- 5年級第6單元語文園地筆記上冊
- 人文社科書籍《中國在梁莊》
- 2025年上海市中考語文備考之記敘文十大考點梳理(附??季毩?xí)及參考答案)
- 第12課 結(jié)交朋友-初識人工智能(教學(xué)設(shè)計)2023-2024學(xué)年第四冊信息技術(shù)河大版(三起)
- 校園餐專項整治行動工作方案
- RB/T 223-2023國產(chǎn)化檢測儀器設(shè)備驗證評價指南氣相色譜儀
- DB3417-T 031-2024 學(xué)校食堂場所布局設(shè)置規(guī)范
- FANUC機器人培訓(xùn)教程(完成版)
- 《孤獨癥譜系障礙:家長及專業(yè)人員指南》筆記
- 奔馳車輛改裝合同協(xié)議書
- 陽光心理-健康人生小學(xué)生心理健康主題班會課件
- 2024年全國職業(yè)院校技能大賽高職組(檢驗檢疫技術(shù)賽項)考試題庫(含答案)
評論
0/150
提交評論