我正在开发一些简单的绘图软件,需要同时在swing和gwt中实现。在gwt端,我将在 Canvas 上使用gwt-g2d。我希望在两种实现中使用事件总线来简化某些软件。

我的理解是应该是这样的:

  • 实例化EventBus
  • 实例化父窗口小部件,接收想要的EventBus事件(例如,鼠标悬停或rpc回调)
  • 设置EventBus以监听父窗口小部件中的事件。
  • 实例化子窗口小部件,谁应该向EventBus注册其拥有的监听器(它们是否需要注册可能触发的事件?)
  • 当EventBus接收到一个事件时,它应该对事件做出决定,然后根据该决定采取行动,即是忽略它,更改事件类型,还是仅将其中继到所有适用的子窗口小部件。

  • 这通常是应该如何工作的吗? SimpleEventBus仍然是一种新事物,我在网上找不到有关如何真正使用它的更多信息。

    最佳答案

    SimpleEventBus提供了非常基本的功能,即存储处理程序的集合,并在适当时使用所有相关的处理程序调用event.dispatch()。我不会说您是从父窗口小部件“设置EventBus来监听事件”。 SimpleEventBus没有“ parent ”的概念。相反,您传递了对SimpleEventBus的引用。然后,任何对象都可以使用SimpleEventBus.fireEvent方法“触发事件”。没有层次结构。

    同样,任何对象都可以使用SimpleEventBus.addHandler()监听那些事件。这是最接近您的#4的地址-addHandler接受一个事件类型和一个处理程序,因此,每当该类型的事件被传递到fireEvent(由您的应用程序中的某物)时,该处理程序就会被传递给该事件。请注意,Event是调用处理程序的东西,而不是EventBus! EventBus只是调用event.dispatch(theHandler),事件的程序员负责在TheHandler中调用适当的函数。 #5至少对于SimpleEventBus不准确-SimpleEventBus根本不检查事件,只是查看要调用的处理程序。它不知道任何子窗口小部件或任何应用程序逻辑,并且从不更改事件的类型。

    关于查看选择哪个区域的逻辑在EventBus中是不合适的-相反,您将使一个处理程序执行该逻辑并监听ClickEvent。然后,该处理程序可以告诉所选区域它是直接选择的,或者您可以创建自己的RegionSelectionEvent,可以沿EventBus触发,然后可以通知所有区域RegionRegion已经发生,并且记录器可以获取通知,否则您的服务器监视器可能会收到通知,并通知老板有人选择了某个区域或其他任何内容。如果您只需要取消选择一个区域并选择另一个区域,那么事件总线就显得过头了。

    另一方面,诸如“调整大小”事件之类的东西很有意义,因为您的所有小部件都可能需要了解它。

    关于gwt - 您如何使用GWT的SimpleEventBus或EventBus?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4259424/

    10-09 17:34