Я внедрил OSK в SWT и AWT для своей компании.
Мы инициализируем раскладку OSk, используя ini-файл, где вы можете определить раскладку клавиатуры (размер, шрифт, как выглядит линия клавиатуры, метка и действие клавиши)
Сначала вы должны сгенерировать клавиатуру, читающую эти ini-файлы. Это делается очень быстро.
Вы должны включить фокус на созданных кнопках, а также в верхнем окне. В противном случае компонент, который получает ключевые действия, постоянно теряет фокус.
Второй шаг - внедрение диспетчера событий. Вы должны отправить ключевые события OSK всем прослушивающим объектам событий. Вы можете отправить событие с помощью Robot или получить фокусированный компонент с помощью FocusManager и установить его напрямую.
Для SWT это работает очень хорошо, но в AWT есть некоторые проблемы с многопоточностью и фокусом.