2016-11-14 4 views
2

Je suis actuellement en train de construire une calculatrice en Java et j'ai commencé à implémenter un écouteur clé. Cela fonctionne très bien, mais quand j'essaie de taper le symbole du caret (^) il ne s'enregistre pas immédiatement. Vous devez d'abord appuyer sur une autre touche pour le faire apparaître.Caret (^) ne s'enregistre pas immédiatement. Écouteur de clés Java

Je suppose que la raison en est qu'il utilise le même comportement que lorsque vous essayez de taper un signe dans un document texte ordinaire. Mais y a-t-il un moyen de contourner ce comportement?

Si elle aide, voici mon code pour gérer les KeyEvents:

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

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

EDIT: Trouvé une solution de contournement. Le problème mentionné par Eli Sadoff est que mon curseur est une touche morte sur mon clavier. Depuis ma liaison pour le caret est « shift + ¨ », j'ai pu le résoudre comme ceci:

@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

Avez-vous ce même problème avec '+', '(', ')', et '%' par hasard? –

+0

Non, ni l'un ni l'autre. – Javatar4ever

+1

Votre clé d'insertion est-elle une clé morte sur votre ordinateur? (Le fait de taper '^' et de 'e' produirait 'ê') –

Répondre

2

Le problème est que la disposition du clavier d'entrée que vous utilisez sur votre ordinateur traite ^ comme touche morte , car c'est un diacritique de combinaison. Le moyen de résoudre ce problème serait de changer la disposition de votre clavier d'entrée pour un clavier qui ne traite pas ^ comme un diacritique de combinaison. Cela peut être testé en tapant ^ + et et voir si elle résulte ê ou ^e.

+0

C'est en effet correct, merci! – Javatar4ever

+1

Posté ma solution de contournement au problème en tant que modifier à la question. – Javatar4ever

+0

@ Javatar4ever Beau travail autour! –