有没有办法在GWT中捕获键盘事件?

有没有办法在GWT中捕获键盘事件?,gwt,Gwt,我正在尝试在GWT中捕获键关闭,并且尝试了addKeyDownHandler和onBrowserEvent。问题是,只要适当的小部件有焦点,它们就可以工作,但当其他小部件有焦点时,它就会停止工作。我可以将代码添加到每个小部件中,但这似乎很疯狂。我还尝试强制一个小部件始终具有焦点,但这会导致文本框(需要输入焦点)等其他问题 当在GWT中按下某个键时,是否有一种简单、高级的方法来触发某些代码,而不管哪个小部件具有焦点?为什么不像这样将keyDownHandler添加到body元素并将处理程序添加到b

我正在尝试在GWT中捕获键关闭,并且尝试了addKeyDownHandler和onBrowserEvent。问题是,只要适当的小部件有焦点,它们就可以工作,但当其他小部件有焦点时,它就会停止工作。我可以将代码添加到每个小部件中,但这似乎很疯狂。我还尝试强制一个小部件始终具有焦点,但这会导致文本框(需要输入焦点)等其他问题


当在GWT中按下某个键时,是否有一种简单、高级的方法来触发某些代码,而不管哪个小部件具有焦点?

为什么不像这样将keyDownHandler添加到body元素并将处理程序添加到body元素中?除非在
函数()中阻止它,否则所有javascript事件都将冒泡

例如:

RootPanel.getBodyElement()


然后封装到一个类中,使其成为小部件和addDomHandler,如所述。或者,如果这证明不是很简单,那么只需在托管页面中以javascript的形式编写,或者使用本机方法(GWT允许您使用本机关键字编写javascript)。

您可以使用,或者使用附加到
RootPanel.get()
(使用:
RootPanel.get().addDomHandler)的
KeyDownHandler
(myHandler,KeyDownEvent.getType())
),具体取决于您是想在捕获阶段还是气泡阶段进行侦听(捕获阶段在IE中模拟).

谢谢!这是迄今为止最好的结果,但似乎仍有一种情况是它不起作用。似乎如果我单击从FocusPanel派生的一些小部件,它就会停止工作。下面是我的代码,确切地说:RootPanel root=RootPanel.get();root.clear();root.addDomHandler(new KeyDownHandler(){public void onKeyDown(KeyDownEvent事件){if(getInterface()!=null){getInterface().handleKeyDown(event);}}}},KeyDownEvent.getType());如果使用冒泡阶段,那么是的,您依赖于链下游停止传播的其他事件处理程序。