В Compose Multiplatform для настольных систем можно обрабатывать события клавиатуры, настраивая обработчики событий в двух разных областях видимости:
Обработчики событий, связанные с элементом в фокусе.
Обработчики событий в области видимости окна.
События в компоненте в фокусе
В этом подходе нажатие клавиши запускает обработчики событий для компонента, находящегося в фокусе.
Обычно обработчики клавиатуры задают для активных элементов управления, таких как TextField. Чтобы перехватить событие клавиатуры до выполнения действия по умолчанию, можно использовать оба модификатора: onKeyEvent и onPreviewKeyEvent. Модификатор onKeyEvent позволяет обрабатывать отдельное нажатие клавиши, а onPreviewKeyEvent лучше подходит для определения сочетаний клавиш.
В следующем примере показано взаимодействие с TextField, в котором выполняются разные действия в зависимости от нажатой клавиши при удержании Ctrl. Добавьте этот код в файл main.kt в sharedUI/src/jvmMain/kotlin:
Чтобы определить обработчики событий клавиатуры, всегда активные в текущем окне, используйте параметры onPreviewKeyEvent и onKeyEvent, доступные для функций Window, singleWindowApplication и Dialog. Они различаются способом отправки события, если оно не было обработано: onPreviewKeyEvent отправляет событие первому дочернему элементу, а onKeyEvent — родительскому элементу composable-функции. Обычно для перехвата событий предпочтителен onPreviewKeyEvent, поскольку он позволяет реализовать сочетания клавиш, действующие даже на всём экране.
В следующем примере показано взаимодействие с окном: закрытие всплывающего диалогового окна нажатием Escape и изменение содержимого окна нажатием сочетания клавиш Ctrl+Shift+C. Добавьте этот код в файл main.kt в sharedUI/src/jvmMain/kotlin: