Swing学习笔记3---事件

来源:互联网 发布:数据恢复软件免费版 编辑:程序博客网 时间:2024/06/06 04:17

概述:

    自从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()方法中才有效。

原创粉丝点击