(61)-14.5 事件处理模型面向对象程序设计_第1页
(61)-14.5 事件处理模型面向对象程序设计_第2页
(61)-14.5 事件处理模型面向对象程序设计_第3页
(61)-14.5 事件处理模型面向对象程序设计_第4页
(61)-14.5 事件处理模型面向对象程序设计_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1主要涉及3类对象。(1)Event(事件):用户使用鼠标或键盘对窗口中的组件进行交互发生的一个操作。例如,单击按钮等。(2)EventSource(事件源):能够产生事件的对象。如按钮、鼠标、文本框或键盘等。(3)Eventlistener(事件监听者或处理者)包含对事件进行处理方法的类。事件监听器A事件监听器B事件对象事件对象事件源(例如:按钮)12.5事件处理模型12.5事件处理模型12.5.1事件处理机制事件处理机制专门用于响应用户的操作,比如,想要响应用户的点击鼠标、按下键盘等操作,就需要使用AWT的事件处理机制事件对象(Event):封装了GUI组件上发生的特定事件(通常就是用户的一次操作)。事件源(组件):事件发生的场所,通常就是产生事件的组件监听器(Listener):负责监听事件源上发生的事件,并对各种事件做出响应处理的对象(对象中包含事件处理器)事件处理器:监听器对象对接收的事件对象进行相应处理的方法3!用户交互事件如:单击鼠标如:按下/释放鼠标按钮对象状态改变调用事件处理确定发生的事件的类型确定生成的事件的组件编写合适的代码处理事件事件作用于对象。对象识别事件并做出响应,不同的对象能识别的事件不全相同。可以针对相应的事件编写相应的代码,在事件发生时,程序执行事件里的代码。4

源对象监听器事件

传播事件的实例方法传递途径代理事件模型Swing中的GUI组件适配器对象12.5事件处理模型12.5.1事件处理机制12.5事件处理模型12.5.2事件适配器例程9-3实现了和例程9-2相同的功能。定义的MyWindowAdapter类继承了适配器类WindowAdapter,由于实现的功能是关闭窗口,因此只需要对windowClosing()方法进行重写即可。需要注意的是,几乎所有的监听器接口都有对应的适配器类,通过继承适配器类来实现监听器接口时,需要处理哪种事件,直接重写该事件对应的方法即可。12.5事件处理模型12.5.3用匿名内部类实现事件处理12.5事件处理模型窗体事件WindowEvent用于表示这些窗体事件,在应用程序中,当对窗体事件进行处理时,首先需要定义一个类实现WindowListener接口作为窗体监听器,然后通过addWindowListener()方法将窗体对象与窗体监听器绑定12.5事件处理模型鼠标事件MouseEvent类用于表示鼠标事件,几乎所有的组件都可以产生鼠标事件,鼠标事件包括鼠标按下、鼠标松开、鼠标单击等。对鼠标事件的处理可通过实现MouseListener接口或者继承适配器MouseAdapter类,然后调用addMouseListener()方法将监听器绑定到事件源对象12.5事件处理模型键盘事件键盘操作也是最常用的用户交互方式,例如键盘按下、释放等,这些操作被定义为键盘事件KeyEvent类表示键盘事件,处理KeyEvent事件的监听器对象需要实现KeyListener接口或者继承KeyAdapter类。12.5事件处理模型动作事件在Java中,动作事件用ActionEvent类表示,处理ActionEvent事件的监听器对象需要实现ActionListener接口,但监听器对象在监听动作时,不会像鼠标事件一样处理鼠标个别的移动和单击的细节,而是去处理“按钮按下”这样“有意义”的事件。12【例9-7】在一个窗口中摆放5个组件,3个标签和2个文本框。当文本框中信息更改后,将文本框中信息显示在第3个标签中,同时设置其背景色为黄色。

演示:Event_Exam.java12.5事件处理模型1312.5.4事件处理类java.util.EventObject类是所有事件对象的基础父类,所有事件都是由它派生出来的。Swing的相关事件继承于java.awt.SwingEvent类Swing事件分为两大类:低级事件高级事件1412.5.4事件处理类低级事件:指基于组件和容器的事件,当一个组件上发生事件,如鼠标的进入、点击、拖放等,或组件的窗口开关等时,触发了组件事件。(1)ComponentEvent组件事件:组件尺寸的变化、移动。(2)ContainerEvent容器事件:组件增加、移动。(3)WindowEvent窗口事件:包括用户点击了关闭按钮,窗口得到与失去焦点,窗口最小化等。(4)FocusEvent焦点事件:焦点的获得和丢失。(5)KeyEvent键盘事件:键按下、释放。(6)MouseEvent鼠标事件:包括鼠标按下,鼠标释放,鼠标点击等。1512.5.4事件处理类高级事件:基于语义的事件,它可以不和特定的动作相关联,而依赖于触发此事件的类。比如,在JTextField中按Enter键会触发ActionEvent事件,滑动滚动条会触发AdjustmentEvent事件,选中项目列表的某一条就会触发ItemEvent事件。(1)ActionEvent动作事件:对应一个动作事件,它不是代表一个具体的动作,而是一种语义。如按钮按下,JTextField中按Enter键。(2)AdjustmentEvent调节事件:在滚动条上移动滑块以调节数值。(3)ItemEvent项目事件:选择项目,不选择“项目改变”。(4)TextEvent文本事件:文本对象改变。1612.5.4事件处理类事件监听接口:一个类可以实现多个接口,接口中已定义的方法必须一一实现,如果对某事件不感兴趣,也要用空的方法体代替。适配器类(Adapter):为一些Listener接口提供了适配器,可通过继承事件所对应的Adapter类,重写所需要的方法,无关的方法则不用实现。事件适配器为提供了一种简单的实现监听器的手段,可以缩短程序代码。1712.5.5案例分析:键盘和鼠标事件类综合实例1.案例描述利用一个文本框组件接收从键盘输入的文字,同时将所触发的“键盘事件”显示在一个文本区组件中。利用鼠标拖动窗口中按钮,同时将鼠标指针当前的位置显示在文本框中。1812.5.5案例分析:键盘和鼠标事件类综合实例2.案例分析本案例至少需要创建2个文本区,1个文本框和1个按钮。为了响应鼠标和键盘事件需要编程实现KeyListener接口、MouseListener接口和MouserMotionListener接口。为了将两种事件类分别演示,需要将窗口布局设置为CardLayout方式,同时还需增加至少两个按钮来完成翻页功能。演示程序:KeyAndMouse_Exam.java19练习题:编写一个允许学生在文本字段中输入一个数的程序。创建一个每当用户单击一次就将此数加一的按钮。创建另一个每当用户单击一次就将此数减一的按钮。界面效果如下图所示。20importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;classIncrementorimplementsActionListener{JTextFieldnumberTxf;JButtonincrementBtn,decrementBtn;publicvoidmakeGUI(){JFramefrm=newJFrame("Incrementor");Containerc=frm.getContentPane();c.setLayout(newFlowLayout());numberTxf=newJTextField("0",5);c.add(numberTxf);incrementBtn=newJButton("Increment");c.add(incrementBtn);

incrementBtn.addActionListener(this);decrementBtn=newJButton("Decrement");c.add(decrementBtn);

decrementBtn.addActionListener(this);frm.setSize(300,100);frm.setVisible(true);}21publicvoidactionPerformed(ActionEvente){intoldNum=Integer.parseInt(numberTxf.getText());intnewNum=oldNum;if(e.getActionCommand().equals("Increment")){newNum++;}elseif(e.getActionCommand().equals("Decrement")){newNum--;}numberTxf.setText(String.valueOf(newNum));}publicstaticvoidmain(Stringargs[]){Incrementori=newIncrementor();i.makeGUI();}}if(e.getSource()==incrementBtn){elseif(e.getSource()==decrementBtn){22练习题:用JComboBox和JCheckBox来演示可选项目事件接口,界面如下图所示:23importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassItemDemoimplementsItemListener{JFramef;JPanelp1,p2,p3;JLabelbirthPlace,hobby;JComboBoxplace;JCheckBoxhobby1,hobby2,hobby3;publicItemDemo(Stringtitle){f=newJFrame(title);p1=newJPanel();birthPlace=newJLabel("出生地:");place=newJComboBox();place.addItemListener(this);place.addItem("杭州");place.addItem("宁波");place.addItem("温州");place.addItem("绍兴");p1.add(birthPlace);p1.add(place);f.add(p1,"North");24p2=newJPanel();p2.setLayout(newGridLayout(3,1));hobby=newJLabel("业余爱好:");hobby1=newJCheckBox("运动");

hobby1.addItemListener(this);hobby2=newJCheckBox("旅游");

hobby2.addItemListener(this);hobby3=newJCheckBox("上网");

hobby3.addItemListener(this);p2.add(hobby1);p2.add(hobby2);p2.add(hobby3);p3=newJPanel();p3.add(hobby);p3.add(p2);f.add(p3,"Center");

f.pack();f.setVisible(true);}25publicvoiditemStateChanged(ItemEvente){if

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论