2011-01-08 34 views
1

在以画布为中心的GWT应用程序中,我很难将焦点放在正确的位置 - 特别是对于键盘快捷键。现在,我将画布包装在FocusPanel中,但导致画布不响应RequiresResize协议,因为FocusPanel不会响应。如何将事件处理程序附加到GWT中的文档或窗口?

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

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

任何人都知道如何做到这一点,或者,也许,以解决更关注一个适当的小部件能够处理键盘快捷方式的更一般问题?

回答

3

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

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(); 
    } 
    } 
} 
+0

这修复我的大小调整(除了我所需要的默认构造,所以我可以使用XML粘合剂)。我在原始JavaScript中做了一些尝试,并且认为我可能必须抓取keydown,而不是仅仅通过按键来获取Ctrl-A事件,即使当我连接到窗口或文档时也是如此。所以我认为这是我现在可以做的最好的。谢谢! – 2011-01-09 05:04:26

相关问题