2017-01-20 1 views
-1

J'ai un problème avec actionListener (keyPressed) sur TextField. Ce est la méthode qui est appelée après la touche est enfoncée, mais il ne change pas de caractère dans TextField:Modifier dynamiquement virgule à point dans l'événement de clé (swing)

private void checkIfTypingDots(java.awt.event.KeyEvent kev) { 
      int keyCode = kev.getKeyCode(); 
      if(keyCode == KeyEvent.VK_COMMA) { 
       kev.setKeyCode(KeyEvent.VK_PERIOD); 
      } 
    } 

Comment puis-je modifier dynamiquement une virgule à point dans TextField par l'événement - keyPressed?

+1

OMI que vous feriez mieux en utilisant un 'DocumentListener' pour ce – ControlAltDel

+0

Je doute que vous pouvez modifier le code de la clé événement étant renvoyé. Pourquoi devriez-vous faire cela au lieu de demander à l'utilisateur de taper la bonne chose de toute façon? Si vous voulez vraiment soutenir cela, vous devriez probablement remplacer le caractère juste au moment de l'ajouter au texte ou remplacer les virgules par des points après (peut-être plus facile mais probablement plus lent si le texte est grand). – Thomas

+0

@Thomas c'est l'application de production et beaucoup de gens y travaillent. Parfois, ils tapent des virgules, parfois des points. Il est de mon devoir de le rendre convivial – Michu93

Répondre

0

changer Dynamiquement virgule pour point dans l'événement clé (balançoire)

Utilisez un DocumentFilter pour traduire la chaîne avant qu'il ne soit entré dans le Document.

Lisez la section du tutoriel Swing sur How to Implement a DocumentFilter pour plus d'informations pour vous aider à démarrer.

Pour remplacer les remplacer (...) la méthode que vous pourriez faire quelque chose comme:

public void replace(final FilterBypass fb, final int offs, final int length, final String str, final AttributeSet a) 
{ 
    if (str.equals(",")) 
     super.replace(fb, ofs, length, ".", a); 
    else 
     super.replace(fb, offs, length, str, a); 
}