a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 164|回复: 0

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

[复制链接]
发表于 2012-8-4 12:37:27 | 显示全部楼层 |阅读模式
Module9:AWT:事件模型 ( N3 y! D; e& k9 z: [4 ?
事件模型指的是对象之间进行通信的设计模式。 5 N+ Y+ p7 x3 i! g) K
对象1给对象2发送一个信息相当于对象1引用对象2的方法。 ' r4 S/ p, e( X% g& T0 T
模型即是一种设计模式(约定俗成) ( x) C; h/ c3 c- a, c) a
对象对为三种: ( @2 ]( B2 P- Q) L. [
①事件源:发出事件者; " \" U3 ~0 D( {& _, [# c4 }  o
②事件对象:发出的事件本身;
# j7 M9 n# A" }2 {  R- {4 L①    事件监听器:提供处理事件指定的方法。
* j/ ~; j* B2 E4 U0 o" F  0 `+ [$ v8 p! Z0 |. W- R& v& N; i
Java AWT事件模型也称为授权事件模型,指事件可以和监听器之间事先建立一种关系:约定那些事件如何处理,由谁去进行处理。这种约定称为授权。 # u+ t- e1 s6 [+ T8 I4 O
一个事件源可以授权多个监听者(授权也称为监听者的注册); & l1 v4 L+ Q+ U- {% K; t; w
多个事件源也可以注册多个事件监听器。 ( |: T. y, Z- T+ g8 |
监听者对于事件源的发出的事件作出响应。
/ i3 k' H, n: X2 F  
6 T$ v* @- z% v; B: \5 `* @- |+ }9 V在java.util中有EventListener接口:所有事件监听者都要实现这个接口。
; E  L+ ]* Q0 y) Fjava.util中有EventObject类:所有的事件都为其子类。 5 k8 ^1 w* X8 v
  $ o( y9 L& g4 V
事件范例在\CoreJava\Girl.java文件中。(文件已加注释)                                                  5 Q7 N  Y/ {5 S* N$ d9 L( f7 |
  * L* a" d  }, D
注意:接口因对不同的事件监听器对其处理可能不同,所以只能建立监听的功能,而无法实现处理。 7 l# u9 j9 Q7 V. g" Z) l
  3 _. N- g6 n7 W2 b& d4 C* `
下面程序建立监听功能: : m8 S) Q8 ^3 K' q* N' }
//监听器接口要定义监听器所具备的功能,定义方法   W2 z8 L. Z1 [  |$ p# a2 ~) p
{
( T* q4 I1 q7 J9 ?. u5 H  void WhatIdoWhenGirlHappy(EmotionEvent e); 3 o. |9 t( g4 ~, F  B0 H  J$ Z* B2 D: f& h
void WhatIdoWhenGirlSad(EmotionEvent e);
, C- Y* y% E% ]* @% g! m} 2 o. A- \, K) C3 y" m: {& n
注意查看参考书:事件的设置模式,如何实现授权模型。
& m8 x. y; _6 C9 ?) p6 v3 s/ a  
1 z" f) d7 ^/ z9 N& G事件模式的实现步骤: ) M' Z6 d! k+ a
开发事件对象(事件发送者)——接口——接口实现类——设置监听对象
- u7 X- Z2 B6 R3 B一定要理解透彻Gril.java程序。
0 e' c# {( v( Q0 r0 O' M& Y    o& S& z, l7 ?4 Z- M. I4 n
重点:学会处理对一个事件源有多个事件的监听器(在发送消息时监听器收到消息的排名不分先后)。
! g: x; j( s$ d事件监听的响应顺序是不分先后的,不是谁先注册谁就先响应。
7 H( m- b* ?* @8 {4 \事件监听由两个部分组成(接口和接口的实现类)。 1 X# w( J& l9 x! q- O$ w3 Y; K
事件源     事件对象                        事件监听
, b7 S9 V% F3 I0 o+ ?: M. p gril       EmotinEvent       EmotionListener(接口)、Boy(接口的实现类)
" C7 I/ R- [6 @9 ~鼠标事件:MouseEvent,接口:MouseListener。
; A5 ?4 C  x8 x8 V5 f: LP235 ActionEvent。 - Y2 {# z, b+ n& C. e4 j4 F7 L
注意在写程序的时候:import java.awt.*;以及import java.awt.event.*注意两者的不同。 / n4 L* X' f& Z  O! n
  
+ q0 z) q( i* U9 c* y2 s在生成一个窗体的时候,点击窗体的右上角关闭按钮激发窗体事件的方法:窗体Frame为事件源,WindowsListener接口调用Windowsclosing()。 2 b2 q* ?+ Q% K
为了配合后面的实现,我们必须将WindowsListener所有的方法都实现,除了Windowsclosing方法,其余的方法均为空实现。
" p3 h: a* U  W) u/ U! o(练习:写一个带button窗体,点关闭按钮退出。) 0 H2 Q3 e" e$ A4 C
上面程序中实现了许多不必要的实现类,虽然是空实现。 ' }" Q0 U1 s3 z, v* B+ o+ c& w
为了避免上面那些无用的实现,可以利用WindowEvent的一个WindowEvent类,还是利用windowsListener。还有WindowAdapter类,它已经实现了WindowsListener。它给出的全部都是空实现,那就可以只写想要实现的类,去覆盖其中的类,就不用写空实现。
% D+ P5 s; u9 F8 t; ~注意:监听过多,会抛tooManyListener例外。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-8 02:05 , Processed in 0.198300 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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