Я пытаюсь зарегистрировать глобальные горячие клавиши непосредственно в операционной системе для моей программы.У меня это работает для всех ключей, которые перечислены в качестве JavaFX KeyCode, но если для определенного ключа KeyCode "Не определено", я не могу отличить его от других неопределенных ключей, поэтому я не могу его использовать.
ОС : xubuntu 18.04. Java : версия 11.0.1 2018-10-16 LTS, Oracle JavaFX : SDK 11.0.1
Хорошим примером являются «Media Keys», которые расположены на многих клавиатурах.Когда я нажимаю мультимедийную клавишу на клавиатуре, я получаю неопределенное KeyEvent:
System.out.println (keyEvent) : Событие клавиши: KeyEvent [source = TextField @ 25181b05[styleClass = текстовое поле ввода текста], target = TextField @ 25181b05 [styleClass = текстовое поле ввода текста], eventType = KEY_PRESSED, потребляется = true, символ =
keyEvent.getCode () : НЕ УКАЗАН
Я хотел бы иметь возможность распознать, если эта клавиша будет нажата снова .Мне не нужно знать, как называется ключ.Мне просто нужно знать, когда в следующий раз будет нажата уникальная клавиша, и среагировать.
Проблема в том, что я не вижу способа провести различие между НЕОПРЕДЕЛЕННЫМИ ключами в KeyEvent в JavaFX.Основываясь на общедоступном API KeyEvent и глядя на исходный код KeyEvent в JavaFX, кажется, что KeyEvent не хранит никакой дополнительной информации, которая может однозначно идентифицировать нажатие клавиши, которое не определено в KeyCode.
При более глубоком изучении кода JavaFX появляется уникальный идентификатор, который мне нужен может присутствовать в методе EmbeddedScene.keyEvent
:
@Override
public void keyEvent(final int type, final int key, final char[] ch, final int modifiers);
Этот аргумент final int key
передается функции KeyCodeMap.valueOf (key)
, которая в этом случае возвращает KeyCode.UNDEFINED.Я не могу легко протестировать, но могу поспорить, что int
имеет разные значения для каждого из этих разных медиа-ключей.
есть ли способ прослушать KeyEvents на более низком уровне на этапе JavaFX - до того, как они преобразуются в KeyCode и нужная мне информация теряется - поэтому я могу поймать горячую клавишу и зарегистрировать ее воперационная система?
Я уверен, что если я смогу просто заставить метод в моей базе кода срабатывать при нажатии клавиши, и чтобы эта клавиша показывала уникальный идентификатор, я смогу соединить остальные части вместе.Это не обязательно должно быть в стеке JavaFX.