openjdk.ruOpenJDK на русском

JEP 204: JavaFX Accessibility

Поддержка специальных возможностей в JavaFX

АвторStephen Northover
ОтветственныйSteve Northover
ТипFeature
ОбластьJDK
СтатусClosed / Delivered
Выпуск8u40
Компонентclient-libs
Обсуждениеopenjfx dash dev at openjdk dot java dot net
ТрудоёмкостьXL
ДлительностьXL
Связан сJEP 209: JavaFX Scene Builder Update
РецензентыKevin Rushforth
ОдобренRichard Bair
Создан2014/05/16 18:55
Обновлён2016/06/07 23:34
Задача8043344

Аннотация

Доработать существующие элементы управления JavaFX, чтобы они поддерживали вспомогательные технологии, и предоставить публичный API, с помощью которого разработчики смогут писать собственные элементы управления с поддержкой специальных возможностей.

Мотивация

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

Описание

Когда мы говорим о специальных возможностях, чаще всего мы имеем в виду программу чтения с экрана. Именно в этой области нужна бо́льшая часть работы. Помимо поддержки программ чтения с экрана, по всем элементам управления должно быть возможно перемещаться с помощью клавиатуры. Кроме того, должен поддерживаться специальный режим высокой контрастности, в котором элементы управления лучше видны пользователям.

Специальные возможности сложно реализовать в наборе виджетов, потому что они часто затрагивают много разных программных уровней. В JavaFX уровень Glass — это абстракция операционной системы. Уровень Prism выводит пиксели на экран, а уровень Quantum связывает Glass и Prism воедино. Компонент Graphics предоставляет граф сцены и другую функциональность поверх Glass и Prism. Элементы управления построены поверх этих уровней. Чтобы реализовать специальные возможности в JavaFX, потребуется изменить все эти уровни.

Для взаимодействия с API специальных возможностей операционной системы нужен нативный код. Нативные API в разных операционных системах различаются. Поэтому нужен уровень абстракции — в нативном коде или в Java — и внутренний API с разными реализациями для доступа к нативному коду. В терминах JavaFX: так же как Glass оборачивает нативные понятия, например окно верхнего уровня, он должен оборачивать и понятия специальных возможностей, например «выделение в элементе управления изменилось». Этот внутренний API должен быть одинаковым для клиентов Glass, таких как Quantum, но реализации сильно различаются.

Каждый элемент управления JavaFX и различные понятия, которые он реализует, должны быть доступны программе чтения с экрана. Это может привести к взрывному росту API. В терминах JavaFX Glass: Glass оборачивает нативные окна верхнего уровня, но не пытается оборачивать нативные элементы управления, например нативную таблицу. Поддержка специальных возможностей должна раскрывать понятия и поведение большого набора элементов управления. Атрибуты каждого уникального элемента управления должны быть смоделированы в Glass. Например, все табличные элементы управления должны поддерживать выделение и перемещение и сообщать, когда изменились важные свойства, такие как выделение. По сути, Glass предоставляет переносимый API к нативной функциональности, а это всегда непросто (см. попытки наборов виджетов AWT и SWT). К счастью, число атрибутов, которые нужно раскрыть для каждого элемента управления, значительно меньше полного API типичного нативного элемента управления.

Кроме того, к специальным возможностям предъявляется требование, чтобы пользовательские элементы управления, написанные сторонними разработчиками, тоже их поддерживали. Для этого FX API должен указывать, какие части пользовательского элемента управления представляют строку таблицы или выделение в текстовом элементе управления. Accessibility API используется как встроенными, так и пользовательскими элементами управления.

По следующим ссылкам описан очень ранний прототип, работа над которым уже идёт: навигация с клавиатуры, исследование специальных возможностей.

Тестирование

Автоматизировать тестирование для программ чтения с экрана очень сложно. Поэтому тестирование, скорее всего, будет трудоёмким и ручным. Для тестирования специальных возможностей не требуется специальное ПО, потому что вспомогательные средства, такие как программы чтения с экрана, встроены в платформы. Иногда технологии платформы дополняются или заменяются продуктами сторонних поставщиков вспомогательных технологий. Ожидается, что эти поставщики сами обеспечат работу своих технологий. JavaFX будет реализовывать стандартный API операционной системы, поэтому специальная общая библиотека, такая как Java Access Bridge, не потребуется. Сторонние программы, использующие стандартный API, будут работать при условии, что они используют этот API согласованно и совместимо со встроенными нативными аналогами.