Swing学习笔记3---事件

本文深入探讨了Java事件处理机制,重点介绍了委托事件模型,并详细解释了事件处理的三个关键步骤:确定事件源、选择要处理的事件类型以及编写事件处理代码。此外,还提供了多种事件处理实现方式的对比及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述:

    自从JDK1.1之后一改以前版本的事件处理模式,目前都是以委托事件模式(Delegation Event Model)来处理用户所触发的事件。

    当用户激活的事件不是我们所想要的时,就不加任何处理,如此一来就可以增加系统效率,整个处理结构也会清楚许多。因此Delegation Event Model就像一部注册机,可以让用户注册所有想要捕获的事件。

    事件处理总共要注意三件事:

    1.Source如何,也就是什么组件要被处理,如按钮或CheckBox。

    2.什么样的事件要被处理,如按下按键或是抬起按键,通过实现相关的监听器(接口)实现,也就是上面的注册机制。

    3.编写处理事件的代码。

    处理事件的标准操作:每种EventListener都是一种Interface,里面只有定义这个EventListener的方法,当要处理事件时,必须在类前面先实现该相应接口,然后在这个类中,把要处理事件的程序代码写在接口的方法中。

    还有其他模式,如利用Inner Class,或利用Adapter类等等。

    针对某一个组件作事件处理,属于“High-Level”事件

    而对于控制鼠标键盘的事件处理,属于“Low-Level”事件

 

 


 

事件处理范例:

1.事件处理多种实现方法:

a.实现监听接口:必须实现借口的所有方法

b.继承Adapter类:限制在于java不支持多重继承

c.利用Inner class匿名类:解决了Adapter类无法多重继承,即Inner class是多重继承的一个解决方案

d.专门定义一个负责事件处理部分的类: 思路清晰,但当组建数量上升时难以阅读

    多种变形写法,主要就是必须将addXXXListener()方法传入XXXEvent里去,而如何获得这个XXXEvent,就看个人怎么做了。

2.相同组件事件的处理:

多个组件添加了同一事件处理,如何识别组件呢?

    对于EventObject,可以用getSource()方法得到。

 

    对于ActionEvent,可以用getCommand()或getSource()方法得到(ActionEvent extends EventObject)。

3.鼠标事件处理:

a.MouseListener:针对鼠标按键与位置的检测

b.MouseMotionListener:针对鼠标坐标与拖拽作操作

4.键盘事件处理:

KeyListener:

    注意getKeyCode()方法可以得到每个按钮的对应码,但这个方法在keyTyped()上是无法检测出来的,因为keyTyped()只管用户输入的字符,算是比较高层(High-Level)事件的方法。故一定要将getKeyCode()方法写在keyPressed()或keyReleased()中方才有效,因为这两个方法是处理比较低层(Low-Level)的方法。

    另外,getKeyModifiersText()方法可以返回修饰符的字符串,如“Shift”或“Ctrl+Shift”,不过要先传入modifiers参数。可使用getModifiers()方法来得到modifiers参数。这个方法定义在InputEvent中,被KeyEvent继承,故必须将以上两方法放在keyPressed()或keyReleased()方法中才有效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值