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 :

check box + Jlist


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
    Août 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 67
    Par défaut check box + Jlist
    Bonjour,

    Je cherche a cocher les cases d ' un jList
    J' ai un jlist(comportant 2 lignes) avec des checkbox et j ' aimerais pouvoir cocher la check box de la ligne 2 si une fonction retournant un booleen true se vérifie et la ligne 1 si elle retourne false


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(Serveur.getConnexion().verifier())

    , or je ne sais pas comment sélectionner la ligne a cocher dans mon 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
    36
    public class RendererList  implements ListCellRenderer// rendu de l ' interface Annonces
    {private  Border border = BorderFactory.createCompoundBorder(BorderFactory.createMatteBorder( 0, 0, 1, 0, Color.BLACK ),
    		  BorderFactory.createEmptyBorder( 3, 3, 3, 3 ) );// bordures des lignes de la jlist
       public Component getListCellRendererComponent(
             JList list, Object value, int index, // jlist , ligne , index
             boolean isSelected, boolean hasFocus) // selectionnee ou pas , a le focus ou pas
       {
    	   JPanel panneau= new JPanel();// panneau dans la jlist
    	   panneau.setLayout(new BorderLayout());
    		panneau.setBackground(list.getBackground());// recupere couleur de la jlist
    		panneau.setOpaque(true);
    		panneau.setBorder(border); 
    	   JCheckBox checkBox = new JCheckBox();// case a cocher
     
    	   JLabel options=new JLabel();
    	   options.setText(value.toString());// affiche les lignes dans la jlist
     
     
          checkBox.setEnabled(list.isEnabled());
          //setSelected(((CheckListItem)value).isSelected());
          checkBox.setFont(list.getFont());
          checkBox.setBackground(list.getBackground());
     
         //checkBox.setText(value.toString());
         panneau.add(checkBox,BorderLayout.EAST);
         panneau.add(options,BorderLayout.WEST);
        if(Serveur.getConnexion().verifier())
        		 {
        	 checkBox.setSelected(true);    //setSelected(true);
        		 }
     
     
     
          return panneau;
       }
    }

    Merci de votre aide

  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
    Le truc de base est que la JList n'est pas un composant prévu pour faire de l'édition. Or le fait de cocher une checkbox correspond à un mécanisme d'édition.

    Si tu veux une liste avec des checkboxex éditables je te conseille plutôt de passer par une JTable.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 67
    Par défaut
    Merci de ton aide
    J ' ai donc adapté mon modèle sur une Jtable avec une colonne , mais j ' ai toujours le meme probleme.
    Si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(Serveur.getConnexion().verifier())
        		 {
        	 checkBox.setSelected(true);    //setSelected(true);
        		 }
    ca me selectionne les 2 checkbox , or je voudrais uniquement selectionner la checkbox de la ligne 1

    meme en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(Serveur.getConnexion().verifier() && row==1)
        		 {
        	 checkBox.setSelected(true);    //setSelected(true);
        		 }
    ca ne fonctionne pas

    mon renderer est concu ainsi
    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 RendererTable   extends DefaultTableCellRenderer// rendu de l ' interface Annonces
    {private  Border border = BorderFactory.createCompoundBorder(BorderFactory.createMatteBorder( 0, 0, 1, 0, Color.BLACK ),
    		  BorderFactory.createEmptyBorder( 3, 3, 3, 3 ) );// bordures des lignes de la jlist
    public Component getTableCellRendererComponent(JTable table,
            Object value, boolean isSelected, boolean hasFocus, int row
            , int column) {
    	   JPanel panneau= new JPanel();// panneau dans la jlist
    	   panneau.setLayout(new BorderLayout());
    	   panneau.setBackground(table.getBackground());// recupere couleur de la jlist
    	   panneau.setOpaque(true);
     
    	  JCheckBox checkBox = new JCheckBox();// case a cocher
    	  JLabel options=new JLabel();
    	  options.setText(value.toString());// affiche les lignes dans la jlist
          checkBox.setEnabled(table.isEnabled());
          //setSelected(((CheckListItem)value).isSelected());
          checkBox.setFont(table.getFont());
          checkBox.setBackground(table.getBackground());
     
         //checkBox.setText(value.toString());
         panneau.add(checkBox,BorderLayout.EAST);
         panneau.add(options,BorderLayout.WEST);
         if( Serveur.getConnexion().verifier() && row==1)
        		 {
        	 checkBox.setSelected(true);    //setSelected(true);
        		 }
     
     
     
     
          return panneau;
       }
    }
    merci encore pour ton aide

  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
    Comment as tu développé ton Editor?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 67
    Par défaut
    Je n ' en ai pas concu.
    Il me semble qu ' il n y en ait pas besoin pour un affichage simple de checkbox ou je me goure totalement ?

    merci encore

  6. #6
    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
    Tu veux juste afficher la JCheckBox, ou faire en sorte qu'elle soit éditable?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 67
    Par défaut
    J ' ai pu corriger la majeure partie de mes problèmes avec un peu de perséverance( cocher / décocher , conserver le stat de mes checkbox)
    mais il m ' en reste encore quelque uns et je bloque dessus svp.

    Lorsque j ' appelle mon editor me permettant de cocher/decocher via la methode setValue at du modele que j ' ai rédefini, il se produit un bug.
    Si je clique avec le bouton gauche de la souris enfoncé sur la cellule , la checkbox remplace tout le contenu de la cellule et se place a gauche alors qu ' elle etait initialement a droite


    je pensais au début que c ' etait un conflit avec le renderer , mais il n ' en est rien car je l ' ai désactivé pour tester.
    Je pense que c ' est a cause de la méthode de retour super.getTableCellEditorComponent(table, value, isSelected, row, column);

    mon editor:

    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
    public class EditorTableAnnonce extends DefaultCellEditor{
     
        public EditorTableAnnonce(JCheckBox checkBox) {
            super(checkBox);
     
     
        }
        public Component getTableCellEditorComponent(JTable table, Object value,
                boolean isSelected, int row, int column) {
     
                      if (value instanceof Annonces) {  
                             value = Boolean.valueOf( ((Annonces)value).isEtat() );  
                         }  
     
     
     
                      //super.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
                      return super.getTableCellEditorComponent(table, value, isSelected, row, column); 
     
    }
    }
    comment peut on décocher automatiquement une case quant on en coche une ?
    Je suis obligé de cliquer pour décocher la case
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {  
                            Annonces coche = (Annonces) annonces.get(rowIndex);  
                           switch (columnIndex) {  
                           case 0:  
     
                               coche.setEtat(((Boolean) aValue).booleanValue());
                               break;  
                           }  
                           fireTableCellUpdated(rowIndex, columnIndex);  
                        }
    merci de votre aide

  8. #8
    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
    Quel type de classe renvoie la colonne correspondant à celle où tu veux afficher ta checkbox?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 67
    Par défaut
    Merci encore de ton aide
    Je n' ai que une colonne qui renvoi un objet Annonces(String + booléen)
    Et j ' utilise instanceof pour convertir value en un objet Annonce

    mon modele est concu ainsi
    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
    public class TableauPersonnalisesInterfaceAnnonces extends AbstractTableModel{// modele de l interface annonces
     
    /**
         * 
         */
        private static final long serialVersionUID = 1L;
    //Object[] data = {"Par defaut","Personnalisé"};    
     
    private List<Annonces> annonces = new ArrayList<Annonces>();
    public TableauPersonnalisesInterfaceAnnonces(Imap connexionImap)
    {
        if(connexionImap.verifierGreeting())
                {
            annonces.add(new Annonces("Par defaut" , false));
            annonces.add(new Annonces("Personnalisé" , true));
                }
        else 
            {
             annonces.add(new Annonces("Par défaut" , true));
             annonces.add(new Annonces("Personnalisé" , false));
            }
    }
     
     
        public boolean isCellEditable(int row, int col){
            return true; 
        }
         public String getColumnName(int columnIndex) {
                return null;
            }
     
        public int getColumnCount() {
     
            return 1;
        }
        public int getRowCount() {
     
            return annonces.size();
        }
     
        public Object getValueAt(int rowIndex, int columnIndex) {
             Annonces coche = (Annoncess) annonces.get(rowIndex);
     
     
     
            if(columnIndex==0)
            {
            return  annonces.get(rowIndex);
            }
            else
                return null;
     
     
        }
            public void setValueAt(Object aValue, int rowIndex, int columnIndex) {  
                            Annonces coche = (Annonces) annonces.get(rowIndex);  
                           switch (columnIndex) {  
                           case 0:  
     
                               coche.setEtat(((Boolean) aValue).booleanValue());
                               break;  
                           }  
                           fireTableCellUpdated(rowIndex, columnIndex);  
                        }
    merci encore

Discussions similaires

  1. check box pour afficher autre chose
    Par vincent1412 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/02/2006, 17h47
  2. [Javascript] probleme de check box
    Par stomerfull dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/02/2006, 07h09
  3. eVC++ 4 : check box transparente
    Par zenetcalme dans le forum MFC
    Réponses: 10
    Dernier message: 29/11/2005, 09h11
  4. cocher tout les check box
    Par Flob dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 17/02/2005, 10h29
  5. [FLASH 5] check box sous Flash 5
    Par Flash5man dans le forum Flash
    Réponses: 7
    Dernier message: 01/09/2004, 08h48

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