事件处理:
来源:互联网 发布:js object方法 编辑:程序博客网 时间:2024/05/22 03:20
事件处理:
(1)为了给图形界面能够接受用户的操作,必须给各个组件加上事件处理机制,在事件处理过程中,主要涉及三类对象:
Event Source(事件源) 事件发生的场所,通常就是各个组件,如按钮,窗口等
Event(事件)事件封装了GUI上特定的事情(通常就是一次用户操作),如果程序需要获得GUI上所发生事件的相关信息,都可以根据Event对象来获得
EventListener(事件监听器):负责监听事件源所发生的事件,并对各种事件作出相应处理
(2)由于java是面向对象的编程语言,方法不能独立存在,因此必须以类的形式组织这些方法,所以事件监听器的核心就是其包含的方法,这些方法也被称为事件处理器(Event Handler)
(3)当用户作出单击按钮等这样的操作时,这些动作就会触发相应的事件,该事件由AWT封装成相应的Event对象,该事件会触发事件源上注册的事件监听器(特殊的java对象),事件监听器调用对应的事件处理器(事件监听器里的实例方法)作出相应的相应。
import java.awt.BorderLayout;import java.awt.Button;import java.awt.Frame;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class EventQs{ Frame f =new Frame("事件测试"); Button ok =new Button("ok"); TextField tf=new TextField(40); public void init(){ //注册事件监听器,监听ok按钮 ok.addActionListener(new OkListener()); f.add(tf); f.add(ok, BorderLayout.SOUTH); f.pack(); f.setVisible(true); } //定义事件监听器类 class OkListener implements ActionListener{ //下面定义的方法就是事件处理器,用于相应特定的事件 public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub System.out.println("用户单击了ok按钮"); tf.setText("hello"); } } public static void main(String[] args){ new EventQs().init(); }}
(4)实现AWT事件处理机制的步骤:
a.实现事件监听器类,该监听器是一个特殊的java类,必须实现一个XxxListener接口
b.创建事件监听源,创建事件监听对象
c.调用addXxxListener()方法将事件监听器注册给普通组件,当事件源发生指定事件时,AWT会触发事件监听器,由事件监听器调用相应的方法(事件处理器)来处理事件,事件源上所发生的事件将作为参数传递给事件处理器
5)实现事件监听器是事件处理的核心。事件监听器必须实现事件监听器接口,AWT提供了大量的事件监听器接口用于实现不同类型的事件监听器,用于监听不同类型的市价 。AWT提供了丰富的事件类,用于封装不同组件上所发生的不同操作。
(6)AWT事件分为两大类:低级事件和高级事件
低级事件:
低级事件是指基于特定动作的事件,比如进入、点击、拖放等动作的鼠标事件,当组件得到焦点、失去焦点时触发的焦点事件。
ComponentEvent:组件事件,当组件尺寸发生变化、位置发生移动、显示/隐藏发生变化时触发该事件
ContainerEvent:容器事件,添加组件,删除组件时发生变化
WindowEvent:窗口事件,当窗口状态发生改变(打开 关闭 最大化 最小化)触发该事件
FocusEvent:焦点事件,当组件得到焦点或者失去焦点时触发该事件
keyEvent:键盘事件,当按键配按下,松开,单击时触发事件
MouseEvent:鼠标事件
PaintEvent:组件绘制事件
高级事件(语义事件)
高级事件是基于语义的事件,它可以不和特定的动作相关联,而依赖于触发此事件的类,例如在滑动条上滑动滑块会触发AdjuctmentEvent事件,选中项目列表中的某一项就会触发ItemEvent事件
ActionEvent:动作事件,当按钮、菜单项被单击,在TextFiled按Enter时触发该事件
AdjuctmentEvent:调节事件,在滑动条上滑动滑块调节数值时发生该事件。
ItemEvent:选项事件,当用户选中某项或者取消时触发该事件
TextEvent:文本事件,当文本框文本域的文本发生变化时触发该事件。
//下面程序示范了一个监听器监听多个组件,一个组件被多个监听器监听的效果
import java.awt.BorderLayout;import java.awt.Button;import java.awt.Frame;import java.awt.Panel;import java.awt.TextArea;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class MultiListener{ Frame f =new Frame("监听器测试"); TextArea ta =new TextArea(8, 50); Button b1 =new Button("按钮1"); Button b2=new Button("按钮2"); public void inti(){ //创建FirstListener实例 FirstListener f1=new FirstListener(); //给b1按钮注册两个事件监听器 b1.addActionListener(f1); b2.addActionListener(new SecondListener()); //将f1事件监听器注册给b2按钮 b2.addActionListener(f1); f.add(ta); Panel p=new Panel(); p.add(b1); p.add(b2); f.add(p, BorderLayout.SOUTH); f.pack(); f.setVisible(true); } class FirstListener implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub ta.append("第一个事件监听器被触发,事件源是:"+e.getActionCommand()+"\n"); } } class SecondListener implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub ta.append("单击了"+e.getActionCommand()); } } public static void main(String[] args){ new MultiListener().inti(); }}
//上面程序调用了ActionEvent的getActionCommand()方法,用于获取被单击按钮上的文本
————————————————————————————————————————————————————————————————————————————
//下面程序为窗口添加窗口监听器
import java.awt.Frame;import java.awt.TextArea;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;public class WindowListenerTest{ Frame f=new Frame("窗口监听器测试"); TextArea ta=new TextArea(8, 50); public void init(){ //为窗口添加窗口事件监听器 f.addWindowListener(new MyListener()); f.add(ta); f.pack(); f.setVisible(true); } //实现一个窗口监听器类 class MyListener implements WindowListener{ @Override public void windowOpened(WindowEvent e) { // TODO Auto-generated method stub ta.append("窗口被打开\n "); } @Override public void windowClosing(WindowEvent e) { // TODO Auto-generated method stub ta.append("窗口关闭窗口\n "); System.exit(0); } @Override public void windowClosed(WindowEvent e) { // TODO Auto-generated method stub ta.append("窗口被关闭 \n "); } @Override public void windowIconified(WindowEvent e) { // TODO Auto-generated method stub ta.append("窗口被最小化 \n "); } @Override public void windowDeiconified(WindowEvent e) { // TODO Auto-generated method stub ta.append("窗口被恢复 \n "); } @Override public void windowActivated(WindowEvent e) { // TODO Auto-generated method stub ta.append("窗口被激活 \n "); } @Override public void windowDeactivated(WindowEvent e) { // TODO Auto-generated method stub ta.append("窗口失去焦点 \n "); } }}
- 事件处理
- 事件处理
- 事件处理
- 处理事件
- 事件处理
- 事件处理
- 事件处理
- 事件处理
- 处理事件
- 事件处理
- 事件处理
- 事件处理
- 事件处理
- 事件处理
- 事件处理
- 事件处理
- 事件处理
- 事件处理
- redis要怎么加锁啊
- 《剑指offer》二叉树的下一个结点
- javascript犀牛书学习笔记(一)函数
- yii CDbCriteria详细说明
- matlab的limsvm配置
- 事件处理:
- 搞定angular1.x——自定义指令
- 同源策略 及 jsonp
- 面试题集锦
- java基础50题(1)
- Android studio 2.2
- html中的数据存储
- MapReduce: 一种简化的大规模集群数据处理法
- Android内存优化大全(中)