日期:2014-05-20  浏览次数:20817 次

JAVA中系统如何获取事件源?
在JAVA中系统如何获取事件源?

比如,我添加一个button,并注册Listener。当我按下这个button,系统怎么知道用户按下了这个button,而不是按下其它的button或是进行了别的操作呢?



------解决方案--------------------
这是jvm处理的,肯定有键值对应的类似hashmap之类的进行存储。
------解决方案--------------------
如果是鼠标触发的,GUI系统会获取鼠标所在位置的component
如果是Enter键触发的,GUI系统会获取当前拥有焦点的compoent
如果是其他快捷键触发的,GUI系统会获取该快捷键对应的component
------解决方案--------------------
用e.getSource().equals(你要确定的组件)
或用e.getActionCommand().equals(要确定的组件名)
------解决方案--------------------
系统会有各种队列来记录注册了各种事件的组件,如一个用来记录哪些组件注册了鼠标事件,当鼠标事件发生后,会取得鼠标的坐标,然后遍历队列,找到鼠标坐标落到哪一个坐标上,这中间还涉及到组件重叠,从队列中找到最后的组件,然后调用组件与之相关的鼠标操作函数.

这种方式,事件只会通知注册了这种事件的组件.
但实现的时候,考虑的问题会很多,要处理冲突,效率等问题.