版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、事件模型,事件源与事件,当在一个图形用户界面点击鼠标或者按下键盘时,都是针对于具体组件而发生的动作,如:使用鼠标点击某个按钮;按下键盘向文本框输入内容等等; 我们把动作所操纵的对象称为事件源,请注意:事件源一定是指某个组件; 当针对于事件源发生动作时,就会产生一个事件。,事件对象,Java中的所有事件都被封装在事件对象中,所有事件对象皆派生自EventObject类; 对于不同的事件类型会有不同的事件对象,它们都以类似于XxxEvent的方式命名,如:ActionEvent、MouseEvent等等; 事件对象中包含有事件发生时的相关信息(即事件触发时产生的一些数据),会被事件底层机制传递到事
2、件处理函数中; 实际上事件对象就是事件处理函数中被传递进来的参数,如果在处理事件的过程中需要使用到相关的某些数据,可以从事件对象中获取。,AWT事件类的继承体系,AWT事件类型(列表),监听器与监听器接口,针对每一类型的事件,都有与之相对应的监听器,用于监听事件的发生; 在Java中,监听器由一系列接口来提供; 实际上,事件监听器就是实现了事件监听接口的类,监听器不断监听事件源的动作,当事件源产生一个事件后,监听器接收到事件源的通知,就调用特定的方法,以执行指定的动作。 特定的事件监听器只对特定的事件感兴趣。,java.awt.event包,java.awt.event包中包含了一系列与事件处
3、理相关的类和接口,其中包括:监听器接口,事件对象和事件适配器等; 一般来说,编写图形用户界面程序都必须显式地导入此包; 每种事件监听器接口都是以类似于 XxxListener的形式来命名的,如:ActionListener、MouseListener、ItemListener等;,ActionListener接口,按钮被点击是图形编程中最普遍的事件,我们经常要处理; ActionListener被称为活动监听器,一般用来监听按钮的点击事件; 该接口中包含有一个抽象方法,原型如下: public void actionPerformed(ActionEvent ae); 实现该监听器接口必须重写
4、上面的方法。,事件处理机制,事件:用户对组件的一个操作,称之为一个事件 事件源:发生事件的组件就是事件源 事件处理器:负责处理事件的方法,事件处理机制,执行顺序: 1、给事件源注册监听器 2、组件接受外部作用,也就是事件被触发 3、组件产生一个相应的事件对象,并把此对象传递给与之关联的事件处理器 4、事件处理器启动,并执行相关的代码来处理该事件。,案例1:按钮点击,实现界面代码,import java.awt.*; import java.awt.event.*; import javax.swing.*; public class EventDemo extends JFrame priva
5、te JLabel lblMsg; private JButton btnClick; public EventDemo() lblMsg = new JLabel(请点击下面的按钮.); btnClick = new JButton(请点击我); Container cpMe = getContentPane(); cpMe.setLayout(new BorderLayout(); cpMe.add(lblMsg, BorderLayout.CENTER); cpMe.add(btnClick, BorderLayout.SOUTH); setTitle(ActionListener De
6、mo); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 200); setResizable(false); /设置不允许用户自行调整窗口大小 setVisible(true); public static void main(String args) new EventDemo(); ,事件处理步骤1:确定事件源及监听器类型,由于我们想要处理按钮的点击事件,因此,按钮便是事件源; 监听器类型是ActionListener。,事件源,事件处理步骤2:实现监听器接口(代码),import java.awt.*; impo
7、rt java.awt.event.*; /要进行事件处理,必须导入此包 import javax.swing.*; public class EventDemo extends JFrame private JLabel lblMsg; private JButton btnClick; public EventDemo() /构造方法,代码略 /*采用内部类的方式实现监听器接口*/ private class MyListener implements ActionListener /*实现接口中的抽象方法,事件发生时,将自动调用此方法*/ public void actionPerfor
8、med(ActionEvent ae) lblMsg.setText(我被点击了!); /设置标签中的文本 public static void main(String args) new EventDemo(); ,事件处理步骤3:事件源注册监听器,最后,我们要将事件源注册到监听器,也就是说,必须委派监听器去监听事件源所发生的事件; 每种类型的事件都有其自己的注册方法,一般形式为: void addXxxListener(XxxListener listener); 这里的Xxx指代具体的事件类型,而listener则是相应类型的监听器实例; 一般会采用如下形式将事件源注册到监听器: 事件源
9、.addXxxListener(监听器实例); 如: btnClick.addActionListener(new MyListener();,事件处理步骤3:事件源注册监听器 (代码),import java.awt.*; import java.awt.event.*; import javax.swing.*; public class EventDemo extends JFrame private JLabel lblMsg; private JButton btnClick; public EventDemo() /构造方法,代码略 btnClick.addActionListen
10、er(new MyListener(); /将事件源注册到监听器 /*内部类实现监听器接口*/ private class MyListener implements ActionListener public void actionPerformed(ActionEvent ae) /实现事件处理函数 lblMsg.setText(我被点击了!); public static void main(String args) new EventDemo(); ,常用监听器1:ActionListener,ActionListener可能是使用得最多的监听器,与之对应的事件类型是ActionEve
11、nt,一般在鼠标点击某个按钮时会产生该事件; 该接口只包含有一个抽象方法,其原型如下: 其实现类必须重写actionPerformed方法,当事件发生时将调用该方法。,public interface ActionListener public void actionPerformed(ActionEvent ae); ,常用监听器2:KeyListener,KeyListener专门用来处理键盘事件,其对应事件类型是KeyEvent; 该接口中包含有三个抽象方法,分别在不同的时刻被调用,原型如下:,public interface KeyListener /*按下键盘上的某键时调用*/ pu
12、blic void keyPressed(keyEvent ke); /*释放键盘上的某键时调用*/ public void keyReleased(KeyEvent ke); /*输入某个字符时调用*/ public void keyTyped(KeyEvent ke); ,常用监听器3:MouseListener,操作鼠标时会产生鼠标事件MouseEvent,而MouseListener用来处理鼠标的动作,其原型:,public interface MouseListener /*鼠标按钮在某个组件上按下时调用*/ public void mousePressed(MouseEvent m
13、e); /*鼠标按钮在某个组件上释放时调用*/ public void mouseReleased(MouseEvent me); /*鼠标按钮在某个组件上点击(按下并释放)时调用*/ public void mouseClicked(MouseEvent me); /*鼠标进入到某个组件的范围之内时调用*/ public void mouseEntered(MouseEvent me); /*鼠标离开某个组件的范围之外时调用*/ public void mouseExited(MouseEvent me); ,常用监听器4:MouseMotionListener,MouseMotionLis
14、tener是专门处理鼠标运动事件的,比如将鼠标进行移动和拖动的时候,该接口的原型如下:,public interface MouseMotionListener /*在某个组件上移动鼠标时调用*/ public void mouseMoved(MouseEvent me); /*在某个组件上拖动(按下键并移动)鼠标时调用*/ public void mouseDragged(MouseEvent me); ,常用监听器5:ItemListener,对于象下拉列表、单选按钮、复选按钮这些有选项的组件而言,当它们的选项发生改变的时候,都会产生选项事件ItemEvent,如果需要处理这样的事件,就用
15、到了ItemListener,其原型:,public interface ItemListener /*当选项的状态(选择或取消)发生改变时调用*/ public void itemStateChanged(ItemEvent ie); ,常用监听器6:WindowListener,操作窗口时会产生窗口事件WindowEvent,其对应监听器是WindowListener,原型如下:,public interface WindowListener /*窗口被激活时调用*/ public void windowActivated(WindowEvent we); /*窗口被禁止时调用*/ pub
16、lic void windowDeactivated(WindowEvent we); /*窗口被关闭时调用*/ public void windowClosed(WindowEvent we); /*窗口正在关闭时调用*/ public void windowClosing(WindowEvent we); /*窗口最小化时调用*/ public void windowIconified(WindowEvent we); /*窗口恢复时调用*/ public void windowDeiconified(WindowEvent we); /*窗口打开时调用*/ public void win
17、dowOpened(WindowEvent we); ,常用监听器7:FocusListener,某个组件得到/丢失焦点时将产生焦点事件FocusEvent,可以使用FocusListener来处理这样的事件,该接口原型:,public interface FocusListener /*某个组件获得焦点时调用*/ public void focusGained(FocusEvent fe); /*某个组件失去焦点时调用*/ public void focusLost(FocusEvent fe); ,实现界面代码,import java.awt.*; import java.awt.even
18、t.*; import javax.swing.*; public class MouseMotionDemo extends JFrame private JLabel lblN; /放置在北边的标签 private JLabel lblS; /放置在南边的标签 public MouseMotionDemo() lblN = new JLabel(请移动鼠标); lblS = new JLabel(请拖动鼠标); Container cpMe = this.getContentPane(); cpMe.setLayout(new BorderLayout(); cpMe.add(lblN,
19、BorderLayout.NORTH); cpMe.add(lblS, BorderLayout.SOUTH); this.setTitle(MouseMotionListener Demo); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(600, 400); this.setVisible(true); public static void main(String args) new MouseMotionDemo(); ,步骤1:确定事件源及监听器类型,我们要处理的是鼠标在窗体上移动/拖动时产生的事件,
20、因此,窗体是事件源; 监听器类型是MouseMotionListener。,事件源是 整个窗体,步骤2:实现监听器接口,public class MouseMotionDemo extends JFrame private JLabel lblN; private JLabel lblS; public MouseMotionDemo() /构造方法,代码略 /*内部类实现监听器接口*/ private class MyListener implements MouseMotionListener /*接口中的抽象方法,必须实现,当鼠标移动时自动调用此方法*/ public void mous
21、eMoved(MouseEvent me) /*接口中的抽象方法,必须实现,当鼠标拖动时自动调用此方法*/ public void mouseDragged(MouseEvent me) public static void main(String args) new MouseMotionDemo(); ,事件对象,Java中的所有事件都被封装在事件对象中,所有事件对象皆派生自EventObject类; 对于不同的事件类型会有不同的事件对象,它们都以类似于XxxEvent的方式命名,如:ActionEvent、MouseEvent等等; 事件对象中包含有事件发生时的相关信息(即事件触发时产生
22、的一些数据),会被事件底层机制传递到事件处理函数中; 实际上事件对象就是事件处理函数中被传递进来的参数,如果在处理事件的过程中需要使用到相关的某些数据,可以从事件对象中获取。,java.awt.event.MouseEvent的常用方法,事件处理代码,/*内部类实现监听器接口*/ private class MyListener implements MouseMotionListener /*接口中的抽象方法,必须实现,当鼠标移动时自动调用此方法*/ public void mouseMoved(MouseEvent me) int x = me.getX(); /得到鼠标位置的x坐标 in
23、t y = me.getY(); /得到鼠标位置的y坐标 /将鼠标坐标信息显示到北边的标签中 String str = 正在移动鼠标X: + x + ,Y: + y; lblN.setText(str); /*接口中的抽象方法,必须实现,当鼠标拖动时自动调用此方法*/ public void mouseDragged(MouseEvent me) int x = me.getX(); /得到鼠标位置的x坐标 int y = e.getY(); /得到鼠标位置的y坐标 /将鼠标坐标信息显示到南边的标签中 String str = 正在拖动鼠标X: + x + ,Y: + y; lblS.setT
24、ext(str); ,事件对象,事件对象,步骤3:事件源注册监听器,public class MouseMotionDemo extends JFrame private JLabel lblN; private JLabel lblS; public MouseMotionDemo() /构造方法 /将窗体注册到鼠标运动监听器 this.addMouseMotionListener(new MyListener(); /*内部类实现监听器接口,代码略*/ private class MyListener implements MouseMotionListener public static void main(String args) new MouseMotionDemo(); ,案例2:鼠标运动,直接实现的方式进行事件处理,/*继承于JFrame类,并实现MouseMotionListener接口 不但具备窗体的功能,同时又是一个监听器*/ p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 肺泡灌洗液微生物DNA富集方法的多维度比较与分析
- 肺动脉高压遗传图谱绘制与遗传性肺动脉高压动物模型构建的探索与进展
- 育英之路:大学生干部领导力培养体系构建与实践探索
- 股权质押背景下控股股东掏空行为对股价波动率的传导机制与影响研究
- 股权结构与债务特征交织下的上市公司投资行为解析-基于中国资本市场的实证洞察
- 股权激励对企业投资行为的影响研究:基于多维度视角与案例分析
- 股权分置改革对上市公司价值创造的深度剖析与实证研究
- 护理安全与医疗技术创新
- 安徽省无为县开城中学2026届高三化学试题下学期期末考试试题(A卷)含解析
- 护理课件制作优化技巧
- 烟气余热回收技术参数换算公式
- 缺血缺氧性脑病详解
- 中医病证诊断疗效
- GB/T 2970-2016厚钢板超声检测方法
- 智能农业实验报告
- GB/T 23445-2009聚合物水泥防水涂料
- 人工神经网络HOPFIELD神经网络
- 中小学生励志主题班会课件《告诉你孩子:几年的放纵-换来的是一生卑微和坎坷》
- 2022年山东司法警官职业学院单招综合素质考试笔试试题及答案解析
- 022pet热灌装饮料生产工艺及品质控制
- (完整版)英语高频词汇800词
评论
0/150
提交评论