【发布时间】:2010-06-28 11:15:28
【问题描述】:
我正在实现一个扩展 Composite 并实现 Focusable 和 HasFocusHandlers 的自定义小部件。
该小部件在一个面板中包含两个小部件,我将它们包装到一个FocusPanel 中,用于初始化该小部件。我的构造函数看起来像这样:
public CustomBox() {
panel = new VerticalPanel();
...
panel.add(caption);
panel.add(icon);
...
focusPanel = new FocusPanel(panel);
initWidget(focusPanel);
}
我在焦点面板中委托Focusable 和HasFocusHandlers 的实现,例如:
@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 选择器跟随对象的焦点改变其样式。
为什么从不调用焦点处理程序?
【问题讨论】:
标签: events gwt cross-browser focus dom-events