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 :

JList ne s'affiche pas


Sujet :

Composants Java

  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 959
    Par défaut JList ne s'affiche pas
    bonsoir

    j'essaie de définir une JList munie de JCheckboxes : une jlist où dans chaque ligne il y a une case à cocher.

    ça ne marche pas : la JList ne s' affiche pas...

    voici mon code :

    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    public class Fen1 {
     
        private JFrame frame;
     
        /**
         * Launch the application.
         */
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        Fen1 window = new Fen1();
                        window.frame.setVisible(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
     
        /**
         * Create the application.
         */
        public Fen1() {
            initialize();
        }
     
        /**
         * Initialize the contents of the frame.
         */
        private void initialize() {
            frame = new JFrame();
            frame.setBounds(100, 100, 345, 220);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().setLayout(null);
     
            JButton btnCoch = new JButton("Coch\u00E9?");
            btnCoch.setBounds(10, 149, 89, 23);
            frame.getContentPane().add(btnCoch);
     
            final JLabel lblIci = new JLabel("ICI");
            lblIci.setBounds(109, 153, 120, 14);
            frame.getContentPane().add(lblIci);
     
            JList list = new JList();
            list.setBounds(10, 11, 310, 127);
     
     
             final CheckListItem apple=new CheckListItem("apple");
             list = new JList(new CheckListItem[] {
                    apple,
                    new CheckListItem("orange"),
                    new CheckListItem("mango"),
                    new CheckListItem("paw paw"),
                    new CheckListItem("banana")});
     
              // Use a CheckListRenderer (see below)
              // to renderer list cells
     
              list.setCellRenderer(new CheckListRenderer());
              list.setSelectionMode(
                 ListSelectionModel.SINGLE_SELECTION);
     
              // Add a mouse listener to handle changing selection
     
              list.addMouseListener(new MouseAdapter()
              {
                 public void mouseClicked(MouseEvent event)
                 {
                    JList list = (JList) event.getSource();
     
                    // Get index of item clicked
     
                    int index = list.locationToIndex(event.getPoint());
                    CheckListItem item = (CheckListItem)
                       list.getModel().getElementAt(index);
     
                    // Toggle selected state
     
                    item.setSelected(! item.isSelected());
     
                    // Repaint cell
     
                    list.repaint(list.getCellBounds(index, index));
                 }
              }); 
     
              btnCoch.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
     
                        if (apple.isSelected()){
                            lblIci.setText("coché");
     
                        }else{
                            lblIci.setText("décoché");
                        }
     
     
     
     
                    }
                });
     
              frame.getContentPane().add(list);
     
        }
     
    }
    voici les classes auxiliaires:

    checkListItem
    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
    class CheckListItem
    {
       private String  label;
       private boolean isSelected = false;
     
       public CheckListItem(String label)
       {
          this.label = label;
       }
     
       public boolean isSelected()
       {
          return isSelected;
       }
     
       public void setSelected(boolean isSelected)
       {
          this.isSelected = isSelected;
       }
     
       public String toString()
       {
          return label;
       }
    }

    et CheckListCellRenderer

    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 CheckListRenderer extends JCheckBox
    implements ListCellRenderer
    {
    /**
         * 
         */
        private static final long serialVersionUID = 1L;
     
    public Component getListCellRendererComponent(
          JList list, Object value, int index,
          boolean isSelected, boolean hasFocus)
    {
       setEnabled(list.isEnabled());
       setSelected(((CheckListItem)value).isSelected());
       setFont(list.getFont());
       setBackground(list.getBackground());
       setForeground(list.getForeground());
       setText(value.toString());
       return this;
    }
    }
    pouvez-vous m'aider?

  2. #2
    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
    Pour faire simple, la nature du composant JList fait qu'il n'est pas prévu pour l'édition. De fait tu ne pourras pas cocher/décocher tes JCheckbox, même si elles sont visibles.

    Je te conseille donc d'utiliser une JTable avec un modèle contenant deux colonnes. Une contenant des booléens et pour laquelle la méthode getColumnClass renvoie Boolean.class, la seconde la donnée à afficher.

    Le fait de renvoyer Boolean.class dans le getColumnClass fera qu'automatiquement, la JTable va afficher ta JCheckBox et en permettre l'édition.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 959
    Par défaut
    salut

    je voulais juste dire que j'ai réussi à faire fonctionner l'exemple qui me posait problème, avec des checklistItem, et ça marche super bien.

    je n'ai pas le code sous la main, le problème ne vient pas de checkListItem ou de checkListRenderer ni du listener mais du JFrame qui les exploite : ça n'est donc pas une grosse modification à faire.

    pour ceux que ça intéresse, je conseille de chercher dans un modeur de recherche "checklistitem, checklistrenderer, java,apple..." et de copier l'exemple, je ne l'ai pas testé mais je suppose qu'il marche.

    n'en déplaise à sinok ...

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 959

  5. #5
    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
    C'est un hack, rien de bien propre, il pose un MouseListener sur la JList, et active ou désactive la CheckBox à chaque clic... C'est sale...

    Si tu veux vraiment une JList pour ça, la façon propre de faire est de procéder de la façon suivante pour la rendre éditable: http://www.jroller.com/santhosh/entr...able_no_jtable

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

Discussions similaires

  1. Item du JLIST ne s'affiche pas
    Par RAKIA dans le forum Composants
    Réponses: 1
    Dernier message: 08/02/2011, 14h38
  2. [JScrollPane] n'affiche pas toute ma JList dynamique
    Par Strab dans le forum Composants
    Réponses: 4
    Dernier message: 01/07/2008, 17h57
  3. JList qui ne veut pas s'afficher
    Par hamham dans le forum Composants
    Réponses: 16
    Dernier message: 29/01/2007, 19h20
  4. Le résultat de Print ne s'affiche pas...
    Par Red Bull dans le forum Langage
    Réponses: 9
    Dernier message: 15/06/2006, 19h56
  5. [MFC] Ces fenêtres qui ne s'affichent pas..
    Par Davide dans le forum MFC
    Réponses: 3
    Dernier message: 19/11/2003, 12h30

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