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 :

Initialiser une JList composée de checkbox


Sujet :

Composants Java

Vue hybride

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 72
    Par défaut Initialiser une JList composée de checkbox
    Salut à tous,

    j'ai fait une JList avec des checkbox, mais je n'arrive pas à l'initialiser.
    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
    import javax.swing.*;
    import javax.swing.border.*;
    import java.awt.*;
    import java.awt.event.*;
     
    public class JListAvecCheckbox extends JList
    {
        protected static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
     
        public JListAvecCheckbox()
        {
            setCellRenderer(new CheckBoxCellRenderer());
     
            addMouseListener(new MouseAdapter()
            {
                public void mousePressed(MouseEvent e)
                {
                    int index = locationToIndex(e.getPoint());
                    if (index != -1)
                    {
                        JCheckBox checkbox = (JCheckBox) getModel().getElementAt(index);
                        checkbox.setSelected(!checkbox.isSelected());
                        repaint();
                    }
                }
            });
     
        }
     
        protected class CheckBoxCellRenderer implements ListCellRenderer
        {
            public Component getListCellRendererComponent(JList list, Object value, int index,
                                                          boolean isSelected, boolean cellHasFocus)
            {
            	 // Check box renderer
                JCheckBox maCheckbox = (JCheckBox) value;
     
                maCheckbox.setEnabled(true);
                maCheckbox.setBorderPainted(true);
     
                return maCheckbox;
            }
        }
     
     
        public static void main(String args[])
        {
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().setLayout(new BorderLayout());
     
            JListAvecCheckbox cbList = new JListAvecCheckbox();
     
            Object[] checkboxArray = new Object[3];
            checkboxArray[0] = new JCheckBox("a");
            checkboxArray[1] = new JCheckBox("z");
            checkboxArray[2] = new JCheckBox("e");
     
            cbList.setListData(checkboxArray);
     
            cbList.setSelectedValue("a", false);
     
            frame.getContentPane().add(cbList);
            frame.pack();
            frame.setVisible(true);
        }
    }
    Comment lui dire de sélectionner la check box "a" par exemple?
    (cbList.setSelectedValue("a", false); ne fonctionne pas)
    Merci

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    C'est parce que le checkbox ne sert que de modèle de dessin : c'est un renderer, dans le vocabulaire swing.

    Une approche possible pour résoudre ça est de simuler, par ton modèle de liste, le clic / déclic souris : le renderer renvoie une chcklist cochée ou non. Un peu subtil.

    Ou bien tu peux faire un panneau dans un JScrollPane, panneau organisé avec un GridLayout contenant tous tes checkbox qui se gèrent tout seul. Nettement plus facile, mais ce n'est plus une JList au sens orthodoxe.

  3. #3
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Ou une JTable à une colonne avec un couple renderer/editor ou encore un truc comme çà: http://www.jroller.com/santhosh/date/20050607 ou encore ça: http://www.jroller.com/santhosh/date...ith_checkboxes

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 72
    Par défaut
    Merci Giffftane et sinok.

    Je suis finalement restée sur une JList car je ne suis pas très à l'aise avec les JTables.
    J'ai créé une HashMap(String, JCheckBox) qui tient à jour l'état selected ou non des checkbox.


    Une approche possible pour résoudre ça est de simuler, par ton modèle de liste, le clic / déclic souris : le renderer renvoie une chcklist cochée ou non. Un peu subtil.
    Comme je n'ai pas besoin de connaitre les valeurs cochées en temps réel, cette solution fonctionne.

    Merci des conseils

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

Discussions similaires

  1. Initialisation d'un composant d'une forme
    Par Invité dans le forum C++Builder
    Réponses: 4
    Dernier message: 03/07/2012, 21h52
  2. affichage des composants 2D dans une JList?
    Par ilias20 dans le forum Composants
    Réponses: 5
    Dernier message: 27/03/2010, 11h18
  3. créer une JList composée de jProgressBar
    Par Neilime05 dans le forum Composants
    Réponses: 7
    Dernier message: 06/10/2009, 14h40
  4. Comment initialiser une liste de composants avec une boucle ?
    Par EricSid dans le forum Composants VCL
    Réponses: 5
    Dernier message: 06/04/2005, 18h46
  5. Réponses: 3
    Dernier message: 17/12/2003, 11h26

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