Java KeyEvent & Подсветка синтаксиса - PullRequest
0 голосов
/ 11 ноября 2010

Я пишу текстовый редактор с подсветкой синтаксиса на Java, и у меня возникла небольшая проблема с тем, что я должен делать, а не с тем, что я хочу делать.По сути, класс KeyEvent предоставляет мне небольшую проблему:

  1. KeyTyped не позволяет мне определить, что это за ключ, поэтому он бесполезен для лексизма.
  2. KeyPressed лучше,это позволяет мне идентифицировать каждую клавишу при нажатии, что отлично подходит для лексизма, однако запускает событие до того, как клавиша будет фактически помещена в JEditorPane.
  3. KeyReleased решает проблему как KeyPressed, так и KeyTyped, как это происходитпосле ввода символа, и это позволяет мне фактически идентифицировать, что это за персонаж.Однако, если я удерживаю «а», и он вставляет 50 «а», я облажался.

Мое решение проблемы состоит в том, чтобы использовать KeyPressed для всех символов, которые должны быть введены, использовать событие, прочитайте символ, который должен был быть введен, и введите его вручную, однако я предполагаю, что это не самое элегантное из доступных решений.Мой вопрос, как еще я мог пойти по этому поводу?Есть ли что-то, над чем я остекленю, или я нашел решение своей проблемы и должен просто катиться с этим?

Ответы [ 2 ]

1 голос
/ 11 ноября 2010

Кажется, JavaDoc противоположно тому, что вы говорите для KeyEvent:

Метод getKeyChar всегда возвращает действительный символ Unicode или CHAR_UNDEFINED.Ввод символов описывается событиями KEY_TYPED: события KEY_PRESSED и KEY_RELEASED не обязательно связаны с вводом символов.Следовательно, результат метода getKeyChar гарантированно будет значимым только для событий KEY_TYPED.

0 голосов
/ 11 ноября 2010

Возможно, вам следует использовать Document Listener .

...