2016-11-14 3 views
2

Я в настоящее время строю калькулятор на Java и начал внедрять прослушиватель клавиш. Он работает очень хорошо, но когда я пытаюсь ввести символ каретки (^), он не регистрируется сразу. Сначала вы должны нажать другую клавишу, чтобы она появилась.Caret (^) не регистрируется незамедлительно. Java key listener

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

Если это помогает, вот мой код для обработки KeyEvents:

@Override 
public void handle(KeyEvent ke) { 
    String key = ke.getCharacter(); 

    if (key.matches("[0-9*/+-=.()^%]")) { 
     controller.getButton(key).fire(); 
    } 
} 

EDIT: Нашел обходной путь. Проблема, о которой говорил Эли Садофф, заключается в том, что мой карет - это мертвый ключ на моей клавиатуре. Поскольку мой обязательными для кареткой является «сдвиг + ¨», я был в состоянии решить, как это:

@Override 
public void handle(KeyEvent ke) { 
    String key = ke.getCharacter(); 

    if (ke.isShiftDown() && ke.getCode() == KeyCode.DEAD_DIAERESIS) { 
     controller.getButton("^").fire(); 
    } 

    else if (key.matches("[0-9*/+-=.()%]")) { 
     controller.getButton(key).fire(); 
    } 
} 
+0

У вас есть эта проблема с '+', '(', ')' и '%' случайно? –

+0

Нет, ни один из них. – Javatar4ever

+1

Является ли ваш ключ каретки мертвым ключом на вашем компьютере? (Значение typing '^', а затем 'e' создаст' ê') –

ответ

2

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

+0

Это действительно правильно, спасибо! – Javatar4ever

+1

Добавлено мое обходное решение проблемы как редактирование вопроса. – Javatar4ever

+0

@ Javatar4ever Хорошая работа! –