В чем разница между forceFocus () и setFocus () в SWT? - PullRequest
7 голосов
/ 06 января 2011

Я не совсем понимаю разницу между этими двумя методами.В какой ситуации forceFocus() будет лучше, чем setFocus()?

Ответы [ 2 ]

9 голосов
/ 07 января 2011

Согласно SWT: стандартный набор инструментов виджета, том 1 , forceFocus ():

Принудительное управление для получения клавиатуры События. Элементы управления, которые обычно не принять ввод с клавиатуры используя этот метод. Если фокус не может быть назначен по любой причине, ложь вернулся.

также:

Вообще говоря, принудительный фокус то, что вы никогда не хотите делать. Например, заставить фокус на ярлыке не очень полезно, потому что этикетки не рисовать таким образом, который указывает они могут принять ввод. Заставляя фокус к контролю, который этого не ожидает может запутать пользователей, потому что они не имеют Идея, где их нажатия клавиш. Прикладные программы всегда должны использовать setFocus () для назначения фокуса.

4 голосов
/ 07 января 2013

На этом я опаздываю, но я только что закончил длительную сессию "бить головой об стену" по поводу чего-то, связанного с этим, и подумал, что сделаю быстрый отчет:

Если ваш контроль имеетchildren, setFocus(myControl) выполнит поиск в глубину по дочернему дереву и установит фокус на младший первый дочерний элемент.С другой стороны, forceFocus(myControl) просто установит фокус на myControl и покончит с ним.

У меня была ситуация с немодальным диалогом с GridLayout, где большинство ячеек сетки представляли собой набор подклассов Canvas.объекты, которые нуждались в фокусе.(Да, это немного странно, но я хотел, чтобы можно было наводить курсор на ячейку и вводить в нее материал.) Последним элементом управления в сетке была кнопка «Готово», которую я установил в качестве выбора по умолчанию.

Когда мышь покинула ячейки холста, я выполнял setFocus(myDialogShell), который мгновенно устанавливал фокус на первый элемент холста, не давая кнопке «готово» получить \ r и избавиться от всего грязного бизнеса.С другой стороны, forceFocus(myDialogShell) сделал свое дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...