[java] Comment faire pour qu'un JTextField contienne que des chiffres?

Comment faire pour qu'un JTextField contienne que des chiffres? [java] - Java - Programmation

Marsh Posté le 10-03-2004 à 19:02:11    

Tout est dans le titre!
merci

Reply

Marsh Posté le 10-03-2004 à 19:02:11   

Reply

Marsh Posté le 10-03-2004 à 19:04:57    

je connais rien en java. mais j'imagine que tu as un event lorsque l'on modifie le textfield. il suffit alors de contrôler si c'est entre 0 et 9. sinon, remplacer le texte par char(0)


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 10-03-2004 à 19:06:15    

je prend note,
pas d autre propositions ?

Reply

Marsh Posté le 10-03-2004 à 19:12:34    

en jdk 1.4 visiblement y a JformattedTextField qui permet de faire ca, sinon ca se code mais pas comme dit JagStang ...
 
je me souviens qu'il y a longtemps on avait parlé de ca sur ce forum ... je vais faire une recherche


Message édité par benou le 10-03-2004 à 19:12:58

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 10-03-2004 à 19:19:01    

Reply

Marsh Posté le 10-03-2004 à 19:20:32    


 
Je conseille  la solution 2 :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 10-03-2004 à 19:26:38    

j'ai pas retrouvé le topic.
 
voilà un truc que j'avais fait pour un textfield pour float. Faut simplifier le code pour gérer que les entiers :
 

Code :
  1. package convertisseur;
  2. import javax.swing.*;
  3. import javax.swing.text.*;
  4. import java.awt.Toolkit;
  5. import java.text.ParsePosition;
  6. import java.text.NumberFormat;
  7. import java.text.DecimalFormat;
  8. import java.text.ParseException;
  9. import java.util.Locale;
  10. /**
  11.    Attention : cette fonction n'accepte la saisie que de chiffres et du séparateur de  
  12.    décimal. Pour faire ca bien, il faudrait aussi accepter les autres caractères qui peuvent  
  13.    composer un float : le signe negatif, le séparateur de groupe, l'expossant, etc ...  
  14.    Mais il ne faut accepter la saisie de ces caractères que si leur emplacement est correct, ce qui rend
  15.    le travail un peu plus difficile. Si quelqu'un a le courage de faire ca, merci de me l'envoyer
  16. */
  17. public class JFloatField extends JTextField {
  18.    private Toolkit toolkit;
  19.    private DecimalFormat decimalFormatter;
  20.    private char decimalSeparator;
  21.    private void init() {
  22.       toolkit = Toolkit.getDefaultToolkit();
  23.       setDecimalFormat( new DecimalFormat("#0.00" ));
  24.    }
  25.    public JFloatField() {
  26.       super();
  27.       init();
  28.    }
  29.    public JFloatField(int columns) {
  30.       super(columns);
  31.       init();
  32.    }
  33.    public void setDecimalFormat(DecimalFormat formatter) {
  34.       decimalFormatter = formatter;
  35.       decimalSeparator = decimalFormatter.getDecimalFormatSymbols().getDecimalSeparator();     
  36.    }
  37.    public float getValue() {
  38.       if (getText().equals("" )) {
  39.          return 0;
  40.       }
  41.       try {
  42.          return decimalFormatter.parse(getText()).floatValue();
  43.       } catch (ParseException e) {
  44.          // ne devrait jamais arriver
  45.          toolkit.beep();
  46.          return 0;
  47.       }
  48.    }
  49.    public void setValue(float value) {
  50.       setText(decimalFormatter.format(value));
  51.    }
  52.    public void format() {
  53.       setValue(getValue());
  54.    }
  55.    protected Document createDefaultModel() {
  56.       return new JFloatFieldDocument();
  57.    }
  58.    protected class JFloatFieldDocument extends PlainDocument {
  59.       protected boolean comma=false;
  60.       public void insertString(int offs, String str, AttributeSet a)
  61.          throws BadLocationException {
  62.  char[] source = str.toCharArray();
  63.          char[] result = new char[source.length];
  64.          int j = 0;
  65.          char c;
  66.          for (int i = 0; i < result.length; i++) {
  67.             c = source[i];
  68.             if (c == '.') {
  69.                c = decimalSeparator;
  70.             }             
  71.             if (Character.isDigit(c))
  72.                result[j++] = c;
  73.             else if (c == decimalSeparator) {
  74.                if (! comma) {
  75.                   comma = true;
  76.                   result[j++] = c;
  77.                } else {
  78.                   toolkit.beep();
  79.                }
  80.             } else {
  81.                toolkit.beep();
  82.             }
  83.          }
  84.  super.insertString(offs, new String(result, 0, j), a);
  85.       }
  86.       public void remove(int offs, int len) throws BadLocationException {
  87.          String removedText = getText(offs, len);
  88.          if (removedText.indexOf(decimalSeparator) != -1) {
  89.             comma = false;
  90.          }
  91.  super.remove(offs, len);
  92.       }       
  93.    }
  94. }


 
mais visiblement en jdk1.4 ca a bcp changé : y a moyen de faire bcp plus simple


Message édité par benou le 10-03-2004 à 19:27:47

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 10-03-2004 à 19:27:15    

kadreg a écrit :


Je conseille  la solution 2 :o


la 3 est sympa :)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 10-03-2004 à 19:31:42    

j ai fe ca :
le probleme c'est que une fois le curseur à l interieur, je ne peux pas effacer le premier caractere tape, c plutot embetant
 

Citation :


 private JFormattedTextField jTextFieldScore1 ;
    NumberFormat nf = NumberFormat.getNumberInstance ();
    nf.setParseIntegerOnly (true);
    jTextFieldScore1 = new JFormattedTextField(nf);
((DefaultFormatter) jTextFieldScore1.getFormatter ()).setAllowsInvalid (false);

Reply

Marsh Posté le 10-03-2004 à 19:36:44    

j ai rien dit, en faite c le 0 qui veut po

Reply

Marsh Posté le 10-03-2004 à 19:36:44   

Reply

Marsh Posté le 11-03-2004 à 11:01:42    

n oubliez pas cette ligne sinon vous aller galerer comme moi si vous voulez mettre à jour le champ:
    ((DefaultFormatter) jTextFieldScore2.getFormatter ()).setOverwriteMode(true)     ;

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed