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

SWT/JFace Java Discussion :

Auto complétion dans un ComboViewer


Sujet :

SWT/JFace Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 14
    Points : 9
    Points
    9
    Par défaut Auto complétion dans un ComboViewer
    Bonjour,

    Je cherche à faire une sorte d'autocomplétion sur un comboViewer.
    Par défaut, pour un ComboViwer, à chaque caractère tapé, la recherche se réinitialise.

    J'ai essayé de faire un nouveau ComboViewer, qui marche bien à la saisie, mais lorsque je change de focus, la valeur affichée n'est pas la bonne (il met la valeur trouvée pour le dernier caractère tapé ).

    Voici mon code, si quelqu'un a une idée pour que la sélection soit bonne, ou si une personne a un meilleur code :
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    import org.eclipse.jface.viewers.ComboViewer;
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.events.FocusEvent;
    import org.eclipse.swt.events.FocusListener;
    import org.eclipse.swt.events.KeyEvent;
    import org.eclipse.swt.events.KeyListener;
    import org.eclipse.swt.widgets.Combo;
    import org.eclipse.swt.widgets.Composite;
     
    /**
     * AutoCompleteComboViewer 
     * permet une meilleur gestion de l'autocomplétion clavier
     * Forcé en read only
     *  *
     */
    public class AutoCompleteComboViewer extends ComboViewer  {
     
        private Combo combo;
     
        private String selection;
     
        private int maxLength = 0;    
     
        public AutoCompleteComboViewer(Composite parent) {
            this(parent, SWT.READ_ONLY | SWT.BORDER);
        }
     
        /**
         * 
         * @param parent
         * @param style => forcé en READ_ONLY
         */
        public AutoCompleteComboViewer(Composite parent, int style) {
        	super(parent,  SWT.READ_ONLY );
            combo = getCombo();
            selection="";
            combo.setVisibleItemCount( 40 );
            combo.addKeyListener( new KeyListener(){
     
                public void keyPressed( KeyEvent pArg0 ) {
                	  if(!"".equals( selection ))
                      {
                          for(String item :  combo.getItems())
                          {
                              if (item.length() > maxLength){
                            	  maxLength = item.length(); 
                              }
                          }
                    	  if (selection.length() >= maxLength){
                    		  selection = "";
                    	  }
                      }    
                    selection=(selection+pArg0.character).toUpperCase();
                }
                public void keyReleased( KeyEvent pArg0 ) {
                    if(!"".equals( selection ))
                    {
                    	int i = 0 ;
     
                        for(String item :  combo.getItems())
                        {
                            if(item.startsWith( selection ))
                            {
                                combo.select( i );
                                listSetSelection(new int[]{i});
                                return;
                            }
                            i++;
                        }
                        //si non trouvé, on réinit
                        selection = (""+pArg0.character).toUpperCase();
                    	int j = 0 ;
     
                        for(String item :  combo.getItems())
                        {
                            if(item.startsWith( selection ))
                            {
                                combo.select( j );
                                return;
                            }
                            j++;
                        }
                    }
                }
     
            });
            combo.addFocusListener( new FocusListener(){
     
                public void focusGained( FocusEvent pArg0 ) {
                    selection="";
                }
     
                public void focusLost( FocusEvent pArg0 ) {
     
                }
     
            });
        }
    }
    Merci

  2. #2
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Une autre solution trouvée : http://sourcezone.wordpress.com/2008...e-comboviewer/

    Certes, ce n'est pas parfait non plus (surtout si on ne clique par sur la sélection, si on perd le focus par une tabulation par exemple, la valeur est changée). A ma connaissance, on ne peut pas faire bien mieux, mais c'est pas si mal.

  3. #3
    Rédacteur/Modérateur

    Avatar de alain.bernard
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Décembre 2011
    Messages
    749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 749
    Points : 5 219
    Points
    5 219
    Par défaut
    Bonjour,

    Une API existe pour mettre en place l'auto-complétion directement sur des champs texte ou des listes déroulantes.
    Je vais bientôt publier un article très complet sur le sujet, en attendant, il existe un petit tuto sur le site de Lars Vogel :

    http://www.vogella.com/articles/Ecli...e_fieldassists

    Alain
    Pas de messages techniques par MP, les forums sont là pour ça.
    Rédacteur d'articles sur la plateforme Eclipse

    N'oubliez pas de consulter les FAQ Eclipse et les cours et tutoriels Eclipse

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

Discussions similaires

  1. [AC-2007] Modifier l'auto complétion dans une liste déroulante.
    Par Swed_Chief dans le forum VBA Access
    Réponses: 3
    Dernier message: 05/05/2015, 15h41
  2. Afficher le résultat d'une auto complétion dans un tableau
    Par smotte761 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 21/09/2011, 13h41
  3. Gérer l'auto-complétion dans un programme C
    Par fatelmout dans le forum Débuter
    Réponses: 7
    Dernier message: 05/04/2011, 21h23

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