全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java开发中的事件驱动模型实例详解或许每个软件从业者都有从学习控制台应用程序到学习可视化编程的转变过程,控制台应用程序的优点在于可以方便的练习某个语言的语法和开发习惯(如.net和java),而可视化编程的学习又可以非常方便开发出各类人机对话界面(HMI)。可视化编程或许是一个初学者开始对软件感兴或许每个软件从业者都有从学习控制台应用程序到学习可视化编程的转变过程,控制台应用程序的优点在于可以方便的练习某个语言的语法和开发习惯(如.net和java),而可视化编程的学习又可以非常方便开发出各类人机对话界面(HMI)。可视化编程或许是一个初学者开始对软件感兴趣的开始,也可能是一个软件学习的里程碑点,因为我们可以使用各类软件集成开发环境(IDE)方便的在现成的界面窗口上拖放各类组件(Component),这类组件包括我们常见的按钮(Button),单选按钮(Radio Button),复选框等(Checkbox)。这样的拖放式开发方式不但方便,而且窗口会立竿见影的显示在我们的面前,这对于一个软件初学者而言或许是一件非常有成就感的事情。 但是很多软件学习者在学习可视化开发的过程中,只是非常表面的来理解可视化编程,他们可能认为能够使用拖放方式完成一个界面就非常值得称道,但是很少有人会认真的去理解编程语言对于可视化编程组件的支持和整合,在Softworks软件人才培训中心的两年教学过程,我深刻的感受到了这一点,因此下文将会结合我的教学经验来讲解可视化编程过程中最为关键的“事件驱动模型”。1.什么是事件驱动模型?在讲解事件驱动模型之前,我们现在看看事件驱动模型的三大要素:事件源:能够接收外部事件的源体。侦听器:能够接收事件源通知的对象。事件处理程序:用于处理事件的对象。学员应该要理解任何基于事件驱动模型的开发技术都包含以上三大要素,不管是.net还是java技术,甚至是以前我们使用的Visual Basic和Delphi语言都有基于以上三大要素的事件驱动模型开发流程。现在我们来看一个生活中的示例,如果有一天你走在路上一不小心被天上掉下来的花瓶砸到了,并且晕死了过去。那么整个过程其实就是一个事件处理流程,而且我们可以非常方便的分析出刚才所提到的事件驱动模型中的三大要素。1.被砸晕的这个人其实就是事件源,因为他是能够接受到外部的事件的源体。2.侦听器就是这个人的大脑神经,因为它会感知到疼痛。3.事件处理就是这个人晕死了过去。由于事件驱动模型在我们日常生活中是无处不在的,因此Java和其他的编程语言都将这一过程运用到了可视化编程中了。2.Java编程语言中的事件驱动模型在Java编程技术中,最常用的可视化编程当属Java Swing技术,Java Swing为开发者提供了很多现成的组件,如:按钮(JButton),单选按钮(JRadioButton)等。为了管理用户与组成程序图形用户界面的组件间的交互,必须理解在Java中如何处理事件。假设用户单击了程序图形用户界面中的一个按钮,其实该按钮就是这个事件的源(可以引发事件的物体)。所有的Java Swing对象都有感知自己被操作的能力,因此JButton按钮也具有这样能力。一个事件通常必须有一个源对象,这里就是JButton对象。当单击按钮时,JButton组件类会生成一个用于存放该事件参数的ActionEvent的对象,该对象包含了事件及事件源的信息。图1-1显示了这种机制。图 1-1当JButton感知到自己被点击以后会将这种感觉传递给某个侦听器对象,该侦听器对象原先已被告知对该类事件感兴趣,侦听器对象仅是一种侦听特定事件的对象。这里的“将事件传递给侦听器”仅意味着事件源调用侦听器对象中的一个特定方法,并以事件对象作为实参。侦听器对象可以侦听一个特定对象的事件(比如一个按钮)。其实可以使任何类的对象成为侦听器对象,只要使该类实现侦听器接口。你将会发现有各种各样的侦听器接口,以满足不同类型事件的需要。在这个单击按钮的例子中,需要实现ActionListener接口以便接收按钮事件。在侦听器接口声明的方法中,实现了接受这个事件对象并响应该事件的代码。在本例中,在事件发生时,调用了ActionListener接口中的actionPerformed()方法。每种侦听器接口都定义了特定的方法,用来接收该侦听器计划要处理的事件。仅仅实现侦听器接口还不足以将侦听器对象连接到事件源上,仍需要把侦听器与希望处理的事件单个源或多个源连接起来。通过调用事件源对象的特定方法,可以注册带有事件源的侦听器对象。例如,为了注册侦听单击按钮事件的侦听器,需要调用JButton对象的addActionListener()方法,该操作可以使侦听对象和事件源绑定。每个事件响应时只涉及到对该事件感兴趣的侦听器。由于侦听器只要求实现一个合适的接口,所以实际上,可以在任何希望的地方接收和处理事件。在Java中使用侦听器对象处理事件的方式,称为委托事件模型,这是因为对于诸如按钮这种组件引起的事件响应,并不是由引起事件的对象本身处理,而是委托独立的侦听器对象进行处理,刚才的actionPerformed()其实就是一个委托处理方法。现在让我们来看一下,JButton是如何将用户的点击转化成方法处理的(如图1-2)。图1-2JButton组件初始化代码片断: private void initialize() frame = new JFrame(); frame.getContentPane ().setLayout (null); frame.setBounds (100, 100, 247, 165); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setTitle (事件驱动程序); /btnPress就是这次点击操作中的事件源 btnPress = new JButton(); btnPress.setText (Press); btnPress.setName (Press); btnPress.setBounds (63, 98, 99, 23); /向事件源btnPress植入侦听器对象ButtonEventHandler btnPress.addActionListener (new ButtonEventHandler(this); frame.getContentPane ().add(btnPress); frame.getContentPane ().add(txtMessage); 侦听器创建的代码片断:/侦听器对象ButtonEventHandler(用来侦听按钮的点击操作) class ButtonEventHandler implements ActionListener /窗体对象 private EventDemo form = null; /通过构造体传入窗体对象, /作用在于让侦听器对象明白事件源处于 /哪个窗体容器中 public ButtonEventHandler(EventDemo form) this.form = form; /委托方法 public void actionPerformed(ActionEvent e) /该方法将会把事件的处理权交给窗体容器类的/btnPress_Click方法处理。 this.form.btnPress_Click(e); 真正的事件处理代码片断: /* * 按钮btnPress的事件处理方法。 * * param e 事件参数 */ private void btnPress_Click(ActionEvent e) String message = 你点击的按钮名叫: + (JButton) e.getSource().getName(); this.txtMessage.setText(message); 代码工作原理:JButton组件初始化代码片断已经明确阐述了按钮被创建后放置于窗体上,关键在于本代码片断的以下语句:btnPress.addActionListener(new ButtonEventHandler(this);该语句就是向事件源植入了侦听器对象ButtonEventHandler,该类实现了ActionListener结构,因此JButton类的对象btnPress这个时候已经具有了处理用户点击按钮的能力了。当用户点击btnPress这个按钮的时候,按钮对象会直接把这次点击感觉传递给ButtonEventHandler的actionPerformed方法处理,为养成较好的编程习惯,我们中心并不建议学员直接在该委托方法中编写代码,而是需要将该事件处理再次转发给窗体中的某个方法来处理,这个方法的命名也必须是有规则的,就是事件源名+下划线+事件名(btnPress_Click),并且该方法必须具有事件参数Action
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 歌尔股份秋招真题及答案
- 2026年长江职业学院单招职业倾向性测试必刷测试卷新版
- 2025广西师范大学劳动合同制员工招聘1人参考题库含答案详解(巩固)
- 2025年甘肃省陇南市康县选调20人参考题库参考答案详解
- 2026年甘肃机电职业技术学院单招职业技能测试必刷测试卷带答案
- 2025广西南宁宾阳县大桥镇乡村振兴工作站招聘信息员1人参考题库及参考答案详解1套
- 2025年甘肃省省直事业单位招聘考试真题题库 公共基础知识含答案详解(典型题)
- 2026年陕西交通职业技术学院单招职业倾向性考试必刷测试卷汇编
- 2026年泸州职业技术学院单招职业技能测试题库及答案1套
- 教师高考培训题库及答案
- 2025浙江台州市信保基金融资担保有限责任公司招聘10人笔试历年参考题库附带答案详解
- 2025榆林镇北台、红石峡景区招聘(26人)考试笔试模拟试题及答案解析
- 2025辽宁省咨询产业集团招聘考试参考题库及答案解析
- 村干部考入事业编面试真题(含答案)
- 铝锭贸易专业知识培训课件
- 安全生产相关工作主要业绩及研究成果
- 机房运维题考试题及答案
- 会诊制度存在问题及整改措施
- 黄河防汛业务知识培训课件
- 大学生职业规划大赛《生物科学专业》生涯发展展示
- 2025年公务员公开遴选笔试试题及答案(综合类)
评论
0/150
提交评论