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

Composants Java Discussion :

[JComboBox] rechercher des élements


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 29
    Par défaut [JComboBox] rechercher des élements
    bonjour !
    y a qq temps j'avais demander comment faire pour que quand l utilisateur tape un mot, le mot lexicographiquement le plus proche de ce qu 'il tape, se selectionne automatiquement (surligné en bleu) parmis les element de la JComboBox.
    une personne m'avais répondu "ça le fait tout seul." et j 'ai constater que ça le faisait pas tout seul.... Donc je ne sais pas, il y a peut etre qq chose a mettre a "true" sur la JComboBox...? ou peut etre qu il faut finalement le faire a la main ?
    D autre part, j'utilise plusieur fois la meme liste de valeur pour differente JComboBox donc j'utilise une "DefaultComboBoxModel" mais je me suis egalement aperçu que les differentes JComboBox auquelles je l applique prenne le meme comportement et entre autre selectionne les meme valeur des qu on les change qq part... y a pas moyen d'eviter ce changement de groupe ?
    Et enfin j aimerais savoir si qq part il y aurais un bon tutorial sur swing...?
    Merci d avance pour vos réponses !!!

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 29
    Par défaut
    J'ai trouvé qq chose qui ressemble un peu a ce que je veux faire mais je comprend pas des masse comment l utiliser... le KeySelectionManager
    Est ce que qq1 pourrait m expliquer un peu comment ça marche...?

  3. #3
    Membre émérite Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Par défaut
    D'apres ce que j'ai compris en lisant la javadoc ... c'est une interface que tu dois implementer.

    Quand tu rentres un caractere, je pense que c'est cette methode qui va etre appeler... donc ce que tu dois daire, c'est renvoyer l'element qui correspond le mieux a ton caractere ... par exemple si tu tapes 'a' et que tu as comme choix 'autruche','chien','renard' et bien ta methode devra renvoyer 1.

    Je sais pas si j'ai ete tres clair ... mais ton travail est :

    soit de trouver une implementation qui fait ce que tu veux
    soit faire ta propre implementation.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 29
    Par défaut
    c'est a peu prés ce que j'ai fait mais... j'ai un autre petit probleme, je mets un KeyAdapter justement pour récuperer les caracteres tapés (public void keyTyped) mais il ne rentre pas dans la fonction...
    voila ce que je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    JComboBox box = new JComboBox();
     
    		ecouteurBox = new KeyAdapter() {
    			public void keyTyped(KeyEvent e) {
    				System.out.println("passage");
    				int index;
    				JComboBox box = (JComboBox)e.getSource();
    				index = box.getKeySelectionManager().selectionForKey(e.getKeyChar(), box.getModel());
    				System.out.println("passage : " + index);
    				box.setSelectedIndex(index);
    			}
    		};
     
    box.addKeyListener(ecouteur);
    et qd je tape une lettre bin ça fait rien du tout

  5. #5
    Membre émérite Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Par défaut
    A mon avis, c'est pas comme ca qu'il faut faire ... mais plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TaComboBox.setKeySelectionManager(new TonKeySelectionManager())

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 29
    Par défaut
    en effet...
    mais de toute façon la il ne me fé meme pas de System.out.println... donc il ne rentre pas dans la fonction...

  7. #7
    Membre émérite Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Par défaut
    c'est quoi l'implementation de ton KeySelectionManager ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 29
    Par défaut
    pour l instant j en ai pas vraiment... il y a plusieur chose qui me laisse perplexe... la fonction prend en entrée uniqument un caractere et j aurais plutot pensé a une string... en résumé je pige pas des masse comment ça fonctionne...
    j aimerais pour l instant surtout faire fonctionner le keylistener... j'ai aucun affichage de "passage" et ça me chagrine...

  9. #9
    Membre émérite Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Par défaut
    Mais je ne vois pas pourquoi tu aurais besoin d'un KeyListener ... la combobox le fait pour toi .... il faut juste que tu lui dise comment faire la selection a l'aide du KeySelectionManager ... pas besoin de te faire chier avec un KeyListener...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 29
    Par défaut
    hmmmm...
    ok...
    je vais voir si j arrive a m ensortir de cette maniere alors...
    mais bon en attendant C pas normal que le keylistener foire comme ça

  11. #11
    Membre émérite Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Par défaut
    Bon, pour me plonger un peu plus dans ton probleme, j'ai coder une petite combobox ... et ca fait part defaut ce que tu veux ... je ne vois pas ton probleme.

    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
    import javax.swing.* ;
     
    public class TestJComboBox
    {
        public static void main(String [] args)
        {
     
    	DefaultComboBoxModel model = new DefaultComboBoxModel() ;
    	model.addElement("autruche") ;
    	model.addElement("chien") ;
    	model.addElement("dinde");
    	model.addElement("elephant");
     
    	JFrame f = new JFrame() ;
    	JComboBox cb = new JComboBox(model) ;
    	f.getContentPane().add(cb) ;
    	f.pack() ;
    	f.show() ;
        }
     
    }
    et bien quand j'appuie sur c ... et bien c'est chien qui est selectionne ...

  12. #12
    Membre émérite Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Par défaut
    peut-etre que tu veux une combobox editable comme dans cette exemple http://java.sun.com/docs/books/tutor...oBoxDemo2.jnlp

    Dans ce cas la, a mon avis, il faut que tu implementes ton propre KeySelectionManager ... sauf si part hasard il en existe deja un ...

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 29
    Par défaut
    en effet ma combobox est editable. elle contient 2 mille element a peu prés, il me faudrait quelque chose d un peu plus précis que le premier caractere... voila pourquoi j ai un peu du mal a comprendre comment je vais pouvoir utiliser le KeySelectionManager s'il ne fonctionne que pour un caractere...

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 29
    Par défaut
    bon, disons que je fais la chose moi meme "a la main". pour cela j'aimerais utiliser un keyListener. quand il tape qq chose, je regarde la valeur contenu et je fais une recherche dichotomique dans ma liste d'element (8 tests pour 2000 elements). une fois que j ai trouvé l element le plus proche de celui que je recherche, je le "surligne"... mon probleme est que je ne sait pas comment faire se surlignage... java le fais tout seul qd la JCombobox n est pas editable mais dans mon cas comment dois je faire ?

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 29
    Par défaut
    bon, bin si ça interesse quelqu'un, la solution a mon probleme se trouve a cette adresse :
    http://www.orbital-computer.de/JComboBox/

  16. #16
    Membre confirmé
    Inscrit en
    Mars 2002
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 66
    Par défaut
    Salut, en effet, ton lien m'aurais aidé, mais comme il ne marche plus...

    Voila donc, j'ai le même problème! J'ai trouvé la solution ici:
    http://jug.org.ua/wiki/display/JavaA...ple+Keystrokes

    Sauf que voila, mon problème s'arrête pas la.

    Mon JComboBox est dans une JTable (il implémente donc TableCellRenderer) et le même JComboBox est utilisé avec un TableCellEditor, pour me permettre de changer sa valeur directement dans le tableau.

    Donc, a chaque keyStroke, la fonction de mon KeySelectionManager est appelée, suivi d'un certain DefaultKeyboardFocusManager qui appelle une série de méthode et renvoyer le tout a mon TableCellEditor.selectWithKeyChar(char), qui lui appelle setSelectedIndex() par lui même et le tout pour finir par un MonTableModel.setValueAt(int).

    J'aimerais bien bypasser cet automatisme, si quelqu'un a une idée...

  17. #17
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut Cherche
    Tapes autocomplétion Jcombobox dans google

  18. #18
    Membre confirmé
    Inscrit en
    Mars 2002
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 66
    Par défaut
    euh... si tu sait pas quoi dire, dit rien

    Pour les autres qui veulent bien lire mon post au complet, mettre un JComboBox dans un frame ca fonctionne. Ce qui fonctionne pas, c'est mettre une liste de JComboBox en tant que TableCellEditor et TableCellRenderer dans une JTable.

  19. #19
    Membre confirmé
    Inscrit en
    Mars 2002
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 66
    Par défaut
    Bon pour ceux que ca peut intéresser, en utilisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extends AbstractCellEditor implements TableCellEditor
    a la place de:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extends DefaultCellEditor
    ca fonctionne...

  20. #20
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Par défaut
    Bonjour,

    Si cela peut aider...

    Le programme ci-dessous propose un JComboBox initialisé avec les lignes d'un fichier texte. Je l'ai essayé avec la liste des 4036 chef-lieux de cantons français proposée par l'INSEE.

    Quand l'utilisateur tape une suite de lettres dans le composant (par exemple "ouville"), la liste est immédiatement réduite aux noms contenant la suite de lettres en question (dans ce cas : Trouville, Sartrouville et 2 autres). Cela permet d'affiner un un choix progressivement.

    Cordialement,

    Nicolas

    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
    import java.awt.event.*;
    import java.io.*;
    import java.util.Scanner;
    import javax.swing.*;
     
    // Nicolas_75
    // le 24 août 2008
    // pour http://www.developpez.net/forums/d26314/java/interfaces-graphiques-java/awt-swing/composants-standards/jcombobox-rechercher-elements/
     
    public class SmartJComboBox {
     
        public static void main(String[] args) {
            try {
     
                // création de la fenêtre principale :
                final JFrame frame = new JFrame("SmartJComboBox (4036)") ;
     
                // lecture du fichier texte et remplissage d'un tableau de
                // 4036 noms :
                String NAMES_FILE = "C:\\4036 chef-lieux de canton.txt";
                // source INSEE
                // http://www.insee.fr/fr/methodes/nomenclatures/cog/telechargement.asp
                final String[] names = new String[4036];
                Scanner scanner = new Scanner(new File(NAMES_FILE));
                int i=0;
                while (scanner.hasNextLine()) {
                    names[i] = "["+(i+1)+"] "+scanner.nextLine();
                    i++;
                }
     
                // construction du modèle initial contenant
                // les 4036 noms :
                DefaultComboBoxModel model = new DefaultComboBoxModel() ;
                for (String name : names) {
                    model.addElement(name);
                }
     
                // création de la JComboBox sur la base du 
                // modèle précédent :
                final JComboBox cb = new JComboBox(model) ;
                cb.setEditable(true);
     
                // ajout d'un Listener sur les évènements clavier
                // si le contenu du champ texte est modifié, la liste des
                // choix possibles est limitée aux noms contenant la 
                // chaîne entrée par l'utilisateur
                cb.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() {
                    public void keyReleased(KeyEvent e) {
                        // en cas d'appui sur une touche au sein
                        // de la zone de texte...
                        // on récupère le texte entré :
                        String text2 = (String) cb.getEditor().getItem();
                        // on crée un nouveau modèle...
                        DefaultComboBoxModel model2 = new DefaultComboBoxModel() ;
                        // ... qui ne contient que les zones contenant le texte entré :
                        for (String name : names) {
                            if (name.contains(""+text2)) {
                                model2.addElement(name);
                            }
                        }
                        // on affiche dans le titre de la fenêtre le nb de choix possibles :
                        frame.setTitle("SmartJComboBox ("+model2.getSize()+")");
                        // on met en oeuvre le nouveau modèle :
                        cb.setModel(model2);
                        // on ré-affiche le texte entré par l'utilisateur après le changement de modèle :
                        cb.getEditor().setItem(text2); 
                        // on force l'affichage de la liste :
                        cb.setPopupVisible(true); 
                    }
                } );
     
                // affichage de la fenêtre principale :
                frame.add(cb) ;
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.pack() ;
                frame.setLocationRelativeTo(null); // pour centrer sur l'écran
                frame.setVisible(true);
     
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    }

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Recherche d'élements dans des repertoires
    Par Dartounet dans le forum ASP.NET
    Réponses: 3
    Dernier message: 05/06/2014, 14h21
  2. Réponses: 4
    Dernier message: 15/04/2014, 14h04
  3. Réponses: 3
    Dernier message: 20/10/2009, 18h14
  4. recherche des algorythmes pour images 2d
    Par exxos dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 24/05/2002, 13h46
  5. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 22h18

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