Java GWT:按钮单击的往返示例

Java GWT:按钮单击的往返示例,java,gwt,Java,Gwt,我很难用GWT的事件侦听器模型连接所有的点。假设您有一个按钮小部件,当用户单击它时,您希望屏幕上其他地方的文本从黑色变为红色(只需考虑一个超级简单的示例) 当用户单击按钮时,一个按钮单击事件被放置在事件总线上,该事件总线配置了处理程序/侦听器,希望在该事件发生时得到通知。这与Places、PlaceChangeEvents以及GWT历史API有何关联 如果有人代码提供了这个“往返”过程的超级简单但功能性的代码示例,从按钮点击,到在总线上触发点击事件,到在总线下处理事件,再到更新适当的地点/历史对

我很难用GWT的事件侦听器模型连接所有的点。假设您有一个按钮小部件,当用户单击它时,您希望屏幕上其他地方的文本从黑色变为红色(只需考虑一个超级简单的示例)

当用户单击按钮时,一个按钮单击事件被放置在事件总线上,该事件总线配置了处理程序/侦听器,希望在该事件发生时得到通知。这与
Place
s、
PlaceChangeEvent
s以及GWT历史API有何关联


如果有人代码提供了这个“往返”过程的超级简单但功能性的代码示例,从按钮点击,到在总线上触发点击事件,到在总线下处理事件,再到更新适当的地点/历史对象,最后,将文本改为红色,我想我能够连接许多当前缺失的点。提前谢谢

GWT有许多类型的事件,要真正理解它们并不容易。一些事件只在逻辑中发生,其他事件来自DOM(可以在中使用),等等

一次只走一步,因为你似乎在尝试将不同的事件混合在一起。(按钮点击和历史事件是完全独立的事件)。一般来说,很多类都提供不同类型的事件,您可以为所关心的事件连接处理程序。然后,处理程序可以调用其他类或生成其他事件。您想要的代码实际上非常简单,这是您在项目中唯一需要的类:

public class Sandbox_gwt implements EntryPoint
{
   public void onModuleLoad()
   {
      final Label label = new Label("I'm red");
      label.getElement().getStyle().setBackgroundColor("#FF9999");

      Button button = new Button("click me!");
      button.addClickHandler(new ClickHandler()
      {
         @Override
         public void onClick(ClickEvent event)
         {
            label.getElement().getStyle().setBackgroundColor("#99FF99");
            label.setText("I'm green");
         }
      });

      RootPanel.get().add(label);
      RootPanel.get().add(button);
   }
}

如果您真的对调试感兴趣,您可以看到“流”,但不需要执行“手动往返”或任何操作。顺便说一句,history是一个单独的类,用于侦听浏览器中的前进和后退按钮,以及其他一些内容,但根本不需要执行您提到的操作。

您要求的是一个功能完整的项目框架,其中包含一些已实现的功能。在这里不太容易。像这样的方法的问题在于,这一切都归结为一个精心设计的框架项目。也许会有帮助。这是一个已经准备好的项目,有一些推进,我认为会有所帮助。在您的示例中,您不需要EventBus。您只需在按钮上附加一个ClickHandler。EventBus对于更复杂的情况非常有用,当一个视图中发生了某些事情,您希望在其他三个视图中进行更改,而这些更改此时甚至不可见,并且您不希望使用常规的ClickHandler(例如)将它们全部连接起来。您可以构建一个大型GWT应用程序,而无需触摸EventBus。我建议您稍后离开EventBus,等您熟悉处理程序时再使用。