版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JavaAWT事件处理机制
如果用户在用户界面层执行了一个动作(鼠标点击和按键),这将导致一个事件的发生。事件是描述发生了什么的对象。存在各种不同类型的事件类用来描述各种类型的用户交互。事件源是一个事件的产生者。例如,在Button组件上点击鼠标会产生以这个Button为源的一个ActionEvent。这个ActionEvent实例是一个对象,它包含关于刚才所发生的那个事件的信息的对象。事件处理器就是一个接收事件、解释事件并处理用户交互的方法。
Java语言采用委托事件模型进行事件的处理。在这个模型中,已经定义好了事件源可能产生的事件类型和与该事件类型相对应的接口,它们位于java.awt.event包和javax.swing.event包中。事件监听者是实现与该事件相对应的接口的类的对象。例如,对JButton组件进行单击,就产生ActionEvent事件,与ActionEvent事件对应的接口为ActionListener。如果用户定义的一个名叫ButtonHandler的类实现了ActionListener接口的方法(以事件对象为参数),则ButtonHandler类的一个实例,就可以作为单击事件的监听者。事件源需要被注册到监听者才能被监测到相对应事件的发生,事件才能被处理。
事件是只向注册的监听者报告的对象(作为方法的参数)。每个事件都有一个对应的监听者接口,规定哪些方法必须在适合接收那种类型的事件的类中定义。实现了定义那些方法的接口的类可以为一个监听者。事件与事件源
用户在操作应用程序界面中的组件时,就会产生事件(Event),例如单击一个按钮,就会产生一个动作事件(ActionEvent);对窗口进行缩放或关闭等操作,就会产生一个窗口事件(WindowEvent);操作了键盘就会产生对应的键盘事件(KeyEvent)。事件源指事件的来源对象,例如单击一个按钮时,这个按钮就是事件源。在Java语言中“一切皆对象”,事件也不例外。当事件源产生事件后,与该事件有关的信息,如事件源、事件类型等就会被系统封装在一个事件对象中,在处理这个事件的程序中如果需要就可以取出有关信息。监听器
事件源产生事件后,就要有相应的处理者来接收事件对象,并对其进行处理。事件的处理者要时刻监听是否有事件产生,如果监视到有事件产生,就会自动调用相应的事件处理程序进行事件处理,正因为如此,一般把事件的处理者叫事件监听器。事件类型对于每类事件,都有一个接口,这个接口必须由想接收这个事件的类实现。实现接口的类要求实现接口的一个或多个方法,当发生特定的事件时,就会调用这些方法。表8.4列出了这些(事件)类型,并给出了每个类型对应的接口名称,以及所要求定义的方法。这些方法的名称是易于记忆的,名称表示了会引起这个方法被调用的源或条件。表8.4方法类型和接口
事件类型接口名要实现方法ActionEventActionListeneractionPerformed(ActionEvent)ItemItemListeneritemStateChanged(ItemEvent)MousemotionMouseMotionListenermouseDragged(MouseEvent)mouseMoved(MouseEvent)MousebuttonMouseListenermousePressed(MouseEvent)mouseReleased(MouseEvent)mouseEntered(MouseEvent)mouseExited(MouseEvent)KeyKeyListenerkeyPressed(KeyEvent)keyReleased(KeyEvent)keyTyped(KeyEvent)FocusFocusListenerfocusGained(FocusEvent)focusLost(FocusEvent)AdjustmentAdjustmentListeneradjustmentValueChanged(AdjustmentEvent)ComponentComponentListenercomponentMoved(ComponentEvent)componentHidden(ComponentEvent)componentResized(ComponentEvent)componentShown(ComponentEvent)WindowWindowListenerwindowClosing(WindowEvent)windowOpened(WindowEvent)windowIconified(WindowEvent)WindowDeiconified(WindowEvent)WindowClosed(WindowEvent)WindowActivated(WindowEvent)WindowDeactivated(WindowEvent)ContainerContainerListenercomponentAdded(ContainerEvent)ComponentRemoved(ContainerEvent)TextTextListenerTextValueChanged(TextEvent)ActionListener接口awt对这个接口的定义是:publicinterfaceActionListenerextendsEventListener{
publicabstractvoidactionPerformed(ActionEvente);}设计处理事件的类时,就要实现这个接口。其一般形式如下:classClassNameimplementsActionListener{…
…publicvoidactionPerformed(ActionEvente){…}}要创建监视器(Classname)的对象,也就是监听者。Classname
对象名=newClassname()
通过实现ActionListener接口,使得监视器能知道事件的发生。在Java中,要求产生事件的事件源向它的监视器注册,这样,事件源与监视器就建立了一个对应关系。建立对应关系的语句如下:对象名.addActionListener(ClassName的对象);其中,对象是事件源,ClassName的对象是监视器。
btn.addActionListener(new
ClassName());
这条语句的意思是:按钮对象(事件源)btn向它的监视器注册,也就是产生事件的事件源对象向监视器注册。事件处理过程(以密码登录为例)
本节将通过一个范例说明事件的处理过程。它将跟踪鼠标被按下时,鼠标的移动情况(鼠标拖动),还将监测当鼠标没有按下时,鼠标的移动情况(鼠标移动)。当鼠标按下或没有按下时,移动鼠标产生的事件会被实现了MouseMotionListener接口的类的对象检取。这个接口要求定义两个方法,mouseDragged()和mouseMoved()。即使你只对鼠标拖动感兴趣,也必须提供这两个方法,但是mouseMoved()的体可以是空的。
要检取其他鼠标事件,包括鼠标点击,必须定义MouseListener接口。这个接口包括若干个事件,即mouseEntered、mouseExited、mousePressed、mouseReleased和mouseClicked。发生鼠标或键盘事件时,有关鼠标的位置和所按下的键的信息可以从事件中得到,代码如下。例8.25ListenDemo.javaimportjava.awt.*;importjava.awt.event.*;publicclassListenDemo implementsMouseMotionListener,MouseListener{ privateFramef; privateTextFieldtf;publicstaticvoidmain(Stringargs[]) { ListenDemotwo=newListenDemo(); two.go();} publicvoidgo() { f=newFrame("Twolistenersexample"); f.add(newLabel("Clickanddragthemouse"),BorderLayout.NORTH); tf=newTextField(30); f.add(tf,BorderLayout.SOUTH); f.addMouseMotionListener(this); f.addMouseListener(this); f.setSize(300,200);
f.setVisible(true); }publicvoidmouseDragged(MouseEvente) {Strings="Mousedragging:X="+e.getX()+"Y="+e.getY(); tf.setText(s); } publicvoidmouseMoved(MouseEvente){} publicvoidmouseClicked(MouseEvente){} publicvoidmouseEntered(MouseEvente) { Strings="Themouseentered";
tf.setText(s); } publicvoidmouseExited(MouseEvente) { Strings="Themousehasleftthebuilding";tf.setText(s); } publicvoidmousePressed(MouseEvente) {} publicvoidmouseReleased(MouseEvente) {}
}
运行以上程序可看到如图8.33所示界面。当在窗口中拖动鼠标时,底端的TextField中将显示鼠标的当前位置。图8.33●定义多了多个接口这个类由代码:
implementsMouseMotionListener,MouseListener
声明。声明多个接口时,可以用逗号隔开。●监听多个源如果调用方法:
f.addMouseListener(this);f.addMouseMotionListener(this);
则两种类型的事件都会引起ListenDemo类中的方法被调用。一个对象可以“监听”任意数量的事件源;它的类只需要实现所要求的接口。事件Adapters(适配器)
一旦指定一个类实现了某个事件监听器接口,就必须实现这个监听器接口的所有方法,否则你只能将你的类定义为抽象类而无法定义这个类的实例。从上面的例子我们可以看到,实现每个Listener接口的所有方法的工作量均是非常大的,尤其是MouseListener接口和ComponentListener接口。以MouseListener接口为例,它定义了如下方法:
①mouseClicked(MouseEvent)②mouseEntered(MouseEvent)③mouseExited(MouseEvent)④mousePressed(MouseEvent)⑤mouseReleased(MouseEvent)
为了方便起见,Java语言提供了Adapters类,用来实现含有多个方法的类。这些Adapters类中的方法是空的。你可以继承
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程施工合同详细版
- 2025年阿坝货运运输驾驶员从业资格证考试试题
- 2025年烟台经营性道路客货运输驾驶员从业资格考试
- 2025年陇南货运从业资格证在哪里练题
- 2025年淄博b2货运资格证全题
- 《高血压治疗新进展》课件
- 第四单元 崇尚法治精神
- 水上救援车使用准则
- 科研机构锅炉升级拆除合同
- 生物技术企业设计审查
- 播音主持专业教学计划
- GB/T 44787-2024静电控制参数实时监控系统通用规范
- 电梯困人应急演练方案
- 【初中历史】西晋的短暂统一和北方各族的内迁课件 2024-2025学年统编版七年级历史上册
- 科研团队协作管理制度
- 中医治疗淋巴水肿
- 财务管理案例光线传媒影视巨头的资本路
- 2024年金华市婺州粮食收储限公司公开招聘工作人员高频难、易错点500题模拟试题附带答案详解
- 铸造车间管理和奖惩制度
- 蜗牛与黄鹂鸟(课件)人音版音乐二年级上册
- 知识论导论:我们能知道什么?学习通超星期末考试答案章节答案2024年
评论
0/150
提交评论