IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Creation d'un composant pour saisir des nombres


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 36
    Points : 24
    Points
    24
    Par défaut Creation d'un composant pour saisir des nombres
    Bonjour,

    Voila mon souci, je dois creer un composant spécialement dedie a la saisie de nombre.

    Ce composant (le plus generique possible doit etre utilise dans toute une application) et doit avoir lors de sa creation 2 parametres possibles. Le premier la taille du nombre, le suivant le nombre de décimal. Je dois pouvoir controler qu'aucun caractere autre que des chiffres de 0 a 9 soient saisis (mise a part la virgule).

    Je voulais dans un premier temps utiliser un MaskFormatter mais cela c'est avere impossible puisque si je lui donne ce masque "###,##" et que je tape 12,25 ce n'est pas accepte (il veut exactemment 3 chiffres avant la virgule).

    Je pense qu'il faudrait plutot partir sur un MaskFormatter mais qui marcherait avec des expressions regulieres.

    J'ai besoin daide s'il vous plait

    Merci

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Tu peus utiliser l'interface Document pour formatter un JTextField.

    Comment contraindre la saisie dans un composant texte ?
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Membre éclairé
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Points : 704
    Points
    704
    Par défaut
    en passant par Document de JTextField?

    je crois qu'avec un JFormattedTextField et un MaskFormatter ce sera plus facile pour lui.
    il est sur la bonne voix.
    avec un MaskFormatter ce que tu veux faire c'est possible.
    tu dois juste redefinir quelques methodes de MaskFormatter
    je pense surtout a stringToValue et valueToString si tu veux avoir un truc comme tu dis.

    je crois que meme sans extend de MaskFormatter ca doit etre possible.
    les possibilites sont enormes avec cette classe. pour commencer, utilise un placeholder de 0 ;-)

  4. #4
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Citation Envoyé par bbclone
    en passant par Document de JTextField?
    En utilisant les expressions régulières, l'interface Document peut devenir assez puissante

    Voici un Document qui me semble convenir à ta problématique, en tout cas l'idée est là (il utilise les expressions régulières).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    class NumberDocument extends PlainDocument {
            private static final long serialVersionUID = 1202748508L;
     
            private int taille;
            private int nbDecimal;
     
            public NumberDocument(int taille, int nbDecimal) {
                super();
                this.taille = taille;
                this.nbDecimal = nbDecimal;
            }
     
            public void insertString(int offs, String str, AttributeSet a)
            throws BadLocationException {
                int currentTextSize = this.getLength();
                String currentText = this.getText(0, currentTextSize);
                StringBuilder sb = new StringBuilder();
                sb.append(currentText.substring(0, offs));
                sb.append(str);
                sb.append(currentText.substring(offs, currentTextSize));
                StringBuilder regex = new StringBuilder("-?\\d{0,");
                regex.append(String.valueOf(taille)).append("}(,\\d{0,")
                        .append(String.valueOf(nbDecimal)).append("})?");
                if(sb.toString().matches(regex.toString())) {
                    super.insertString(offs, str, a);
                }
            }
        }
    [edit]j'ai modifié le code afin d'utiliser un StringBuilder pour la construction de l'expression réglière[/edit]
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  5. #5
    Membre éclairé
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Points : 704
    Points
    704
    Par défaut
    > En utilisant les expressions régulières, l'interface Document peut devenir assez puissante

    ayant vu des Document pendant tous les soir et nuit pendant les deux derniere semaine, crois moi je sais que ca peut etre tres puissant.
    j'en reve la nuit si tu veux savoir

    mais MaskFormatter est la pour faire ce qu'il veut.
    ca sert a controller la saisie dans un JFormattedTextField.
    regarde http://java.sun.com/docs/books/tutor...textfield.html

  6. #6
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Je connais MaskFormatter (qui est, il est vrai, fort sympathique ) mais apparemment il a besoin d'être plus précis donc un Document avec une expression régulière semble mieux convenir à son probème (après c'est à Sylmandel de voir ).
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 36
    Points : 24
    Points
    24
    Par défaut
    Merci beaucoup pour ce super modele de document, je t'aime celui qui l'a fait


  8. #8
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Citation Envoyé par Sylmandel
    Merci beaucoup pour ce super modele de document, je t'aime celui qui l'a fait

    mais de rien.

    PS : n'oublie pas le tag
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 36
    Points : 24
    Points
    24
    Par défaut
    Encore une petite question sur ton composant model de composant, lorsque je saisie un composant d'une taille 10 et decimale 0, il me permet de saisir la virgule.

    Y'aurait il moyen pour enlever ce phenomene un peu genant ?

    Merci

  10. #10
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Il suffit de de ne rajouter à l'expression régulière la partie décimale uniquement si le nombre de décimales est supérieur à 0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    StringBuilder regex = new StringBuilder("-?\\d{0,");
    regex.append(String.valueOf(taille)).append("}");
    if(nbDecimal > 0) {
         regex.append("(,\\d{0,") .append(String.valueOf(nbDecimal)).append("})?");
    }
    Je pense qu'en charchant un peu tu aurais pu trouver tous seul , flemmard va
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer fonctions pour saisir des nombres
    Par odsen.s dans le forum C
    Réponses: 34
    Dernier message: 30/04/2007, 19h34
  2. [VB]Formatter une textbox pour saisir des heures
    Par alexxx69 dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 21/02/2006, 06h21
  3. Un composant pour envoyer des SMS, ça existe ?
    Par Revan777 dans le forum C++Builder
    Réponses: 1
    Dernier message: 16/01/2006, 16h20
  4. Réponses: 4
    Dernier message: 25/11/2005, 11h25
  5. Recherche de composant pour tracer des lignes
    Par n1portki dans le forum Composants VCL
    Réponses: 5
    Dernier message: 21/09/2005, 01h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo