a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 165|回复: 0

[基础知识] JAVA面向对象编程课堂笔记24

[复制链接]
发表于 2012-8-4 12:37:27 | 显示全部楼层 |阅读模式
Module9:AWT:事件模型
8 F" Z% `3 y' ]3 V, W- p事件模型指的是对象之间进行通信的设计模式。
# A7 J! `) |! [对象1给对象2发送一个信息相当于对象1引用对象2的方法。 6 T6 f  O# z: ~# X" [, M; g2 z# J" L
模型即是一种设计模式(约定俗成) 4 G4 ]& l% @, j% X, ^
对象对为三种:
1 }& ^  V+ |, P5 K' H- Y①事件源:发出事件者;
) l' x" \( c" ?②事件对象:发出的事件本身; ' M, h$ o7 Z& l% b, A5 W. y
①    事件监听器:提供处理事件指定的方法。 8 n8 P7 i, c- T5 g- }
  * }! O1 t" z9 [$ }( _/ G7 G
Java AWT事件模型也称为授权事件模型,指事件可以和监听器之间事先建立一种关系:约定那些事件如何处理,由谁去进行处理。这种约定称为授权。
3 f+ G2 m+ x0 P5 C( _一个事件源可以授权多个监听者(授权也称为监听者的注册); 6 M6 e# S( z. p8 k- @. ?
多个事件源也可以注册多个事件监听器。
, {% X/ P* y) @" J7 P# u监听者对于事件源的发出的事件作出响应。
/ n" D  e+ ], e% ^  
# h! S# ~& d" M5 n- y在java.util中有EventListener接口:所有事件监听者都要实现这个接口。 / H% \0 [" C5 `# R- v# O. ~
java.util中有EventObject类:所有的事件都为其子类。
6 i' Q4 X* O  L' w6 j/ a  
# ?" L/ i3 t  J% \6 b* J+ K事件范例在\CoreJava\Girl.java文件中。(文件已加注释)                                                  
# G: V% [* S3 E4 ^# e: A  _  
+ ^, Q7 R& h; U注意:接口因对不同的事件监听器对其处理可能不同,所以只能建立监听的功能,而无法实现处理。 & @3 a" L/ G; P
  
4 j( l6 B' O4 e8 H9 }下面程序建立监听功能: 9 f) e  B5 g- Z$ U9 d( W( Z5 U2 j& J
//监听器接口要定义监听器所具备的功能,定义方法   }1 @. U* J0 d, `
{
+ s4 @. w5 t4 j( E  void WhatIdoWhenGirlHappy(EmotionEvent e);
) W7 Z$ ?, }: f1 |' `0 c$ {1 Fvoid WhatIdoWhenGirlSad(EmotionEvent e); ) N, P- l' r  f& K. n9 H
} ' G$ c1 E! X1 s/ x& L* v! ]7 f" g( Y
注意查看参考书:事件的设置模式,如何实现授权模型。 : J7 \! G* ]' J" C) `$ M
  5 W" U9 m/ t. ~
事件模式的实现步骤:
- M" L! {) W5 f+ y$ ^" N开发事件对象(事件发送者)——接口——接口实现类——设置监听对象
4 `8 c  K8 I1 |8 Y7 v一定要理解透彻Gril.java程序。 , R* w( t* B1 g) g, e7 j3 L
  
% P) j' _2 b6 H* @重点:学会处理对一个事件源有多个事件的监听器(在发送消息时监听器收到消息的排名不分先后)。 7 p3 s6 I( r& \4 M6 m% ~
事件监听的响应顺序是不分先后的,不是谁先注册谁就先响应。 ! D0 v$ u. k- U# x# ^
事件监听由两个部分组成(接口和接口的实现类)。
$ b' S- U8 J. n7 {事件源     事件对象                        事件监听 $ a  A0 Z" D) M* U1 N
gril       EmotinEvent       EmotionListener(接口)、Boy(接口的实现类)
7 |( J3 {9 D9 x1 ^& {  N7 V鼠标事件:MouseEvent,接口:MouseListener。
9 Z3 Z! }" V% M3 E% R: K2 pP235 ActionEvent。 . P4 c9 X& z+ V: o( q+ C' e0 q( z* d
注意在写程序的时候:import java.awt.*;以及import java.awt.event.*注意两者的不同。
5 s5 m8 i/ Y0 r  n  
+ ~  B9 q& I" {3 \) @& j/ @7 Q/ n在生成一个窗体的时候,点击窗体的右上角关闭按钮激发窗体事件的方法:窗体Frame为事件源,WindowsListener接口调用Windowsclosing()。 . M5 _( H$ ?  h* L5 v- Y. A, u6 Q
为了配合后面的实现,我们必须将WindowsListener所有的方法都实现,除了Windowsclosing方法,其余的方法均为空实现。
0 o) y# r, h" n# t/ D! J(练习:写一个带button窗体,点关闭按钮退出。) 2 c2 c3 q' J/ Z4 R. f5 r2 G
上面程序中实现了许多不必要的实现类,虽然是空实现。
9 p  |; V$ ?7 j/ _% t5 M为了避免上面那些无用的实现,可以利用WindowEvent的一个WindowEvent类,还是利用windowsListener。还有WindowAdapter类,它已经实现了WindowsListener。它给出的全部都是空实现,那就可以只写想要实现的类,去覆盖其中的类,就不用写空实现。
! o) Y1 t, S, ]+ E1 u0 R注意:监听过多,会抛tooManyListener例外。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-2 23:18 , Processed in 0.174063 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表