我正在实施一个自定义小部件,扩展了Composite
并实施了Focusable
和HasFocusHandlers
。GWT FocusPanel,标签键和焦点处理程序
该小部件在一个面板中包含两个小部件,我将其包装到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()
添加的处理程序的方法不会被调用。
我知道焦点在改变,因为我遵循了使用:focus
CSS选择器改变其风格的objets焦点。
为什么焦点处理程序从不调用?