- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嘿,我在理解自定义 GWT 事件处理程序的工作方式时遇到了问题。我已经阅读了很多关于该主题的内容,但它仍然有些模糊。我已经在 Stackoverflow 上阅读过类似这样的主题 GWT Custom Event Handler .有人可以用如下的应用程序来解释它。
我有 2 个类(class),一个街区和一个男人类。当人与块碰撞时,人会触发一个事件( onCollision() ),然后块类会监听该事件。
谢谢
最佳答案
一般事件:
事件总是被发送来通知一些事情(例如状态的变化)。让我们以一个人和一堵墙为例。在这里我们可以想象有一个游戏,用户可以像人一样在迷宫中行走。每次用户撞到墙壁时,都应该将碰撞通知给它,以便它可以对其使用react(例如,墙壁可以将自己渲染为被破坏的墙壁)。这可以通过每次检测到与墙壁的碰撞时发送碰撞事件来实现。这个事件是由一个人发送的,系统中对这个事件感兴趣的每个对象都会收到它,并可以对它做出相应的 react 。想要接收事件的对象必须将自己注册为对事件感兴趣。
这就是事件在每个系统或框架中的一般工作方式(不仅在 GWT 中)。为了在此类系统中发送和接收事件,您必须定义:
MessageReceivedEvent
的实例发送类(class)。该类包含一封新邮件(为简单起见,我们假设它只是一个
String
)。
public class MessageReceivedEvent extends GwtEvent<MessageReceivedEventHandler> {
public static Type<MessageReceivedEventHandler> TYPE = new Type<MessageReceivedEventHandler>();
private final String message;
public MessageReceivedEvent(String message) {
this.message = message;
}
@Override
public Type<MessageReceivedEventHandler> getAssociatedType() {
return TYPE;
}
@Override
protected void dispatch(MessageReceivedEventHandler handler) {
handler.onMessageReceived(this);
}
public String getMessage() {
return message;
}
}
MessageReceivedEventHandler
是表示事件接收器的接口(interface)。暂时不要管它,这将在稍后讨论。
GwtEvent
类(class)。这个类包含两个必须实现的抽象方法:
getAssociatedType
和
dispatch
.然而,在每个事件类中,它们通常以非常相似的方式实现。
getMessage
获取它方法。
MessageReceivedEvent
的事件接收器接口(interface)将命名为
MessageReceivedEventHandler
.源代码如下:
public interface MessageReceivedEventHandler extends EventHandler {
void onMessageReceived(MessageReceivedEvent event);
}
EventHandler
界面。它还应该定义一个在事件发生时将被调用的方法(它应该至少有一个参数 - 一个事件)。这里的方法名为
onMessageReceived
.每个接收器都可以通过实现此方法对事件使用react。
MessageDisplayer
成分:
public class MessageDisplayer implements MessageReceivedEventHandler {
@Override
public void onMessageReceived(MessageReceivedEvent event) {
String newMessage = event.getMessage();
// display a new message
// ...
}
}
EventChecker
:
public class MessageChecker implements HasHandlers {
private HandlerManager handlerManager;
public MessageChecker() {
handlerManager = new HandlerManager(this);
}
@Override
public void fireEvent(GwtEvent<?> event) {
handlerManager.fireEvent(event);
}
public HandlerRegistration addMessageReceivedEventHandler(
MessageReceivedEventHandler handler) {
return handlerManager.addHandler(MessageReceivedEvent.TYPE, handler);
}
}
HasHandlers
界面。
HandlerManager
field 。在 GWT
HandlerManager
顾名思义,管理事件处理程序(事件接收器)。正如开头所说,每个想要接收事件的事件接收器都必须将自己注册为感兴趣的。这就是处理程序管理器的用途。它们使注册事件处理程序成为可能,并且可以将特定事件发送到每个注册的事件处理程序。
HanlderManager
创建它在其构造函数中接受一个参数。每个事件都有一个来源,并且此参数将用作此处理程序管理器发送的所有事件的来源。在示例中它是
this
作为事件的来源是
MessageChecker
.
fireEvent
在
HasHandlers
中定义接口(interface),负责发送事件。如您所见,它仅使用处理程序管理器来发送(触发)和事件。
addMessageReceivedEventHandler
被事件接收者用来将自己注册为对接收事件感兴趣。再次处理程序管理器用于此。
MessageChecker checker = new MessageChecker();
MessageDisplayer displayer = new MessageDisplayer();
checker.addMessageReceivedEventHandler(displayer);
checker
发送的事件将由
displayer
收到.
MessageChecker
必须创建一个事件实例并使用
fireEvent
发送它方法。这手杖可以在
newMailReceived
中完成方法:
public class MessageChecker implements HasHandlers {
// ... not important stuff omitted
public void newMailReceived() {
String mail = ""; // get a new mail from mailbox
MessageReceivedEvent event = new MessageReceivedEvent(mail);
fireEvent(event);
}
}
关于events - GWT 自定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2951621/
我想知道 GWT、GWT-RPC、EXT-GWT 和 Smart GWT 之间的区别。目前,我设法借了有关 GWT 的书籍,据我所知,它只是一个旨在促进快速高效的 Ajax(异步 JavaScript
不,这不是问如何让 Guava 在 GWT 中工作,因为我已经让它工作了。 我的问题是,当我执行继承时 我希望在命名空间 com.google.common.collect 中找到一个文件 Coll
Ext GWT 和 GWT-Ext 之间有区别吗?因为我在浏览 Ext GWT 时看到了这个页面 http://gwt-ext.com/demo/ .有什么帮助吗? 最佳答案 ExtGWT 由开发 E
调查gwt-dispatch之后和 Google Wave I/O presentation (Best practices) ( video here ),我想知道为什么官方 GWT 版本 (2.0
我在我的应用程序中使用带有 ext 的 GWT 2.0.3。该项目不再处于积极开发状态并且已被 Smart GWT 取代。我正在为此应用程序使用 HMVC 模式。现在使用现有的 GWT 2.0.3 和
当我尝试在 Windows Vista 上为 ie 8 使用 GWT 开发模式插件时,我不断看到安装插件的提示。 运行插件后我仍然总是看到这个页面。有谁知道如何解决这样的问题? 最佳答案 看这个:Ca
我正在尝试对 GWT RPC 序列化策略进行一些背景阅读,发现 GWT 在编译后将 *.gwt.rpc 文件中的可序列化类型列入白名单。 以下是我的应用程序中生成的一个此类 .gwt.rpc 文件的摘
如果 Enum 实现了 java.io.Serializable,我无法将它序列化为 GWT。它会成功编译 GWT,但在运行时,我会感到害怕: Type 'com....security..Admin
是否有可以与 GWT 一起使用的进度条小部件,还是必须自己制作?我尝试在 google-web-toolkit-incubator、gwtupload 和 upload4gwt 中使用进度条,但没有任
由于 Javadoc 没有说明使用 com.google.gwt.core.shared.GWT 的原因,它似乎包含 com.google.gwt.core.client.GWT 的功能子集,前者存在
我必须在 gwt 中创建一个图像按钮,它使用三个图像(左侧图像、中心拉伸(stretch)图像和右侧图像)。左侧图像和右侧图像具有圆角。中心图像想要拉伸(stretch)取决于按钮标题大小.创建的 I
我正在尝试在 GWT 的垂直面板中设置 align 属性,如下所示: vpanel = new VerticalPanel(); vPanel.setHorizontalAlignment(HasHo
我想在 GWT 中添加可编辑的组合框,请告诉我解决方案? 最佳答案 试试 Advanced GWT Components , 具体来说 org.gwt.advanced.client.ui.widge
我在使用 GWT Designer 配置 GXT 时遇到问题。我拥有 Eclipse、GWT 插件和 GXT 的所有新版本,但无法将 GXT 配置为与 GWT Designer 一起使用。我设置了我的
我们有一个当前使用 Capistrano 部署的应用程序。该应用程序使用 php 作为后端,使用 GWT 作为前端。 我已经设法通过 Ant 文件编译 GWT,但想用自定义 Capistrano 任务
这应该很简单,但不知何故我找不到在 GWT 中创建简单超链接的方法。基本上,我想在用户点击某些东西时加载另一个页面。 Hyperlink似乎仅指向内部 GWT 应用程序状态。我想我可以把链接放在 HT
在 GWT 界面中哪个更好,使用带有 javacode 的普通 MVP,还是 UiBinder?从性能、编辑、简单性方面。 最佳答案 这就是Google says : Besides being a
GWT 2.5.0 开发模式 我在下面对文件上传做了一个简单的测试, startupUrl: http://127.0.0.1:8888/UploadTest.html?gwt.codesvr=127
我需要创建一个SuggestBox,在按下时将显示所有选项 Enter键。 我已经写了以下实现,看来是 工作正常。 我希望有人审查我的实现情况,并让我知道 在任何特定情况下都会引起问题。 另外,要传递
在哪里可以找到有关 GWT 和 GWT-Ext 延迟加载的更多信息? 最佳答案 快速谷歌搜索显示 nice blog entry由 GWT 团队提供。 关于 GWT-Ext,我无话可说,但无论采用何种
我是一名优秀的程序员,十分优秀!