KeyCode для ключа (? ß \)

Я использую немецкую клавиатуру (показано ниже) и пробую класс Robot на Java. Я пытаюсь найти KeyCodes для нажатых клавиш. Он работает с getKeyCode(). Например: "A" - это код: 65, "-" - код: 45, 'ENTER' - код: 10

Но когда я нажимаю '? ß\'key (на немецких клавиатурах справа от клавиш 1-0 выше) getKeyCode() говорит код: 0, и я не нашел ни одного VK_KEY в документальном фильме.

Можно ли нажать эту клавишу?


German keyboard

Ответ 1

Коды клавиш предназначены для клавиатур с английскими/американскими макетами. Попробуйте VK_EQUALS для самого ключа, но Robot может вместо этого отправить =.

Если вам не нужен фактический ключ для нажатия, но введенный символ, вы можете попытаться смоделировать ввод Unicode с помощью кодовой точки Alt + Unicode. См. Этот вопрос: Как сделать символы Unicode типа Java.awt.Robot? (Возможно ли это?)

См. также этот ответ: fooobar.com/questions/496802/... Он указывает на библиотеку, которая использует раскладки клавиатуры для сопоставления символов Java с ключами. RoboticAutomaton.typeCharacter() использует раскладку клавиатуры, чтобы узнать, как клавиши нажать, чтобы получить определенный символ.

Ответ 2

Ядро Java поддерживает около 44000 различных символов, включая символы ASCII, поэтому также ожидайте некоторые новые вещи, если вы хотите увидеть, какой ключ вы нажимаете, и какой из них нажат, просто распечатайте их в методе keyPressed методом getExtendedKeyCode(), если его не стандартный ключ, а также распечатать его ключ.

Ответ 3

javadoc KeyEvent говорит:

Не все символы имеют связанный с ними код ключа. Например, нет ключа для вопросительного знака, потому что нет клавиатуры, для которой она появляется на основном уровне.

Символом ß является такой символ. Тем не менее, все события нажатия клавиш имеют согласованный расширенный key code, который можно найти с помощью метода утилиты KeyEvent.getExtendedKeyCodeForChar() и по сравнению с тем, ключевое событие:

if (keyEvent.getExtendedKeyCode() == KeyEvent.getExtendedKeyCodeForChar('ß')) {
    // ß was pressed
}

Ответ 4

Обратный слэш \, по-видимому, считается основным символом этого ключа. Таким образом, KeyEvent.VK_BACK_SLASH дает вам ключевой код этого ключа на немецкой клавиатуре.