KeyEvent символы - PullRequest
       63

KeyEvent символы

5 голосов
/ 27 февраля 2012

У меня вопрос по поводу KeyListener.Когда я получаю KeyEvent и выполняю getKeyChar(), я связываюсь со звездочкой и *, и я собирался использовать одну из KeyEvent.VK_, которая работает для большинства ключей.

Но для этого конкретного ключа и некоторых других значения не совпадают.

* getKeyChar() вернет 0x2a, а getKeyCode() вернет 0x38.Определением для 0x38 является VK_8, а не VK_ASTERISK, что 0x97.

Почему одни коды клавиш совпадают, а другие нет.Большинство делает ты.Если я просто сравниваю символы, которые работают ( == '*'), но я не уверен, что это лучшее решение?

Спасибо за помощь !!!

Ответы [ 3 ]

5 голосов
/ 27 февраля 2012

ОК, вы что-то не так поняли.

Ключи - это ключи, а символы - это символы. Символы являются результатом нажатия клавиш, и одна и та же клавиша может приводить к различным символам в зависимости от обстоятельств (комбинации клавиш, такие как Alt , Control , Shift и т. Д.).

Итак, VK_8 ключ код обозначает ключ , который может выдавать символы 8, * и, возможно, другие в зависимости от локализации клавиатуры.

А 1021 * выделенная клавиша на цифровой клавиатуре - VK_MULTIPLY - она ​​может выдавать только один символ * (насколько мне известно).

Вы, вероятно, должны заботиться не о клавише , которую нажал пользователь, а о символе , который произвело это действие пользователя.

Эту информацию вы можете получить с помощью getKeyChar(), но учтите, что если пользователь нажимает комбинацию Shift 8 , чтобы получить *, на самом деле это две клавиши ( Shift) и 8 ), и вы получите два события, а первое (для Shift ) даст нечитаемый символ.

2 голосов
/ 27 февраля 2012

зависит от JComponent

, если вы хотите определить из JTextComponent , тогда используйте DocumentListener , если вы хотите изменить последовательность Char, тогда используйте DocumentFilter

иначе посмотрите на KeyBindings , потому что KeyListener предназначен для AWT Components

1 голос
/ 27 февраля 2012
  1. KeyEvent.VK_ASTERISK - это константа, зарезервированная для (виртуальной) клавиши клавиатуры, которая помечена *.Он не должен совпадать с символом, который появляется, когда кто-то нажимает клавишу.

    Если вы хотите использовать константы VK, вы должны прослушивать события нажатия клавиш вверх и вниз и использовать метод KeyEvent.getKeyCode().Если вы хотите использовать символы, вы прослушиваете события, набранные ключом, и используете метод KeyEvent.getKeyChar().

    Некоторые коды клавиш могут соответствовать символу только потому, что его легче определить таким образом;в действительности нет никакой необходимости делать это таким образом.

  2. Вы говорите, что получили VK_8 от getKeyCode для ввода звездочки.Вы нажали настоящую звездочку или вам пришлось набирать Shift-8?

...