我正在开发一些简单的图形软件,需要在swing和gwt中实现.在gwt方面,我将使用gwt-g2d作为画布.我希望在两个实现中使用事件总线来简化某些软件.
我的理解是它应该是这样的:
这通常是如何工作的?SimpleEventBus仍然是一种新的,我在网上找不到关于如何真正使用它的东西.
SimpleEventBus 提供了存储处理程序集合的非常基本的功能,并在适当时使用所有相关处理程序调用 event.dispatch()。我不会说您“设置 EventBus 以侦听来自父窗口小部件的事件”。SimpleEventBus 没有“父级”的概念。相反,您传递对 SimpleEventBus 的引用。然后,任何对象都可以使用 SimpleEventBus.fireEvent 方法“触发事件”。没有等级制度。
同样,任何对象都可以使用 SimpleEventBus.addHandler() 监听这些事件。这最接近您的 #4 - addHandler 接受一种事件类型和一个处理程序,因此每当该类型的事件(通过应用程序中的某些内容)传递给该事件时fireEvent,该处理程序都会传递给该事件。请注意,Event调用的是处理程序,而不是 EventBus!EventBus只调用event.dispatch(theHandler),事件的程序员负责调用theHandler中正确的函数。你的 #5 是不准确的,至少对于 SimpleEventBus 来说 - SimpleEventBus 根本不检查事件,除了查看要调用哪些处理程序。它不知道任何子小部件或任何应用程序逻辑,并且从不更改事件的类型。
关于查看哪个区域被选中的逻辑在 EventBus 中不合适 - 相反,您将创建一个处理程序来执行逻辑并侦听 ClickEvents。然后,该处理程序可以告诉所选区域它已被直接选择,或者您可以创建自己的 RegionSelectionEvent,您可以沿着 EventBus 触发该事件,然后可以通知所有区域已发生 RegionSelection,并且您的记录器可以获得通知,或者您的服务器监视器可以收到通知并通知老板有人选择了区域或其他什么。如果您只需要取消选择一个区域并选择另一个区域,则事件总线就有点过分了。
另一方面,像“调整大小”事件这样的事情很有意义,因为所有的小部件可能都需要知道它。