Java学习笔记7——事件处理

    其实,由事件处理这个名字自然就想到MFC中的消息响应机制,就我的体会,它们应该算是南桔北枳的情形吧,我怀疑Java中的事件处理这个"新瓶"应是装的MFC中的消息响应这个"旧酒"。
    所谓的"事件"即如键盘按键、鼠标点击等这类由动作或什么导致某个状态改变并需要对这个改变作相应响应的这类改变。我们可以将Java中的事件分为按钮、鼠标、键盘、窗口、其它事件这几大类。
    事件处理模型
    1、基于继承的事件处理模型(JDK1.0)
JDK1.0中,事件处理是基于继承的,事件先发送到组件,然后沿容器层次向上传播。没有被组件处理的事件会自动地继续传播到组件的容器。——这个与MFC中的原始事件响应顺序或者多态的响应机制似乎一致,而后面说的基于代理的事件处理机制似乎又与MFC的回调机制一致。
    具体的处理方法
调用action()方法或handleEvent()方法来获取程序运行时发生的事件,所有组件发生的事件都在此方法中处理。
    2、基于代理的事件处理模型(JDK1。1)
在这个模型中,事件被直接送往产生这个事件的组件,
对于每一个组件注册一个或多个称为监听者的类,这些类包含事件处理器,用来接收和处理这个事件。
监听者就是实现了Listener接口的类。事件是只向注册的监听者报告的对象。每个事件都有一个对应的监听者接口。
在Button对象上用鼠标进行点击时,将发送一个ActionEvent事件。这个ActionEvent事件会被使用addActionListener()方法进行注册的所有ActionListener的actionPerformed()方法接收。
基于代理的事件处理模型的特点
①事件不会被意外地处理。在层次模型中,一个事件可能传播到容器,并在非预期的层次被处理。
②有可能创建并使用适配器(adapter)类对事件动作进行分类。
③有利于把工作分布到各个类中。
重点学习这种事件处理模型
3、事件
事件处理的三要素。
(1)事件源  事件源是一个事件的产生者,如按钮、窗口及文本域等。
(2)事件类型  Java中所有的事件都封装成一个类,这些事件类被集中在java.awt.event包,所有的事件类均继承了AWTEvent类和一个方法——getSouce()方法,该方法返回发生事件的对象。
(3)事件监听器  不同的类型事件发生后,由事件监听器接收事件并调用相应的事件处理方法。所有的事件监听器实际上都是一个java.awt.event包中的接口,引入了java.util.EventListener接口。不同事件类型的监听器具有不同的方法。
事件处理步骤
① 程序加入java.awt.event包:
Import java.awt.event;
② 给所需的事件源对象注册事件监听器:
事件源对象.addXXXListener(XXXListener);
③ 实现相应的方法。如果某个监听器接口包含多个方法,则需要实现所有的方法
例:b2.addActionListener(this)
4、事件Adapters(适配器)
实现每个Listener接口的所有方法的工作量是非常大的,为了方便起见,Java语言提供了Adapters类,用来实现含有多个方法的类。
你定义的Listener可以继承Adapter类,而且只需重写你所需要的方法。
例如,窗口事件对应的监听器为WindowListener,它必须实现多个方法,包括windowOpened()、windowClosed()、windowClosing()、WindowIconfied()、WindowDeiconfied()、WindowActivated()、WindowDeactivated(),这样加大了不必要的编程工作量。
如果继承了WindowAdapter,就只需实现其中某一个或几个方法,不需要实现所有的方法。后面很多的例子都只实现windowClosing()一个方法,目的是在关闭窗口时退出系统。
4.1 按钮事件的处理
    点击按钮所发生的事件为动作事件
    动作事件对应的事件类是ActionEvent类
    动作事件对应的事件监听器为: ActionListener
    监听器的主要方法:
        actionPerformed(ActionEvent e)发生动作事件时被调用
    实现动作事件的操作工程:
        第一步,注册动作事件监听器addActionListener(ActionListener)。
        第二步,实现ActionListener接口的方法:actionPerformed(ActionEvent e)  
4.2鼠标事件的处理
    触发鼠标事件的事件源通常是一个容器,当鼠标进入、离开容器,或者在容器中单击鼠标、拖动鼠标等操作时,都发生鼠标事件
    鼠标事件对应的事件类是MouseEvent类     
    MouseEvent类中方法:
        getX()获取鼠标的X坐标
        getY()获取鼠标的Y坐标
        getPoint()获取鼠标的位置
    鼠标事件对应的事件监听器有两个:MouseListener(或者MouseAdapter)对应鼠标事件,MouseMotionListener(或者MouseMotionAdapter)对应鼠标移动事件。
    MouseListener(或者MouseAdapter)的主要方法
        MousePressed(MouseEvent e)鼠标按下时的处理方法
        MouseReleased(MouseEvent e)鼠标释放时的处理方法
        MouseEntered(MouseEvent e)鼠标进入时的处理方法
        MouseExited(MouseEvent e)鼠标离开时的处理方法
        MouseClicked(MouseEvent e)鼠标点击时的处理方法

     MouseMotionListener(或者MouseMotionAdapter)的主要方法
        MouseMoved(MouseEvent e)鼠标移动时的处理方法
        MouseDraged(MouseEvent e)鼠标拖动时的处理方法
4.3 键盘事件的处理
    在具有键盘焦点的组件中按下或释放键盘等操作时,都发生键盘事件
    键盘事件对应的事件类是KeyEvent类
        KeyEvent类主要方法:
            getKeyCode()获得按下或释放的键代码
            getKeyText()获得按下或释放的键的字符串
    键盘事件对应的事件监听器为:KeyListener或KeyAdapter
    主要方法:
        KeyPressed(KeyEvent e)按下键盘时的处理方法
        KeyReleased(KeyEvent e)释放键盘时的处理方法
4.4 窗口事件的处理
    有Window及其扩展类(Frame、Dialog)等才能激发窗口事件,表示窗口处于激活/无效状态、图标/非图标状态或打开/关闭状态等
窗口事件对应的类为WindowEvent,监听器为WindowListener(或WindowAdapter)
    主要方法:
        windowOpened(WindowEvent e)打开窗口的事件处理
        windowClosed(WindowEvent e)关闭窗口的事件处理
        windowClosing(WindowEvent e)正在关闭窗口的事件处理
        WindowActivated(WindowEvent e)激活状态的事件处理
        WindowDeactivated(WindowEvent e)无效状态的事件处理
4.5 其它事件的处理
    4.5.1  复选框、单选钮事件处理
        事件类是ItemEvent :
        选项事件对应的事件监听器为: ItemListener
        方法:
            itemStateChanged (ItemEvent e)发生选项事件时被调用
    4.5.2 滚动条事件处理
        调整事件对应的事件类是AdjustmentEvent类 :
        调整事件对应的事件监听器为: AdjustmentListener
        方法:
            adjustmentValueChanged (AdjustmentEvent e)发生调整事件时被调用
    4.5.3 下拉列表的事件处理
        事件类是ItemEvent :
        选项事件对应的事件监听器为: ItemListener
        方法:
            itemStateChanged (ItemEvent e)生下拉列表发生了动作时被调用
        (可见,下拉列表的事件处理与事件类型、事件监听器及方法与复选框、单选框的事件处理的事件类型、事件监听器及方法一样)
    4.5.4 菜单事件的处理
        菜单事件一般是当我们点击某个菜单项时所发生的事件。
        菜单项有两种:
            MenuItem 动作事件
            CheckboxMenuItem,选项事件
        MenuItem的事件处理
            第一步,给所有的MenuItem菜单项注册动作事件监听器addActionListener(ActionListener)。
            第二步,实现ActionListener接口的方法:actionPerformed(ActionEvent e)。在该方法中用e.getSource()获取用户所选的菜单项,并进行相应的处理。
        CheckboxMenuItem的事件处理
            第一步,给所有的CheckMenuItem菜单项注册选项事件监听器addItemListener(ItemListener)。
            第二步,实现ItemListener接口的方法:itemStateChanged(ItemEvent e)。在该方法中用e.getSource()获取用户所选的菜单项,e.getItem()获取用户所选的菜单项的标签,e.getStateChange()获取是否选中,并进行相应的处理。
        

总结:
    本小节主要介绍Java中事件处理的相关内容。重点内容是:
        着重介绍事件处理的代理机制,其中,事件大致分为窗口事件、鼠标事件、键盘事件、按钮事件及其它事件。而对于采用代理机制的事件处理模型,则此时主要是对对应事件:
    注册监听器 addXXXListener()
    实现监听器的相应方法
    当然,别忘了引入java.awt.event.*


       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值