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 :

[Swing] Créer un JComboBox avec champ supplémentaire caché


Sujet :

AWT/Swing Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 124
    Points : 159
    Points
    159
    Par défaut [Swing] Créer un JComboBox avec champ supplémentaire caché
    Bonjour!

    J'ai un problème tout bête, je souhaite créer un ComboBox avec une valeur affichée (une simple chaine) et une seconde cachée (un numéro). La valeur cachée correspond à une clé primaire dans ma base de données.

    Est-ce possible de faire ça? Je crois qu'on peut redéfinir certains composants d'un comboBox comme le "cell renderer", enfin c'est ce que j'ai cru comprendre en cherchant sur le net.

    Le composant JComboBoxest composéde quatre éléments principaux :
    •Un modèle de données(data model)qui enregistre les éléments et qui
    doit implémenter l'interface ComboBoxModelqui est une sous-interface
    de ListModel. Par défaut, le composant JComboBoxutilise la classe
    DefaultComboBoxModel.
    •Un afficheur d'élément(cell renderer)qui est chargéde la représentation visuelle de chaque élément de la liste (l'élément est également appelécellule). Ce composant doit implémenter l'interface ListCellRenderer(comme pour le composant JList).
    •Un éditeurpour les valeurs introduites par l'utilisateur (si le composantest éditable). Par défaut JComboBoxutilise un champ de type JTextFieldqui possède un éditeur par défaut pour la ligne de texte.
    •Un gestionnaire clavier(keystroke manager)pour réagir aux touches pressées par l'utilisateur (si le composant n'est pas éditable). Ce composant doit implémenter l'interface KeySelectionManager(interface interne de JComboBox).
    Je ne sais pas si l'un de vous a une idée, peut-être en se basant sur ce qui est décrit là.

    J'ai une idée sinon c'est de créer une seconde combobox invisible qui ne contiendrait que les PK, mais je préfèrerais pouvoir insérer 2 éléments dans ma combobox et en cacher un.

    Merci d'avance pour votre aide!

  2. #2
    Membre actif Avatar de Lethal
    Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 194
    Points : 227
    Points
    227
    Par défaut
    c'est pas compliqué.

    Ton modèle de liste contiendra un vecteur d'objets ( par ex: Element).
    Dans cet objet tu aura une chaine et un int.

    Tu dois seter un renderer par défaut à ta combobox pour ce type d'objet.
    C'est à dire qu'a chaque fois que la combobox devra afficher un objet Element (tout le temps ds ton cas) elle fera appel au renderer.

    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
    public class ComboBoxElementRenderer extends JLabel implements ListCellRenderer {
            public ComboBoxScaleRenderer() {
                setOpaque(true);
                setHorizontalAlignment(LEFT);
                setVerticalAlignment(CENTER);
            }
     
            public Component getListCellRendererComponent(
                JList list,
                Object value,
                int index,
                boolean isSelected,
                boolean cellHasFocus)
            {
                // on récupère l'objet element à afficher
                Element element = (Element)value;
                // on récupère la chaine à afficher;
                String str = element.getChaine();
     
                if (isSelected) 
                {
                    setBackground(list.getSelectionBackground());
                    setForeground(list.getSelectionForeground());
                }
                else 
                {
                    setBackground(list.getBackground());
                    setForeground(list.getForeground());
                }
     
                this.setText(str);
     
                return this;
            }
        }
    Dans ton cas je ne suis pas certains qu'il est nécessaire d'avoir un modèle de données. Il te suffit de créer ton combobox en lui passant un vecteur d'objet Element comme paramètre du constructeur.

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

    Informations forums :
    Inscription : Février 2006
    Messages : 124
    Points : 159
    Points
    159
    Par défaut
    Je vais étudier ce que tu proposes mais effectivement avant de m'endormir j'ai trouvé une solution bien plus simple et qui devrait suffir.

    Je crois que le mieux c'est que je fasse une classe héritant de JComboBox avec un simple tableau d'entier, ça donne quelque chose dans ce goût là (je l'écris en live là alors y'a surement des erreurs):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class maComboBox extends ComboBox{
             private int [] ide;
     
             public maComboBox(String [] liste, int[] ide){
                     super(liste);
                     for(int i = 0; i < ide.length; i++){
                          this.ide[i] = ide[i];
                      }
             }
     
             public int getIde(){
                     return ide[this.getSelectedIndex()];
             }
    }
    Merci beaucoup en tous cas, je crois que je vais avoir pas mal de peine à comprendre ce que tu as écrit parce que je débute encore mais je finirai bien pas y parvenir!

Discussions similaires

  1. Impossible de créer une table avec champs many2one ou one2many !
    Par rugueux dans le forum Odoo (ex-OpenERP)
    Réponses: 0
    Dernier message: 16/06/2011, 20h16
  2. [CakePHP] relation HABTM avec champs supplémentaires
    Par Lolo19 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 23/04/2010, 09h50
  3. Créer une Table avec une icone cachée
    Par stfanny31 dans le forum Débuter
    Réponses: 8
    Dernier message: 08/06/2008, 20h25
  4. [Swing] JComboBox avec alignement
    Par Invité dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 22/11/2006, 22h43
  5. Réponses: 2
    Dernier message: 26/04/2006, 08h53

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