2016-04-28 1 views
0

J'essaie de créer un champ JText qui n'accepte que des nombres entiers. Mais pour une raison quelconque le code d'activation ne sont pas envoyées à l'applicationEnvoyer un code clé lorsque la condition est vraie (java)

private void keyTyped(java.awt.event.KeyEvent evt) {         
    String s = String.valueOf(evt.getKeyChar()); 
    try{ 
     if(!(s.matches("[0-9]+"))) 
    { 
     evt.setKeyCode(KeyEvent.VK_DELETE); 
    } 
    }catch(Exception e){} 
}         
+0

Vous voulez dire que 'VK_DELETE' n'est pas reçu par l'application? – Caramiriel

+0

oui. Rien ne se passe .. J'ai vérifié avec System.out.println (s) et dans la console je reçois les alphabets seulement. mais le VK_DELETE ne se passe pas –

Répondre

1

Votre problème est une approche - vous ne devriez pas utiliser un KeyListener avec un composant texte Swing. Au lieu de cela, si vous souhaitez filtrer correctement l'entrée au clavier avec des composants de texte tels qu'un JTextField, ajoutez un DocumentFilter au document de JTextField. Dans le filtre, remplacez les 3 méthodes qu'il contient - insertString(...), remove(...) et replace(...) - et n'appelez la méthode super que si le texte actuel plus le texte supplémentaire (ou moins le texte supprimé) est valide.

Pour un exemple complet (par moi), veuillez regarder this answer of mine à une question similaire. Une autre option plus facile consiste à utiliser un InputVerifier.