Events GWT FocusPanel、制表键和焦点处理程序

Events GWT FocusPanel、制表键和焦点处理程序,events,gwt,cross-browser,focus,dom-events,Events,Gwt,Cross Browser,Focus,Dom Events,我正在实现一个自定义小部件,它扩展了Composite并实现了Focusable和hasFocusHandler 小部件在一个面板中包含两个小部件,我将它们包装成一个FocusPanel,用于初始化小部件。我的构造函数看起来像这样: public CustomBox() { panel = new VerticalPanel(); ... panel.add(caption); panel.add(icon); ... focusPanel = n

我正在实现一个自定义小部件,它扩展了
Composite
并实现了
Focusable
hasFocusHandler

小部件在一个面板中包含两个小部件,我将它们包装成一个
FocusPanel
,用于初始化小部件。我的构造函数看起来像这样:

public CustomBox() {
    panel = new VerticalPanel();
    ...
    panel.add(caption);
    panel.add(icon);
    ...
    focusPanel = new FocusPanel(panel);
    initWidget(focusPanel);
}
我在焦点面板中委托执行可聚焦的
hasFocusHandler
,例如:

@Override
public void setFocus(boolean focused) {
    focusPanel.setFocus(focused);
}

@Override
public void setTabIndex(int index) {
    focusPanel.setTabIndex(index);        
}

@Override
public HandlerRegistration addFocusHandler(FocusHandler handler) {
    return focusPanel.addFocusHandler(handler);
}   
然后,我可以使用
setFocus(true)
在我的任何对象中设置焦点,并使用
setTabIndex()
设置选项卡索引。Tab键也按预期工作,但我的问题是,我无法处理焦点事件,因为使用
addFocusHandler()
添加的处理程序的
onFocus()
方法从未被调用

我知道焦点正在改变,因为我跟随对象的焦点,使用
:focus
CSS选择器改变其样式


为什么从未调用过焦点处理程序?

处理焦点事件可能很棘手且变化无常。GWT应该通过在需要时向FocusPanel DIV中添加隐藏的输入字段来简化这一过程。以下是jQuery文档的摘录:

焦点事件在获得焦点时发送到元素。此事件隐式地适用于一组有限的元素,例如表单元素(,等等)和链接()。在最近的浏览器版本中,通过显式设置元素的tabindex属性,可以将事件扩展到包括所有元素类型。元素可以通过键盘命令(如Tab键)或鼠标单击该元素来获得焦点

我不知道您的问题的解决方案,但我猜与HTML/browser/dom非常相关的东西正在扰乱事件处理。例如,
标题
图标
是否也是
焦点面板
?这可能会影响焦点事件的产生方式