2014-10-15 2 views
1

В приложении JavaFX (фактически ScalaFX) я хотел бы разрешить пользователю вызывать команды с помощью последовательности клавиш клавиатуры. Эти команды должны работать независимо от текущей раскладки клавиатуры (языка). например, пользователь может ввести тайский язык (ภาษา), а затем сохранить его, нажав «Escape» и «S» (или «:», а затем «w», стиль vim).JavaFX - get KeyEvent для символов, отличных от ASCII

Я обнаружил, что KeyEvents предоставляет неопределенный код для символов, отличных от английского (не ASCII?).

Этот код:

onKeyPressed = (k: KeyEvent) => { 
    println("text: " + k.text + " " + "code name: " + k.code.name) 
} 

дает:

text: a code name: A 
text: code name: Alt   << Alt + Shift switches from English to Hebrew 
text: code name: Shift 
text: ש code name: Undefined 

при надавливании, изменения языка на иврит и нажав на него снова.

Как решить эту проблему? Как я могу узнать, какой ключ был нажат независимо от языка?

аналогичный вопрос без ответа: JavaFX KeyEvent and accented characters

ответ

0

getCharacter() получит вам юникода характер позади KeyEvent:

ЮНИКОДу характер, связанный с ключом напечатал события. Например, для примера char будет иметь значение «A» для генерируемого ключа, сформированного , нажав SHIFT + 'a'. Для событий с нажатыми клавишами и ключами char всегда CHAR_UNDEFINED.

+0

Это лучше, чем я получил, но все же не позволяю мне знать, какой ключ был нажат, независимо от языка **. Поскольку я не знаю, какой язык использует пользователь, мне нужно будет изучить множество символов Юникода, чтобы идентифицировать один и тот же ключевой штрих. – user4134414