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 :

ListCellRenderer avec JCheckbox


Sujet :

AWT/Swing Java

  1. #1
    Invité
    Invité(e)
    Par défaut ListCellRenderer avec JCheckbox
    Bonjour,

    Je voudrais placer dans une liste une série d'éléments sélectionnables.
    Je me suis donc crée un ListCellRenderer qui étend JCheckbox.
    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
    public class ListeClassRenderer extends JCheckBox implements ListCellRenderer {
     
        private JCheckBox chkBox;
        private JLabel lbl;
     
        /** Creates a new instance of ListeClassRenderer */
        public ListeClassRenderer() {
            setBorderPainted(true);
        }
     
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
            if ( cellHasFocus )
                setBorder( BorderFactory.createLineBorder(Color.BLUE));
            else 
                setBorder( BorderFactory.createLineBorder(Color.WHITE));
     
            if ( value instanceof ListeClassItem ) {
                ListeClassItem item = (ListeClassItem) value;
     
                setText(item.getLibelle());
                setSelected(item.isSelected());
                setBackground(Color.WHITE);
     
                return this;
            } else {
                setText("Type non admis");
                setEnabled(false);
                return this;
            }
        }
     
    }
    Cela fonctionne bien sauf que je ne sais pas cocher/décocher les cases. Elles sont cochées par defaut (normal) et restent cochées..

    Comment faire pour pouvoir cocher ces cases ?

    Merci

  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
    C'est dommage pour toi, mais la liste d'une JComboBox est basée sur une JList.

    Or une JList est non éditable.
    Donc les cases à cocher dans une JComboBox tu peux oublier.

    Et essayer de penser à une autre pattern graphique pour tes choix...

  3. #3
    Invité
    Invité(e)

  4. #4
    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
    Oups pardon, j'étais parti sur une idée de JComoboBox, mais le problème reste le même pour les JList. (d'ailleurs le problème de la JcomboBox vient de la JList
    Donc deux solutions utiliser une JTable à une colonne ou rendre une JList editable (la deuxième étant plus propre), par exemple:
    http://www.jroller.com/page/santhosh...able_no_jtable

  5. #5
    Invité
    Invité(e)
    Par défaut
    Je souffle un peu sur ce post pour le dépoussiérer...

    Voilà, j'utilise une JList editable crée en copie-collant (plus ajout de l'url source etc..) le contenu de l'adresse http://www.jroller.com/page/santhosh...able_no_jtable

    Comme renderer j'ai utilisé une JCheckbox. Tu marche bien maintenant SAUF que pour cocher/décocher la JCheckbox il faut effectuer plusieurs clicks.
    En réalité lorsque je veux cocher, je fais un click pour sélectionner la ligne et un second pour cocher, par contre, pour décocher, un seul click suffit. Et lorsque une checkbox a déjà été décochée, un seul click suffis pour la recocher..

    Comment faire pour cocher/décocher mes JCheckbox avec un seul click ?
    On m'avait dis qu'il fallait donner le renderer à l'éditeur mais ça ne change rien du tout. Je n'ai aucunes pistes, pouvez-vous m'aider ?


    Merci

  6. #6
    Membre du Club

    Inscrit en
    Octobre 2002
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 7
    Par défaut
    Bonjour,

    Voici une solution qui en vaut une autre :
    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
     
        	class listRender implements ListCellRenderer{
        		private Boolean[] selection;
        		public listRender(int d){
        			selection=new Boolean[d];
        			for(int i=0;i<selection.length;i++){
        				selection[i]=false;
        			}
        		}
    			public Component getListCellRendererComponent(JList list,
    					Object value, int index, boolean isSelected,
    					boolean cellHasFocus) {
    				JCheckBox cbx=new JCheckBox(value.toString());
    				cbx.setSelected(selection[index]);
    				return cbx;
    			}
    			public void clickitem(int index){
    				selection[index]=!selection[index];
    			}
    			public Boolean isSelected(int index){
    				return selection[index];
    			}
     
        	}
        	class listListener implements ListSelectionListener{
     
    			public void valueChanged(ListSelectionEvent e) {
    				if(e.getValueIsAdjusting()){
    					return;
    				}
    				if(e.getSource().equals(lst)){
    					((listRender)lst.getCellRenderer()).clickitem(((JList)e.getSource()).getSelectedIndex());
    					lst.validate();
    				}
    			}
     
        	}
    ....
    ....
        		datalst=new String[3];
        		datalst[0]="item 1";
        		datalst[1]="item 2";
        		datalst[2]="item 3";
        		lst.setListData(datalst);
        		lst.setCellRenderer(new listRender(datalst.length));
        		lst.addListSelectionListener(new listListener());
        		lst.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    Il y a juste un petit problème : tu ne peux pas sélectionner et désélectionner immédiatement un même item => problème si un seul item dans la liste

    @+

    mouah

  7. #7
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    Sur le même site cité, réalisé par la même personne :

    JList avec CheckBox

Discussions similaires

  1. Problème JLIst et ListCellRenderer avec type non basic
    Par dudeMan dans le forum Composants
    Réponses: 1
    Dernier message: 19/03/2010, 14h18
  2. JComboBox Avec interaction avec JCheckBox
    Par Piolet dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 20/04/2007, 08h13
  3. Probleme avec JCheckBox dans le menu contextuel
    Par Mo_Poly dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 20/03/2007, 21h29
  4. JOptionPane avec JcheckBox
    Par rami883 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 06/03/2007, 19h15
  5. [Swing] erreur avec JCheckBox
    Par Aethis dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 06/07/2006, 15h18

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