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

JavaFX Discussion :

Nombre de caractères dans une textbox


Sujet :

JavaFX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 122
    Par défaut Nombre de caractères dans une textbox
    Bonjour,

    Est-il possible de bloquer le nombre de caractères que peut rentrer un utilisateur dans une textbox en javaFX? Et si oui comment?

    Merci beaucoup d'avance pour vos réponse.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 122
    Par défaut
    Personne ne peut m'aider? J'essaie, j'essaie mais je n'y arrive pas

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Février 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 284
    Par défaut
    Ca devrait t'aider un petit peu
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    public class StringBox extends TextBox {
     
        public var nbMaxChar: Number = 4;
        override var focusTraversable = false;
     
        function getStyle(color: String): String {
            "-fx-background-color: "
            "{color}, -fx-text-box-border, -fx-control-inner-background;";
        }
     
        override var columns= 6;
     
        var str: String = bind rawText on replace {
            def nb = rawText.length();
            set = nb <= nbMaxChar;
        }
     
        public var set: Boolean = true on replace {
            if (set) {
                style = getStyle("green")
            } else {
                style = getStyle("red");
            }
        };
        public var onChange: function (str: String);
     
        override var action = function(): Void {
            if(set)
                onChange(text);
        }
    }
    function run() {
        var val: String;
        Stage {
            title: "StringBox"
            scene: Scene {
                width: 350 height: 150
                content: [
                    HBox {
                        nodeVPos: VPos.CENTER
                        spacing: 10
                        content: [
                            StringBox {
                                onChange: function(pval: String): Void {val = pval}
                            }
                            Label { text: bind "{val}"}
                        ]
                    }
                ]
            }
        }
    }

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 122
    Par défaut
    Ok merci beaucoup de ta réponse même si ça correspond pas exactement à ce que je voulais faire.

    Voilà comment je me suis pris pour bloquer le nombre de caractère à 4 dans ma textbox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    textbox_annee = javafx.scene.control.TextBox {
                layoutX: 271.0
                layoutY: 146.0
                columns:45
                text:""
     
                onKeyPressed: function (e: KeyEvent): Void {
                    def nb = textbox_annee.rawText.length();
                    if(nb >= 4)
                    {
                        textbox_annee.deletePreviousChar();
                    }
                }    
             };
    Quand pensez-vous?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 122
    Par défaut
    Ou sinon j'ai une autre question.

    Est-ce que c'est possible lorsqu'on a tapé le nombre de caractères requis dans une textbox de passer automatiquement à une autre?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 64
    Par défaut
    J'y travaillais... vu que c'est un besoin pour le moins courant !
    Ma version consiste à créer une variante de la TextBox.
    J'ai d'ailleurs anticipé ton second besoin : il est possible de restreindre à la saisie de nombres seulement (ou autre chose, cela peut être flexible).
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    class RestrictiveTextBox extends TextBox
    {
        public-init var maxLen = 10;
        public-init var bDigitsOnly = true;
     
        init
        {
            columns = maxLen;
        }
     
        override function replaceSelection(replacingText: String): Void
        {
            // Find out what portion of text is replaced
            var pos1 = Math.min(dot, mark);
            var pos2 = Math.max(dot, mark);
            // We cannot change parameters... :-(
            var rt = replacingText;
            if (bDigitsOnly)
            {
                // Let regex do the job for us... Not efficient but that's answer to user input, performance isn't critical
                rt = rt.replaceAll("\\D+", "");
            }
            // The expected result
            var newText = "{rawText.substring(0, pos1)}{rt}{rawText.substring(pos2)}";
            // Are we exceeding the limit?
            if (newText.length() > maxLen)
            {
                // Yes, compute how much
                var diff = newText.length() - maxLen;
                // We are already at max
                if (diff >= rt.length())
                    return;	// Just don't insert it
                // Truncate the input to fit in the box
                rt = rt.substring(0, diff);
            }
            // Insert the perhaps truncated string
            super.replaceSelection(rt);
        }
    }
     
     
    var input: RestrictiveTextBox;
    Stage
    {
        title: "Test Forum"
        scene: Scene
        {
            width: 200
            height: 100
            content: input = RestrictiveTextBox
            {
                maxLen: 8
                font: Font { size: 36 }
            }
        }
    }
    Désolé pour les commentaires en anglais, c'est une habitude...

    Remarques sur ton code :
    - Il faudrait if (nb > 4), pas >= 4 (example : taper 4 chars, puis flèche gauche)
    - Quoique... Le problème est que tu traites rawText qui n'est pas mis à jour au moment de l'évènement.
    - Apparemment, le "coller" (paste) ne génère pas cet évènement...

Discussions similaires

  1. Calcul d'un nombre de caractères dans une chaîne
    Par Thekiller dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2010, 23h21
  2. [Excel] Nombre de caractères dans une plage
    Par fred014 dans le forum Delphi
    Réponses: 20
    Dernier message: 02/03/2007, 21h32
  3. Réponses: 10
    Dernier message: 31/12/2006, 12h35
  4. Réponses: 2
    Dernier message: 17/08/2006, 12h36
  5. limite du nombre de caractères dans une requete
    Par pheno82 dans le forum Access
    Réponses: 3
    Dernier message: 01/06/2006, 22h12

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