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 :

ArrayList et JComboBox


Sujet :

Composants Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Par défaut
    Bonjour à tous, il y a un truc qui m'échappe dans le code ci-dessous :

    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
            JComboBox choix_projet = new JComboBox();
     
            List listefinale = new ArrayList();
     
                List l = new ArrayList();
                    l.add("essai 1");
                    l.add("essai 2");                
                List l2 = new ArrayList();
                    l2.add("essai a");
                    l2.add("essai b");
     
            listefinale.add(l);
            listefinale.add(l2);
     
            choix_projet.addItem(listefinale.get(0));
            choix_projet.addItem(listefinale.get(1));
     
     
            System.out.println(choix_projet.getItemAt(1));
    Ca m'affiche [essai a, essai b] ce qui est logique, mais comment afficher juste "eesai b" ?

    Merci d'avance pour votre aide

  2. #2
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    C'est logique ça t'affiche la liste L2 qui est l'élément à l'index 1 de ta combobox.

    si tu veux que choix_projet.getItemAt(1) te renvoie "essai b" il faut construire ta combobox comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    choix_projet.addItem("essai a");
    choix_projet.addItem("essai b");

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Par défaut
    tu as une liste dans une autre liste donc c'est normal que ça te renvoie les 2 valeurs de la liste.
    pour n'afficher que "essai b" tu dois prendre cette valeur dans la liste qui se trouve dans l'autre comme ça :

    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
    JComboBox choix_projet = new JComboBox();
     
    List<List> listefinale = new ArrayList<List>();
     
    List l = new ArrayList();
    l.add("essai 1");
    l.add("essai 2");
    List l2 = new ArrayList();
    l2.add("essai a");
    l2.add("essai b");
     
    listefinale.add(l);
    listefinale.add(l2);
     
    choix_projet.addItem(listefinale.get(0));
    // dans ce cas tu ne met que la valeur "essai b" dans ton item et pas la liste contenant les 2.
    choix_projet.addItem(listefinale.get(1).get(1));
     
    System.out.println(choix_projet.getItemAt(1));
    sinon si tu veux garder une liste dedan tu dois transtyper ton objet récupéré en liste et récupérer la valeur de cette liste :

    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
    JComboBox choix_projet = new JComboBox();
     
    List<List> listefinale = new ArrayList<List>();
     
    List l = new ArrayList();
    l.add("essai 1");
    l.add("essai 2");
    List l2 = new ArrayList();
    l2.add("essai a");
    l2.add("essai b");
     
    listefinale.add(l);
    listefinale.add(l2);
     
    choix_projet.addItem(listefinale.get(0));
    choix_projet.addItem(listefinale.get(1));
    // Tu récupère le 2ème index de ta liste que tu écris directement.
    System.out.println(((List)choix_projet.getItemAt(1)).get(1));

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Par défaut
    Merci pour ces explications ,

    il reste cependant un point à éclaircir : comment faire pour n'afficher dans la combobox le premier élément de ma liste l ou l2.

    Car là j'ai [essai1, essai2] et [essai a, essai b] d'affichés

    merci

  5. #5
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Soit tu surcharges la méthode toString() de tes listes soit tu écris un renderer pour ta combobox.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Par défaut
    Rebonjour,

    j'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                            choix_projet.setRenderer(new DefaultListCellRenderer() {
                                @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
                                    int selectedIndex = ((Integer)value).intValue();
                                    super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
                                    setText(((List)choix_projet.getItemAt(selectedIndex)).get(1));
                                    return this;
     
                                }
                            });
    Mais il me met une erreur sur le setText alors qu'il y en a pas si je mets quelque chose de statique comme setText("exemple")

    Une idée de où ca pourrait venir ?

    merci

  7. #7
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    C'est quoi l'erreur ?

  8. #8
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    As-tu essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    setText( ((List<String>)choix_projet.getItemAt(selectedIndex)).get(1) );
    //ou
    setText( (String)((List)choix_projet.getItemAt(selectedIndex)).get(1) );

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Par défaut
    En fait, c'est plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                            choix_projet.setRenderer(new DefaultListCellRenderer() {
                                @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
                                    super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
                                    setText(((List)choix_projet.getItemAt(index)).get(1).toString());
                                    // setText("dd");
                                    return this;                               
                                }
     
                            });
    Erreur affichée :

    Exception occurred during event dispatching:
    java.lang.NullPointerException

  10. #10
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Alors c'est getItemAt(index), get(1) ou toString() qui retourne nul ?
    d'où ma proposition précédente qui éliminer toString().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (String)((List)choix_projet.getItemAt(selectedIndex)).get(1)

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Par défaut
    Citation Envoyé par ngpub Voir le message
    As-tu essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    setText( ((List<String>)choix_projet.getItemAt(selectedIndex)).get(1) );
    //ou
    setText( (String)((List)choix_projet.getItemAt(selectedIndex)).get(1) );
    Je viens d'essayer et toujours des erreurs. Quand je mets la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     int selectedIndex = ((Integer)value).intValue();
    j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Exception occurred during event dispatching:
    java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.Integer
    Si je ne la mets pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Exception occurred during event dispatching:
    java.lang.NullPointerException

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Par défaut
    Citation Envoyé par ngpub Voir le message
    Alors c'est getItemAt(index), get(1) ou toString() qui retourne nul ?
    d'où ma proposition précédente qui éliminer toString().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (String)((List)choix_projet.getItemAt(selectedIndex)).get(1)
    Non je suis sûr que getItemAt(index), get(1) est "rempli" (jai fait un System.out.println(((List)choix_projet.getItemAt(1)).get(1)); et il y a quelque chose dedans )

    Par contre là l'erreur qu'il m'affiche "java.util.ArrayList cannot be cast to java.lang.Integer", il me la met pour la ligne quand je mets "int selectedIndex = ((Integer)value).intValue();"

    suis perdu

  13. #13
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    'value' c'est l'objet que tu as ajouté avec 'choix_projet.addItem(listefinale.get(0))'
    donc c'est une liste, d'où l'erreur ClassCastException.

    Il faut tout tester pour trouver l'objet qui est nul.
    genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("value : "+ value);

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Par défaut
    Yes, tu as raison

    alors voici ce que ça me donne :

    value : [1, Projet 1 proprio, 1]
    list : javax.swing.plaf.basic.BasicComboPopup$1[ComboBox.list,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=50331944,maximumSize=,minimumSize=,preferredSize=,fixedCellHeight=-1,fixedCellWidth=-1,horizontalScrollIncrement=-1,selectionBackground=javax.swing.plaf.ColorUIResource[r=178,g=180,b=191],selectionForeground=javax.swing.plaf.ColorUIResource[r=0,g=0,b=0],visibleRowCount=8,layoutOrientation=0]
    index : -1
    value : [2, Projet 2 proprio, 1]
    list : javax.swing.plaf.basic.BasicComboPopup$1[ComboBox.list,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=50331944,maximumSize=,minimumSize=,preferredSize=,fixedCellHeight=-1,fixedCellWidth=-1,horizontalScrollIncrement=-1,selectionBackground=javax.swing.plaf.ColorUIResource[r=178,g=180,b=191],selectionForeground=javax.swing.plaf.ColorUIResource[r=0,g=0,b=0],visibleRowCount=8,layoutOrientation=0]
    index : -1
    value : [3, Projet 3 proprio, 1]
    list : javax.swing.plaf.basic.BasicComboPopup$1[ComboBox.list,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=50331944,maximumSize=,minimumSize=,preferredSize=,fixedCellHeight=-1,fixedCellWidth=-1,horizontalScrollIncrement=-1,selectionBackground=javax.swing.plaf.ColorUIResource[r=178,g=180,b=191],selectionForeground=javax.swing.plaf.ColorUIResource[r=0,g=0,b=0],visibleRowCount=8,layoutOrientation=0]
    index : -1
    Apparemment le value est "bon" : c'est bien un ArrayList. Le soucis est de pouvoir afficher le 2 ème élément de chaque ArrayList

    Peut-être un autre indic qui pourrait aider, quand je fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setText(((List)choix_projet.getItemAt(1)).get(1).toString());
    ca fonctionne en me mettant ""Projet 2 proprio". Donc le index (égal à -1) n'est pas le bon indice qui permette de repérer l'item.

    Dans la doc, j'ai trouvé :

    //Get the selected index. (The index param isn't
    //always valid, so just use the value.)
    int selectedIndex = ((Integer)value).intValue();
    et quand je mets cette ligne dans mon code, ça me sort l'erreur :

    java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.Integer

  15. #15
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Pour l'exemple, il n'est pertinent car il n'est pas complet mais ce qu'il veut dire c'est que si tu as besoin d'avoir l'index c'est à toi de le gérer dans tes données.
    D'ailleurs pourquoi veux-tu l'index ?
    Tu as ton objet avec toutes ses valeurs.

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Par défaut
    Oui, tu as raison

    Après avoir fait plusieurs essais, j'ai enfin obtenu ce que je recherchais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
                            choix_projet.setRenderer(new DefaultListCellRenderer() {
                                @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
     
                                    ArrayList liste = ((ArrayList)value);                       
                                    super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
                                    setText(liste.get(1).toString());
     
                                    return this;                               
                                }
     
                            });
    Bon, je sais pas si c'est propre comme méthode mais au moins ça marche

    Un grand merci à toi ngpub pour tes éclaicissements successifs

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

Discussions similaires

  1. JComboBox / ArrayList - valeurs distinctes
    Par dieu08 dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 09/11/2012, 09h29
  2. Renseigner une jComboBox à partir d'une ArrayList
    Par Deallyra dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 22/03/2009, 15h05
  3. Réponses: 6
    Dernier message: 19/07/2007, 13h07
  4. [ STRUTS ][ JSP ][ ArrayList] un lien pour trier
    Par LoulouFifi dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 03/02/2004, 17h24
  5. Couleur d'une JComboBox disabled
    Par ced dans le forum Composants
    Réponses: 6
    Dernier message: 06/01/2004, 15h33

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