salut a tous, je voudrais contrôler si les caractères entrés dans un JTextField sont bien des nombres, comment es ce que je pourrais faire?
merci pour votre aide.
Version imprimable
salut a tous, je voudrais contrôler si les caractères entrés dans un JTextField sont bien des nombres, comment es ce que je pourrais faire?
merci pour votre aide.
Tu as 2 solutions principalement :
- si tu restes avec un JTextField, tu peux te definir une sous-classe de PlainDocument qui n'accepte que les characteres compris entre '0' et '9' en surchargeant les methodes insertString(). Apres il faudra faire des tests plus evolues (regexp?) si tu veux pouvoir saisir des nombres negatifs, flottants ou de la notation scientifique. Ensuite tu utilises la methode setDocument() ou le constructeur approprie de la classe JTextField.
- Sinon tu peux utiliser un JFormattedTextField a la place avec un NumberFormatter
Voici un exemple permettant la saisie des entiers. Utiliser NumberFormat.getNumberInstance() ou un DecimalFormat pour d'autres type de nombres.
Tu noteras egalement que outre les methodes setText() et getText(), cette classe a les methodes setValue() et getValue() qui permettent de recuperer directement des objets de type approprie (qui auront ete crees par le formatter).Code:
1
2
3
4
5
6 JFormattedTextField numberField = new JFormattedTextField(new NumberFormatter(NumberFormat.getIntegerInstance())); ... numberField.setValue(100); ... int value = ((Number)numberField.getValue()).intValue();
Note que plutot que d'utiliser un DocumentListener, tu utiliseras un PropertyChangeListener sur la propriete "value" pour detecter les changements apportes par l'utilisateur.
Cet evenement est en general lance quand l'utilisateur a fini sa saisie ou que le composant a perdu le focus ; en tout cas apres que le champs ai verifie que la saisie est correcte par rapport au formattage specifie.Code:
1
2
3
4
5
6
7
8
9
10 numberField.addPropertyChangeListener("value", this); ... /** @inheritDoc */ public void propertyChange(PropertyChangeEvent event) { int value = ((Number)numberField.getValue()).intValue(); }
merci d'avoir répondu, entre temp j'ai trouvé try catch qui marche assez bien je dois dire.
Salut !escuse moi mais j'ai le même problème que toi !
j'ai un champs entier et je voudrais contrôler les valeurs saisies afin qu'elle ne soient que des entiers.j'ai essayé le code precedent avec le jFormattedTexfield mais àl 'execution de mon appli, le jFormattedTextfield accepte aussi les charactères. peut être que je m'y prends mal. dis moi comment t'as pu resoudre le pb ? avec try catch ?
en fait, j'ai entre guillemets détourné try, comme ca:
Pour Un JTextField que je nomme "test" et une variable entiere que je nomme "entier", ca donne :
Code:
1
2
3
4
5
6
7 try{ entier = Integer.parseInt(test.getText()); } catch(Exception ex){ JOptionPane.ShowMessageDialog(null,"Ceci n'est pas un nombre entier valable"); }
Merci !
Mais avec ton exemple, l'utilisateur pourra tout de meme saisir des caracteres et ce n'est qu'à la validation que ton message apparaitra.
Or moi je voudrais un code ou pour des valeurs entieres,le clavier alphabétique ne reponde pas .Du genre comme avec les MaskEdit.
Merci quand même !