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 :

Javafx2.2 Simuler un autoCompleteTextfield


Sujet :

JavaFX

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut Javafx2.2 Simuler un autoCompleteTextfield
    Bonjour,

    Je voudrais simuler un textField (ou autre contrôle d'encodage) qui sur encodage d'un caractère indiquerait à la fois les caractères déjà entrés ainsi que le premier mot qui commence par ces caractères.

    Immaginons que j'ai une liste de 4 noms:

    BARBARA
    BENOIT
    BERNARD
    BERTRAND
    Je voudrais que quand je tape "B" mon contrôle affiche:
    BARBARA
    Le curseur devrait clignoter après mon "B".
    Puis je tape un E et s'affiche:
    BENOIT
    Avec le curseur qui se met après "BE".

    Ma question ne porte pas sur la manière de trouver le complément mais bien sur l'encodage, le curseur et l'affichage du complément.

    J'avais pensé à un HBox qui comprendrait un TextField et un Label.
    Sur changement du contenu du TextField, je changerais le contenu du Label.

    Il faudrait cependant que mon TextField soit toujours à la dimension de son contenu (qu'il s'agrandisse donc avec le nombre de caractères entrés).
    Parce que si c'est pour avoir:
    BE _______ NOIT
    ça ressemble à rien...


    L'avantage du textField est que le curseur sera visible.
    Est-ce que le textfield est le bon contrôle pour faire ça ?
    Comment le redimensionner dynamiquement ?

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Il me semble que la question avait déjà été posée sur ce forum mais pour une ComboBox. Fait une recherche. Bon après je n'avais pas été fouillé plus loin que ce que j'avais trouvé à l’époque (qui doit être pour du JavaFX 2.2 justement).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Bonjour,


    J'ai relu tous les sujets de l'années 2015 (et certains sont parfois assez intéressants) sans trouver quelque chose qui se rapporte à ma question.

    Tout au plus, j'ai trouvé en juillet 2014 le lien suivant:

    http://www.developpez.net/forums/d14...to-completion/

    Le sujet (qui n'est pas résolu) traite en effet d'un autocomplete combobox où les problèmes sont principalement le filtre et l'affichage de la liste.

    Ma question est je l'espère plus simple....
    Elle consiste à déterminer si on peut dynamiquement coller l'un à l'autre un textField et un label en faisant croire qu'il s'agit d'un seul et même contrôle.
    L'encodage ne se faisant que dans le textField, il suffit en fait qu'il soit à chaque entrée ou suppression de caractère redimensionné en fonction de son contenu.

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Tu peux sans problème : tout va se jouer au niveau du conteneur parent qui va faire la mise en page et au niveau du CSS/Style pour enlever les bordures, marges et espaces inutiles autour des contrôles.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Bah, comme je l'ai sous-entendu dans mon message initial, le problème est que mon textfield ne se redimensionne pas en fonction de son contenu.
    Pour ce qui est d'enlever le bord, ça devrait le faire.

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Oui mais il ne te suffit pas d'ajouter ton TextField a l’écran et d’espérer que ça se fasse tout seul. Tu dois créer un nouveau contrôle parent, gérer la mise en page et faire des repositionnement / redimensionnements si nécessaire. Va falloir que tu fournisses du cote a un moment ou a un autre qu'on voit ce que tu as déjà tenté.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    un défi ?

    Mets moi au moins sur la piste...
    Est-ce que mon idée de HBox en parent te parait tenir la route ?

  8. #8
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Je préfère Region ça permet d’éviter l’héritage tout en permettant de faire le layout a mano dans layoutChildren()
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Bonjour,

    Voici un bout de code qui réalise ce que je veux faire...

    La méthode n'y est peut-être pas mais le résultat bien.
    Il reste encore à enlever via CSS le cadre autour du TextField et à remplacer la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    impl_processCSS(true)
    qui est deprecated mais qui me permet de calculer la largeur exacte du texte tapé dans mon textField.


    C'est un exemple simpliste qui ne fonctionne que si vous tapez B puis E puis R puis T....

    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
     
    HBox monHbox = new HBox();
    final TextField monTxt= new TextField();
     
    monTxt.setPrefWidth(12);//Largeur de départ de mon TextField pour qu'on voit le curseur
     
    final Label lblComplement = new Label();
    lblComplement.setTextFill(Color.GREY);
    lblComplement.setTranslateY(3);// juste pour que le label soit alligné verticalement au textField
     
     
    monTxt.textProperty().addListener(new ChangeListener<String>() {
        @Override
        public void changed(ObservableValue<? extends String> observable,
                String oldValue, String newValue) {
     
        	switch (newValue){
        	case "B":
        		lblComplement.setText("ARBARA");
        		break;
        	case "BE":
        		lblComplement.setText("NOIT");
        		break;
        	case "BER":
        	lblComplement.setText("NARD");
        	break;
        	case "BERT":
        		lblComplement.setText("RAND");
        		break;
     
        	default:
        		lblComplement.setText("");
        		break;
     
     
        	}
        	Label bidon = new Label();
        	bidon.impl_processCSS(true);// todo : remplacer cette méthode qui fonctionne encore très bien...
     
        	bidon.setText(newValue);
        	System.err.println(bidon.toString() + bidon.prefWidth(-1)+"/"+ bidon.prefHeight(-1));
     
        	monTxt.setPrefWidth(bidon.prefWidth(-1)+ 12);
     
        }
    });
     
     
    monHbox.getChildren().addAll(monTxt, lblComplement);
     
    final AnchorPane root = new AnchorPane();
    	root.getChildren().addAll( monHbox);
    ...
    }

Discussions similaires

  1. Probleme Voyageur de Commerce - Recuit Simulé
    Par dinver dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 21/06/2009, 22h26
  2. Développpement d'une application de simulation .....
    Par dada5455 dans le forum OpenGL
    Réponses: 6
    Dernier message: 14/12/2003, 10h27
  3. simuler l'execution d'un message
    Par gaut dans le forum C
    Réponses: 14
    Dernier message: 24/07/2003, 23h01
  4. Simuler un coup de molette sur un memo...
    Par dynobremo dans le forum Composants VCL
    Réponses: 2
    Dernier message: 28/02/2003, 11h31
  5. Simulation de transmission de paquet entre différent réseaux
    Par MelloW dans le forum Développement
    Réponses: 2
    Dernier message: 12/07/2002, 19h51

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