Java语言-概念-事件处理模型

Java语⾔-概念-事件处理模型
图形⽤户界⾯的操作通常是通过⿏标和键盘操作来实现的。通常⼀个键盘或⿏标操作会引发⼀个系统预先定义好的事件,⽤户程序只需编写代码,定义每个特定事件发⽣时程序应作出何种响应即可。这些代码将在它们对应的事件发⽣时由系统⾃动调⽤,这就是图形⽤户界⾯程序设计事件和事件响应的基本原理。事件处理技术是图形⽤户界⾯程序设计中⼀个⾮常重要的技术。消息处理、事件驱动是⾯向对象编程技术的主要特点。
事件处理机制
若使图形⽤户界⾯能够接收⽤户的操作,就必须给各个组件加上事件处理机制。在事件处理的过程中,主要涉及3类对象。
(1)Event(事件)。所谓事件,就是⽤户使⽤⿏标或键盘对窗⼝中的组件进⾏交互发⽣的⼀个操作。例如,单击按钮、输⼊⽂字、单击⿏标或键盘等。
(2)Event Sourse(事件源)。所谓事件源,就是能够产⽣事件的对象。如按钮、⿏标、⽂本框或键盘等。
(3)Event Handler(事件监听者或处理者)。Java程序把事件进⾏处理的⽅法放在⼀个类对象中,这
管线电伴热
个类对象就是事件监听者(listener)。当事件发⽣时,事件监听者便是被通知的对象。为此,它必须向⼀个或多个事件源注册,以便接受发⽣事件的通知。事件监听者还必须实现⼀些⽅法,⽤来接收和处理通知的事件。接收和处理事件的⽅你分别在java.awt.event的⼀系列的接⼝中定义。例
如,ActionListener监听者接⼝中定义⼀个接收动作事件的⽅法。
再者,如果⽤户⽤⿏标单击按钮对象button,则该按钮button就是事件源,⽽Java运⾏时系统会⽣成ActionEvent类的对象actionEvent,该对象中描述了单击事件发⽣时的⼀些信息。然后,事件处理者对象将接收由Java运⾏时系统传递过来的事件对象actionEvent,并进⾏相应的处理。
每个事件源可以发出若⼲种不同类型的事件。为了对每种事件源发出事件的监听,对每个事件源指定事件监听者。这种处理机制是将⽤户界⾯和事件处理分开,使得程序结构更加清晰和⾃然。
事件(处理者)通常是⼀个类,该类如果能够处理某种类型的事件,就必须实现与该事件类型相对应的接⼝。例如,⼀个JButtonHandler类之所以能够处理ActionEvent事件,原因在于它实现与ActionEvent事件对应的接⼝ActionListener。每个事件类都有⼀个与之相对应的接⼝。
在GUI程序设计中,处理发⽣在某个GUI组件上的XxxEvent事件的某种情况,其事件处理的通⽤编写流程如下:
(1)创建某种事件类的事件对象,并将它们加到容器中,该容器则实现了XxxListener接⼝的事件类。
(2)注册当前容器为事件对象的监听者。注册监听者可采⽤事件源的addXxxListener()⽅法来实现。例如,M.addXxxListener(N)。
这是将N对象注册为M对象的监听者
(3)在注册为的容器中,重新定义接⼝中的相应⽅法进⾏事件处理。
下⾯通过例⼦说明事件处理的具体过程。
【例】在⼀个窗⼝中摆放6个组件:4个标签和2个⽂本框。当⽂本框中的信息更改,将⽂本框中信息显⽰在第3、4个标签中。
package Swing;
ca130import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Event_Exam extends JFrame implements ActionListener {
static Event_Exam mainJFrame=new Event_Exam();
static JLabel labl1,labl2;
static JLabel showlb1=new JLabel("0");
static JLabel showlb2=new JLabel("0.0");
static JTextField text1,text2;
public static void main(String[] args){
// TODO Auto-generated method stub
mainJFrame.setTitle("操作事件⽰例!");
mainJFrame.setSize(200,160);
Container ContentPane();
container.setLayout(new FlowLayout());
labl1=new JLabel("输⼊整数型:");
container.add(labl1);
text1=new JTextField("0",10);
text1.addActionListener(mainJFrame);//把监听者mainJFrame向事件源text1注册
container.add(text1);
labl2=new JLabel("输⼊浮点数:");
container.add(labl2);
text2=new JTextField("0.0",10);
text2.addActionListener(mainJFrame);//把监听者mainJFrame向事件源text2注册
container.add(text2);
showlb1.setForeground(Color.blue);
showlb1.setHorizontalTextPosition(SwingConstants.LEFT);
showlb2.);
showlb2.setHorizontalTextPosition(SwingConstants.LEFT);
container.add(showlb1);
container.add(showlb2);
mainJFrame.setVisible(true);
}
public void actionPerformed(ActionEvent e){//事件发⽣时的处理操作
//提取⽂本框内容并显⽰在showlb1、showlb2中
showlb1.setText("整数为"+Text());
showlb2.setText("浮点数为"+Text());
}
}
该程序创建了1个窗⼝mainJFrame、4个标签和2个⽂本框,其中事件源为text1和text2⽂本框。为了编写事件处理程序,⾸先必须选择事件源的监听者。通常情况下,监听者由包含事件源的对象承担。由于mainJFrame中包含text1和text2,故由mainJFrame来担任监听者,让它具有事件处理能⼒的⽅式就是让类Event_Exam实现(implements)事件处理的接⼝(interface)。按钮触发的事件是由ActionListener接⼝监听的,因此,在类Event_Exam定义中必须添加“implements ActionListener”代码。
确定了事件源与监听者之后,接下来就是把监听者mainJFrame向事件源注册text1注册。其⽅法是
⽤“text1.addActionListener(mainJFrame)”语句设置。当text1⽂本框信息更改时,它会创建⼀个代表此
事件的对象,本例中是ActionEvent类型的对象,这个对象包含了此事件与它的引发者text1⽂本框等相关信息。
类在实现接⼝中,必须在类的定义接⼝⾥只声明未定义的所有⽅法。因为ActionListener接⼝只提供了⼀个actionPerformed()⽅法,该⽅法正是要把事件处理程序编写在⾥⾯的⽅法。本例的事件处理程序代码如下:
public void actionPerformed(ActionEvent e) {//事件发⽣时的处理操作
//提取⽂本框内容并显⽰在showlb1、showlb2中
showlb1.setText(“整数为”+Text());破窗锤
showlb2.setText(“浮点数为”+Text());
}
由于actionPerformed()⽅法将会接收ActionEvent类型的对象e,这个对象正是事件源btn按钮被单击后所传过来的事件对象。因为程序中要⽤到ActionEvent类,所以必须⽤“import java.awt.event.*;”语句加载包含此类的类库。
事件处理类
在前⾯介绍的事件模型及事件处理机制中,涉及ActionEvent事件类,其实Java语⾔在java.awt.event包中定义了许多事件类⽤于处理各种⽤户操作所产⽣的事件,它们都继承⾃java.awt包中的AWTEvent类。
java.util.EventObject类是所有事件对象的基础⽗类,所有事件都是由它派⽣出来的。AWT的相关事件继承与java.awt.AWTEvent类,这些AWT事件分为两⼤类:低级事件和⾼级事件。
mesh设备
1.低价事件
低级事件是指基于组件和容器的事件,当⼀个组件上发⽣事件,如⿏标的进⼊、单击、拖放等,或组件的窗⼝开关等,触发组件事件。(1)ComponentEvent组件事件:组件尺⼨的变化、移动。
(2)ContainerEvent容器事件:组件增加、移动。
(3)WindowEvent窗⼝事件:包括⽤户单击关闭按钮,窗⼝得到与失去焦点,窗⼝最⼩化等。
(4)FocusEvent焦点事件:焦点的获得和丢失。
(5)KeyEvent键盘事件:键按下、释放。
微孔网
(6)MouseEvent⿏标事件:包括⿏标按下、⿏标释放、⿏标单击等。
2.⾼级事件(语义事件)
⾼级事件是基于语义的事件,它可以不和特定的动作相关联,⽽依赖于触发此事件的类。例如,在JTextField中按Enter键会触发ActionEvent事件,滑动滚动条会触发AdjustmentEvent事件,选中项⽬列表的某⼀条就会触发ItemEvent事件。
(1)ActionEvent动作事件:对应⼀个动作事件,它不是代表⼀个具体的动作,⽽是⼀种语义。如按钮按下,在JTextField中按Enter键。(2)AdjustmentEvent调节事件:在滚动条上移动滑块以调节数值。
(3)ItemEvent项⽬事件:选择项⽬,不选择“项⽬改变”。
(4)TextEvent⽂本事件:⽂本对象改变。
对于每个事件类,⼏乎都有相应的事件监听者。Java语⾔的事件监听者绝⼤多数都是以接⼝的形式给出的,这些接⼝都是继承⾃
java.util.EventListener接⼝。
⼀个事件对象负责处理⼀类事件。⼀类事件的每⼀张发⽣情况,分别由事件对象中的⼀个⽅法来具体处理。在事件源和事件对象中进⾏约定的接⼝类,被称为事件的接⼝。事件接⼝类的名称与事件类的名称相对应,例如,MouseEvent事件类的接⼝名为MouseListener。
事件适配器晶体石膏灯
Java语⾔类的层次⾮常分明,它只⽀持单继承。为了实现多重继承的能⼒,Java⽤接⼝来实现,⼀个类可以实现多个接⼝,这种机制⽐多重继承具有更简单、更灵活、更强的功能。在AWT中就经常⽤到声明和实现多个接⼝。请记住:⽆论实现了⼏个接⼝,接⼝中已定义的⽅法就必须⼀⼀实现;如果对某事件不感兴趣,可以不具体实现其⽅法,⽽⽤空的⽅法体来代替,但所有⽅法都必须要写上。这样⼀来会有⼀些不便。为了解决这个问题,AWT使⽤了适配器(Adapter),Java语⾔为⼀些Listener接⼝提供了适配器类(Adapter)。可以通过继承事件所对应的Adapter类,重写所需要的⽅法,⽆关的⽅法则不⽤实现。事件适配器为提供了⼀种简单的实现监听的⼿段,可以缩短程序代码。
案例分析:银⾏系统事件类综合应⽤

本文发布于:2024-09-22 01:48:42,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/186289.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:事件   对象   监听   组件   处理
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议