如何将事件处理程序附加到GWT中的文档或窗口?

时间:2011-01-08 22:49:39

标签: gwt

在以画布为中心的GWT应用程序中,我无法将焦点定位在正确的位置 - 尤其是键盘快捷键。现在,我已经将画布包装在FocusPanel中,但是这会导致画布不响应RequiresResize协议,因为FocusPanel没有检测到它。

第二个(相关的,我认为)问题是FocusPanel根本没有获得Ctrl-A按键事件(在Mac Chrome上测试)。我可以得到Ctrl-Z和其他键(如箭头)。

在纯JavaScript世界中,我认为最好的答案是将鼠标和键处理程序附加到文档或窗口对象(我不是积极的,哪个更好)。但是,我没有看到在GWT中执行此操作的明显方法 - 特别是,Document和Window类缺少附加这些事件处理程序的方法?

任何人都知道如何做到这一点,或者,也许是为了解决将焦点放在能够处理键盘快捷键的适当小部件上的更普遍的问题?

1 个答案:

答案 0 :(得分:3)

您可以通过扩展FocusPanel来实现RequiresResize和ProvideResize接口来解决您的第一个问题:

public class ResizingFocusPanel
  extends FocusPanel
  implements RequiresResize, ProvidesResize
{
  public ResizingFocusPanel() {}

  public ResizingFocusPanel(Widget child) {
    super(child);
  }

  @Override
  public void onResize() {
    if (getWidget() instanceof RequiresResize) {
      ((RequiresResize)getWidget()).onResize();
    }
  }
}