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

AWT/Swing Java Discussion :

Probleme de ListCellRenderer


Sujet :

AWT/Swing Java

Vue hybride

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 34
    Par défaut Probleme de ListCellRenderer
    J'aime bien l'algo, les trucs bien propres et aux normes, ça fait quelques années deja que je code dans à peu près tous les langages modernes et utilisés, j'ai toujours aimé relever les défis, mais la je dois avouer que j'ai du mal avec JAVA... c'est un peu comme SEGA, c'est plus fort que toi :p


    Pour en venir au petit souci :

    Alors je développe donc une application de type "application de gestion"

    Et bien entendu dans cette application, j'ai des espèces de formulaires.

    Comme tout formulaire j'ai des jCombo des jList... des jTout... et j'en passe

    Dans mes combo et mes list j'ai des items issus de requetes à ma BDD embarquée (HSQLDB)

    avant de poster j'ai fait des petits recherches sur notre ami commun Google, et bien entendu dans ce même magnifique forum (qui m'a permis de sortir de certaines situations délicates)

    J'ai trouvé des sujets dont les gens avaient apparament le même but que moi, c'est à dire :

    Extraire d'une requete banale, une liste 2 valeurs bien souvent (int ID, String VALEUR)

    Bien entendu dans la listBox ou comboBox on veut afficher le String (uniquement).

    Lors d'un click sur un item on se sert de l'ID associé à ce String pour en faire quelque chose (peu importe quoi d'ailleurs...)

    La plupart des réponses que j'ai pu lire c'est : sers toi d'un renderer, sers toi d'un listCellRenderer, sers toi d'un defaultListCellRenderer... à force je me suis douté de quoi il fallait se servir :p

    L'inconvénient, c'est que je n'arrive pas trop à saisir comment ça marche exactement (avant quand j'étais petit et que je fesais du VB.NET il y avait dans les listes une colonne invisible associée ou l'on pouvait stocker la clé, petite fontionnalité bien pratique parfois....)

    j'ai aussi lu des réponses style : redéfinis la méthode toString()... mais de qui de quoi ou comment pourquoi ?

    Pour le moment je me suis fait une petite classe coupleValeurs que voici :

    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
    public class CouplesValeurs {
     
        private String lib;
        private int id;
     
     
        /** Creates a new instance of CouplesValeurs */
        public CouplesValeurs() {
        }
     
        public String getLib() {
            return lib;
        }
     
        public void setLib(String lib) {
            this.lib = lib;
        }
     
        public int getId() {
            return id;
        }
     
        public void setId(int id) {
            this.id = id;
        }
     
        public String toString()
        {
            return lib;
        }
     
     
    }
    Bon une classe assez basique en somme il n'y a que des accésseurs... et j'ai rajouté la méthode toString() au kazoo (cas ou) :p

    Donc j'ai d'un coté mes objets que je peux représenter sous forme de couple, d'un autre coté mes Combo (moult mais en vain..)

    Ensuite pour faire le lien entre les 2, c'est a dire mettre mes Objets dedans et n'affichant que le String, et en obtenant la valeur associée lorsque je sélectionne un élément... je lutte depuis 1 jour et 1/2... et franchement ma rentabilité et mon amour prorpre en prennent un coup :p

    Sur mes combo et mes list j'ai deja des DefaultComboBoxModel et DefaultListModel faut encore y associer des default(List/Combo)CellRenderer ?

    Enfin bon si quelqu'un peut me donner quelques conseils... ce ne sera pas de refus

    Thanks a lot

    Cat

  2. #2
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Je ne comprends pas vraiment le problème.
    Tu n'as pas besoin de renderer grâce au toString().
    S'il y a bien un truc que je ne fais quasi jamais ce sont des ListCellRenderer. A moins d'avoir besoin de faire un choix de couleurs par exemple (c'est plus sympa dans la combo d'avoir "Bleu" puis un carré de cette couleur que d'avoir simplement le texte).

    Tu met dans ta JComboBox la liste de CouplesValeurs et quand tu fais maCombo.getSelectedItem() tu récupèreras le CouplesValeurs correspondant.

    Ou bien ?

    Sinon tu peux utiliser le binding en utilisant les librairies JGoodies Binding ou Spring (mais ça demandera un investissement de départ assez important pour comprendre les mécanismes).

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 34
    Par défaut
    Citation Envoyé par natha
    Je ne comprends pas vraiment le problème.
    Tu n'as pas besoin de renderer grâce au toString().
    Selon toi j'ai juste a affecter à la combo un tableau de CouplesValeurs et cela va automatiquement m'afficher la méthode toString() et lors de la selection d'un élément je pourrai en récupérer l'ID ?

  4. #4
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par catwomanette
    Selon toi j'ai juste a affecter à la combo un tableau de CouplesValeurs et cela va automatiquement m'afficher la méthode toString() et lors de la selection d'un élément je pourrai en récupérer l'ID ?
    Tout à fait. Mieux, tu récupèreras l'objet CouplesValeurs.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 34
    Par défaut
    écoute je vais tester, j'espère que c'est aussi simple que ça :p

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 34
    Par défaut
    euh je suis passé sur un tout autre genre d'erreur maintenant =(

    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
     
    //dans mes déclarations j'ai :
    protected ResultSet rs;
    protected CouplesValeurs[] cvComboFormePhysique;
     
    //dans mon constructeur j'ai
     public AjoutExperience(Frame owner,String title,boolean modal){
            super(owner,title,modal);
     
            initComponents();
            this.setLocationRelativeTo(this.getParent());
     
            modelComboFormePhysique = new DefaultComboBoxModel();
     
            try
            {
                rs = SQLDataAcces.getResultSet("select LBLFORMEPHYSIQUE from FORME_PHYSIQUE order by LBLFORMEPHYSIQUE");
                int i = 0;
                cvComboFormePhysique = new CouplesValeurs[rs.getFetchSize() + 1];
                System.out.println("la ca passe et le RS a une taille de : " + rs.getFetchSize());
     
                while (rs.next())
                {
                    System.out.println("la ca passe 1");
                    cvComboFormePhysique[i].setIdLib(rs.getString(1));
                    System.out.println("la ca passe 2");
                    cvComboFormePhysique[i].setLib(rs.getString(1));
                    System.out.println("la ca passe 3");
                    modelComboFormePhysique.addElement(cvComboFormePhysique[1]);
                    i++; //c'est juste pour donner l'emplacement de l'object dans la tableau
                }
     
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }        
     
            comboFormePhysique.setModel(modelComboFormePhysique);
     
            comboFormePhysique.setSelectedIndex(-1);
     
        }
    Et voici le rapport de combat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    la ca passe et le RS a une taille de : 1
    java.lang.NullPointerException
    la ca passe 1
    l'erreur m'indique la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cvComboFormePhysique[i].setIdLib(rs.getString(1));
    j'ai pourtant bien l'impression d'avoir tout initialisé =(

  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par catwomanette
    Sur mes combo et mes list j'ai deja des DefaultComboBoxModel et DefaultListModel faut encore y associer des default(List/Combo)CellRenderer ?
    Oui si tu veux en configurer l'apparence ; par exemple :

    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
     
    class CouplesValeursListCellRenderer extends DefaultListCellRenderer {
      private static final String TEXT_PATTERN ="({0}, {1})";
      private static final String TIP_PATTERN ="<html><body>(<b>{0}</b>, <i>{1}</i>)<body></html>";
     
      /** {@inheritDoc}
      */
      @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        String text = null;
        String tip = null;
        if (value instanceof CouplesValeurs) {
          CouplesValeurs couple = (CouplesValeurs)value;
          text = MessageFormat.format(TEXT_PATTERN, couple.getID(), couple.getLib());
          tip = MessageFormat.format(TIP_PATTERN, couple.getID(), couple.getLib());
        }
        setText(text);
        setToolTipText(tip);
        return this; 
      } 
    }
    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

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

Discussions similaires

  1. probleme ListCellRenderer et JComboBox
    Par Sp4ce dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 21/09/2007, 03h17
  2. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07
  3. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01
  4. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  5. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 10h13

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