我正在开发一些简单的绘图软件,需要在 swing 和 gwt 中实现。在 gwt 方面,我将使用 gwt-g2d 作为画布。我希望在这两种实现中使用事件总线来简化一些软件。
我的理解是它应该是这样的:
- 实例化EventBus
- 实例化父控件,接收您想要的 EventBus 事件(例如,鼠标悬停或 rpc 回调)
- 设置 EventBus 以侦听来自父窗口小部件的事件。
- 实例化子部件,谁应该向 EventBus 注册它拥有的侦听器(它们是否需要注册可能触发的事件?)
- 当 EventBus 接收到事件时,它应该对事件做出决定,然后根据该决定采取行动,无论这意味着忽略它、更改事件类型还是只是将其中继到所有适用的子窗口小部件。
这通常是它应该如何工作的吗? SimpleEventBus 仍然是一种新事物,我在网上找不到太多关于如何真正使用它的信息。
SimpleEventBus 提供了存储处理程序集合以及在适当时使用所有相关处理程序调用 event.dispatch() 的非常基本的功能。我不会说您“设置 EventBus 以侦听来自父窗口小部件的事件”。 SimpleEventBus 没有“父级”的概念。相反,您传递对 SimpleEventBus 的引用。然后,any对象可以使用 SimpleEventBus.fireEvent 方法“触发事件”。没有等级制度。
相似地,any对象可以使用 SimpleEventBus.addHandler() 监听这些事件。这最接近你的 #4 - addHandler 采用type事件和处理程序,因此每当该类型的事件传递给fireEvent
(通过应用程序中的某些内容),该处理程序将被传递给事件。请注意,Event
是调用处理程序的,而不是 EventBus! EventBus只调用event.dispatch(theHandler),事件的程序员负责调用theHandler中正确的函数。你的 #5 是不准确的,至少对于 SimpleEventBus 来说 - SimpleEventBus 根本不检查事件,除了查看要调用哪些处理程序。它不知道任何子小部件或任何应用程序逻辑,并且从不更改事件的类型。
关于查看哪个区域被选中的逻辑在 EventBus 中不合适 - 相反,您将创建一个处理程序来执行逻辑并侦听 ClickEvents。然后,该处理程序可以告诉所选区域它已被直接选择,或者您可以创建自己的 RegionSelectionEvent,您可以沿着 EventBus 触发该事件,然后可以通知所有区域已发生 RegionSelection,并且您的记录器可以获得通知,或者您的服务器监视器可以收到通知并通知老板有人选择了区域或其他什么。如果您只需要取消选择一个区域并选择另一个区域,则事件总线就有点过分了。
另一方面,像“调整大小”事件这样的事情很有意义,因为所有的小部件可能都需要知道它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)