В сценарии программирования мне нужно было проверить, было ли сосредоточено текстовое поле GWT или нет. Я закончил тем, что добавил логическое значение и пару Focus и BlurHandler, чтобы вручную сохранить состояние фокусировки, что заставляет меня задаться вопросом, почему нет такого метода, который возвращает, если фокусируемый компонент сфокусирован в gwt?
Почему в GWT нет ifFocused()?
Ответ 1
Потому что не было никакого кроссбраузерного способа сделать это до нескольких лет назад (Firefox 3, Safari 4, чтобы указать на последних игроков в игре, добавив поддержку document.activeElement
).
GWT по-прежнему официально поддерживает [1] Safari 3 (я считаю, что поддержка Safari 2 устарела) и, возможно, даже Firefox 2 (без плагина DevMode, но это не значит, что браузер не поддерживается: Opera поддерживается, но имеет ни DevMode тоже), поэтому невозможно обеспечить такую функцию, которая будет работать во всех поддерживаемых браузерах.
И последнее, но не менее важное, я думаю, никто никогда не подавал запрос об улучшении в трекер проблемы (я не смог найти ни одного из них); и, как вы сказали, вы уже можете сделать это сегодня, используя FocusHandler/BlurHandler (который работает кросс-браузер).
[1] http://code.google.com/webtoolkit/doc/latest/FAQ_GettingStarted.html#What_browsers_does_GWT_support? Я считаю, что страница немного устарела, поскольку она по-прежнему содержит список Firefox 1.0, поддержка которого (user.agent = gecko, vs. gecko1_8) была удалена в GWT 2.1.0 и не содержит список IE9, поддержка которого был добавлен в GWT 2.3.0, и последнее, но не менее важное, я считаю, что поддерживается только последняя версия Opera, тогда как в списке говорится об Opera 9.
Ответ 2
Чтобы узнать, какой виджет имеет фокус, я не знаю, есть ли у вас решение. Будучи новичком в GWT, я предлагаю поделиться своим решением:
-
Объявить частное поле в объекте, например "focusWidget"
-
Создайте обработчик фокуса для виджета, вот класс TextBox. В блоке OnFocus просто назначьте виджет "focusWidget". Вы можете добавить этот вид события к каждому виджету, который может быть сфокусирован.! [шаг 2] [2]
- Это все. Каждый виджет, связанный с фокусным событием, будет настраиваться на "focusWidget" каждый раз, когда он будет сфокусирован. Затем мы можем использовать "focusWidget" для определения того, какой текущий виджет сфокусирован.! [шаг 3] [3]
Я тестирую его в JUnit
, он работает!
см. изображение фрагмента здесь
Надеюсь, что поможет.