按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
getAppletContext()。showStatus(〃Button 1〃);
}
}
class B2 implements ActionListener {
public void actionPerformed(ActionEvent e) {
getAppletContext()。showStatus(〃Button 2〃);
}
}
/* The old way:
public boolean action(Event evt; Object arg) {
if(evt。target。equals(b1))
getAppletContext()。showStatus(〃Button 1〃);
else if(evt。target。equals(b2))
getAppletContext()。showStatus(〃Button 2〃);
// Let the base class handle it:
else
409
…………………………………………………………Page 411……………………………………………………………
return super。action(evt; arg);
return true; // We've handled it here
}
*/
} ///:~
我们可比较两种方法,老的代码在左面作为注解。在 init()方法里,只有一个改变就是增加了下面的两行:
b1。addActionListener(new B1());
b2。addActionListener(new B2());
按钮按下时,addActionListener()通知按钮对象被激活。B1 和B2 类都是执行接口ActionListener 的内部
类。这个接口包括一个单一的方法 actionPerformed() (这意味着当事件激活时,这个动作将被执行)。注
意actionPreformed()方法不是一个普通事件,说得更恰当些是一个特殊类型的事件,ActionEvent。如果我
们想提取特殊ActionEvent 的信息,因此我们不需要故意去测试和下溯造型自变量。
对编程者来说一个最好的事便是actionPerformed()十分的简单易用。它是一个可以调用的方法。同老的
action()方法比较,老的方法我们必须指出发生了什么和适当的动作,同样,我们会担心调用基础类
action()的版本并且返回一个值去指明是否被处理。在新的事件模型中,我们知道所有事件测试推理自动进
行,因此我们不必指出发生了什么;我们刚刚表示发生了什么,它就自动地完成了。如果我们还没有提出用
新的方法覆盖老的方法,我们会很快提出。
13。16。2 事件和接收者类型
所有AWT 组件都被改变成包含addXXXListener()和removeXXXListener()方法,因此特定的接收器类型可从
每个组件中增加和删除。我们会注意到“XXX”在每个场合中同样表示自变量的方法,例如,
addFooListener(FooListener fl)。下面这张表格总结了通过提供addXXXListener()和 removeXXXListener()
方法,从而支持那些特定事件的相关事件、接收器、方法以及组件。
事件,接收器接口及添加和删除方法 支持这个事件的组件
Event; listener interface and C o m p o n e n t s s u p p o r t i n g t h i s e v e n t
add a n d r e m o v e m e t h o d s
A c t i o n E v e n t B u t t o n ; L i s t ; T e x t F i e l d ; M e n u I t e m ; and its derivatives
A c t i o n L i s t e n e r including C h e c k b o x M e n u I t e m ; M e n u ; and P o p u p M e n u
a d d A c t i o n L i s t e n e r ( )
r e m o v e A c t i o n L i s t e n e r ( )
A d j u s t m e n t E v e n t S c r o l l b a r
A d j u s t m e n t L i s t e n e r Anything you create that implements the Adjustable interface
a d d A d j u s t m e n t L i s t e n e r ( )
removeAdjustmentListener( )
C o m p o n e n t E v e n t C o m p o n e n t and its derivatives; including Button; Canvas;
C o m p o n e n t L i s t e n e r Checkbox ; Choice; Container ; Panel ; Applet ; ScrollPane;
a d d C o m p o n e n t L i s t e n e r ( ) Window ; Dialog ; FileDialog; Frame ; Label; List ; Scrollbar;
removeponentListener( ) T e x t A r e a ; and T e x t F i e l d
C o n t a i n e r E v e n t C o n t a i n e r and its derivatives; including Panel ; Applet ;
C o n t a i n e r L i s t e n e r S c r o l l P a n e ; W i n d o w ; D i a l o g ; F i l e D i a l o g ; and Frame
a d d C o n t a i n e r L i s t e n e r ( )
removeContainerListener( )
F o c u s E v e n t C o m p o n e n t and its derivatives; including Button; Canvas;
F o c u s L i s t e n e r Checkbox ; Choice; Container ; Panel ; Applet ; ScrollPane;
a d d F o c u s L i s t e n e r ( ) Window ; Dialog ; FileDialog; Frame Label; List ; Scrollbar;
r e m o v e F o c u s L i s t e n e r ( ) T e x t A r e a ; and T e x t F i e l d
K e y E v e n t C o m p o n e n t and its derivatives; including Button; Canvas;
410
…………………………………………………………Page 412……………………………………………………………
K e y L i s t e n e r Checkbox ; Choice; Container ; Panel ; Applet ; ScrollPane;
a d d K e y L i s t e n e r ( ) Window ; Dialog ; FileDialog; Frame ; Label; List ; Scrollbar;
r e m o v e K e y L i s t e n e r ( ) T e x t A r e a ; and T e x t F i e l d
M o u s e E v e n t (for both clicks and C o m p o n e n t and its derivatives; including Button; Canvas;
motion) Checkbox ; Choice; Container ; Panel ; Applet ; ScrollPane;
M o u s e L i s t e n e r Window ; Dialog ; FileDialog; Frame ; Label; List ; Scrollbar;
a d d M o u s e L i s t e n e r ( ) T e x t A r e a ; and T e x t F i e l d
r e m o v e M o u s e L i s t e n e r ( )
M o u s e E v e n t '55' (for both clicks C o m p o n e n t and its derivatives; including Button; Canvas;
and motion) Checkbox ; Choice; Co ntainer ; Panel ; Applet ; ScrollPane;
M o u s e M o t i o n L i s t e n e r Window ; Dialog ; FileDialog; Frame ; Label; List ; Scrollbar;
addMouseMotionListener( ) T e x t A r e a ; and T e x t F i e l d
removeMouseMotionListener( )
W i n d o w E v e n t Window and its derivatives; including Dialog; FileDialog; and
W i n d o w L i s t e n e r F r ame
a d d W i n d o w L i s t e n e r ( )
r e m o v e W i n d o w L i s t e n e r ( )
I t e m E v e n t Checkbox ; CheckboxMenuItem ; Choice ; List; and anything that
I t e m L i s t e n e r implements the I t e m S e l e c t a b l e interface
a d d I t e m L i s t e n e r ( )
r e m o v e I t e m L i s t e n e r ( )
T e x t E v e n t Anything derived from Textponent ; including TextArea and
T e x t L i s t e n e r T e x t F i e l d
a d d T e x t L i s t e n e r ( )
r e m o v e T e x t L i s t e n e r ( )
⑤:即使表面上如此,但实际上并没有MouseMotiionEvent (鼠标运动事件)。单击和运动都合成到
MouseEvent 里,所以 MouseEvent 在表格中的这种另类行为并非一个错误。
可以看到,每种类型的组件只为特定类型的事件提供了支持。这有助于我们发现由每种组件支持的事件,如
下表所示:
组件类型 支持的事件
C o m p o n e n t t y p e E v e n t s s u p p o r t e d b y t h i s c o m p o n e n t
A d j u s t a b l e A d j u s t m e n t E v e n t
A p p l e t Conta inerEvent; FocusEvent; KeyEvent; MouseEvent; ponentEvent
B u t t o n ActionEvent; FocusEvent; KeyEvent; MouseEvent; ponentEvent
C a n v a s F o c u s E v e n t ; K e y E v e n t ; M o u s e E v e n t ; C o m p o n e n t E v e n t
C h e c k b o x ItemEvent; FocusEvent; KeyEvent; MouseEvent; ponentEvent
CheckboxMenuItem A c t i o n E v e n t ; I t e m E v e n t
C h o i c e ItemEvent; FocusEvent; KeyEvent; MouseEvent; ponentEvent
C o m p o n e n t F o c u s E v e n t ; K e y E v e n t ; M o u s e E v e n t ; C o m p o n e n t E v e n t
C o n t a i n e r ContainerEvent; FocusEvent; KeyEvent; MouseEvent; ponentEvent
411
…………………………………………………………Page 413……………………………………………………………
D i a l o g Co ntainerEvent; WindowEvent; FocusEvent; KeyEvent; MouseEvent;
C o m p o n e n t E v e n t
F i l e D i a l o g ContainerEvent; WindowEvent; Foc