Я реализую собственный виджет, расширяющий 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 также работает, как и ожидалось, но моя проблема в том, что я не могу обработать события фокуса, так как метод onFocus()
обработчиков, добавленных с addFocusHandler()
, никогда не вызывается.
Я знаю, что фокус меняется, потому что яследуйте за фокусом объекта, изменяя его стиль с помощью :focus
CSS-селектора.
Почему обработчики фокуса никогда не вызываются?