GWT FocusPanel, клавиши табуляции и обработчики фокуса - PullRequest
3 голосов
/ 28 июня 2010

Я реализую собственный виджет, расширяющий 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-селектора.

Почему обработчики фокуса никогда не вызываются?

1 Ответ

0 голосов
/ 02 декабря 2011

Обработка событий фокуса может быть сложной и непостоянной.GWT должен упростить вам эту задачу, добавляя скрытые поля ввода в FocusPanel DIV, когда это необходимо.Вот выдержка из документации jQuery:

Событие фокуса отправляется элементу, когда он получает фокус.Это событие неявно применимо к ограниченному набору элементов, таких как элементы формы (,

Я не знаю решения вашей проблемы, но я предполагаю, что что-тоHTML / браузер / dom связаны с обработкой событий.Например, caption или icon также FocusPanel?Это может повлиять на то, как всплывают события фокуса.

...