Фокус (пользовательский интерфейс)


Фокус, фокус ввода — концептуальное понятие в построении графического пользовательского интерфейса, означающее наличие у определённого элемента этого интерфейса исключительного права принимать клавиатурный ввод. Название является аллюзией на способность человеческого зрения фокусировать взгляд на небольшом участке поля зрения.

Не следует путать фокус с выделением — фокус распространяется на элементы интерфейса, в то время как выделение — на их содержимое. Кроме того, фокус всегда находится на каком-то строго одном элементе, тогда как выделение может быть множественным.

В вычислительной технике фокус указывает на выбор элемента графического интерфейса пользователя. Текст, введённый с клавиатуры или вставленный из буфера обмена, отправляется компоненту, у которого есть фокус. Перемещение фокуса с определённого элемента пользовательского интерфейса называется событием размытия (англ. blur) по отношению к этому элементу. Как правило, фокус снимается с элемента, отдавая фокус другому элементу. Это означает, что события фокуса и размытия обычно происходят практически одновременно, но в отношении разных элементов пользовательского интерфейса: один получает фокус, а другой размывается.

Концепция аналогична курсору в текстовой среде. Однако при рассмотрении графического интерфейса также задействован указатель мыши. Перемещение мыши обычно приводит к перемещению указателя мыши без изменения фокуса. Фокус обычно можно изменить, щёлкнув компонент, который может получить фокус с помощью мыши. Многие рабочие столы также позволяют изменять фокус с помощью клавиатуры. По соглашению, клавиша Tab ↹ используется для перемещения фокуса на следующий фокусируемый компонент, а ⇧ Shift+Tab ↹ — на предыдущий. Когда впервые появились графические интерфейсы, на многих компьютерах не было мышей, поэтому эта альтернатива была необходима. Эта функция упрощает использование пользовательского интерфейса для людей, которым сложно пользоваться мышью. В определённых обстоятельствах для перемещения фокуса также можно использовать клавиши управления курсором.

Смысл и предназначение

Пользовательский интерфейс может иметь несколько элементов, способных каким-либо образом реагировать на клавиатурный ввод. Однако, из соображений здравого смысла, при вводе с клавиатуры каких-либо данных (или команд) получать их должен какой-либо один элемент, из расположенных в окне, которому пользователь и адресует эти данные, осуществляя ввод. Поэтому при проектировании логики работы пользовательского интерфейса вводится понятия фокуса как совокупности:

  • Визуальных признаков элемента, которые сообщают пользователю, что именно этот элемент получит вводимые с клавиатуры данные,
  • Внутренних данных приложения, позволяющих той части компьютерной системы, которая отвечает за диспетчеризацию клавиатурных событий, переадресовать клавиатурные события непосредственно элементу.
  • Говорят, что элемент обладает фокусом или фокус находится на элементе, если при возникновении клавиатурного события именно этот элемент среагирует определённым образом на событие. Чтобы пользователь мог определить, какой из элементов в данный момент обладает фокусом, такой элемент обычно особым образом графически выделяется среди остальных аналогичных элементов.

    Если система не предполагает наличие клавиатуры (даже виртуальной) как устройства ввода, или в любой момент времени существует только один элемент, способный реагировать на клавиатурные события, понятие «фокус» в таких системах не имеет смысла и не используется.

    Деактивированные элементы обычно не могут иметь фокуса.

    Управление фокусом

    Для увеличения удобства работы пользователю часто даётся несколько возможностей переключать фокус с одного элемента на другой. Разные операционные системы и приложения для них могут иметь разные способы. Обычно переместить фокус с одного элемента на другой можно при помощи определённых клавиш клавиатуры (например Tab ↹ и ⇧ Shift+Tab ↹ для переключения фокуса на следующий/предыдущий элемент в Windows), либо при помощи мыши. Существуют различные модели переключения фокуса мышью: так, например, в Windows или MacOS элемент получает фокус после щелчка мышью на нём; в некоторых менеджерах окон X11 достаточно просто поместить указатель мыши над элементом, чтобы он получил фокус.