Partage
  • Partager sur Facebook
  • Partager sur Twitter

JTable : données ACCESS JCheckBox non éditable

    22 juin 2009 à 16:14:21

    Salut à toute la communauté,

    voilà, j'utilise dans mon application un tableau(JTable) alimenté par une base de données ACCESS (j'aurais bien voulu choisir une autre mais c'est imposé :( ).
    Le problème est que dans une table de ma BdD, une colonne est de type boolean, celle ci alimente une colonne de mon tableau.
    L'affichage dans le tableau du booléen donne une JCheckBox, seulement elle ne change pas de statut lors du clic.

    Quelqu'un aurait une idée? Je prends toute les réponses possible :D
    ++ et Merci
    • Partager sur Facebook
    • Partager sur Twitter
      22 juin 2009 à 20:01:35

      merci beucoup, je vais regarder sa demain.

      Pour info je suis en stage en développeur, à fond dans le java, je commence et je trouve que c'est pas évident mais bordel,qu'est ce que c'est bien!!! ;)

      Merci bien
      • Partager sur Facebook
      • Partager sur Twitter
        24 juin 2009 à 16:07:14

        Bon...j'arrive pas bien à comprendre le fonctionnement du "DefaultCellEditor"

        la dernière colonne de ma JTable est alimenté par une base ACCESS et est de type booléen transformé en CheckBox avec le:
        getColumnClass(int col);
        
        .

        J'ai utilisé le DefaultCellEditor comme tu m'as proposé et lorsque je lance l'application, il m'affiche bien mes JCheckBox mais lorsque je click dessus il change bien de statut seulement dès que je clic sur une autre CheckBox, il reprend son ancien statut. o_O
        Je crois que j'ai pas compris grand chose au CellEditor...
        • Partager sur Facebook
        • Partager sur Twitter
          24 juin 2009 à 16:28:17

          Passe ton code pour voir
          • Partager sur Facebook
          • Partager sur Twitter
            24 juin 2009 à 17:17:48

            MMhhhhhh bon j'vais essayer de ne pas te submergé de code ;)
            donc voilà en gros l'initialisation de mon tableau:
            /////////////////////////////////////////////////////////////
            //////////////////////Paramètre Tableau//////////////////////
            nbLigne			= ConnectionTableau.nbLigne(nbLigne);
            donnees			= new Object [nbLigne][18];
            donnees 		= DonneesTableau.donnees(donnees);
            MonModele centre 	= new MonModele(donnees, titreColonnes);
            JTable tableau 		= new JTable(centre);
            	
            DefaultTableCellRenderer Drenderer = new CouleurCellule();
            tableau.setDefaultRenderer(String.class, Drenderer);
            
            tableau.getTableHeader().setReorderingAllowed(false);//déplacement colonne(non)
            tableau.getTableHeader().setResizingAllowed(false);//redimenssionner colonne(non)
            tableau.getTableHeader().setDefaultRenderer(new CouleurColonne());
            JScrollPane milieuC 	= new JScrollPane(tableau);
            //tableau.getColumn("Clôt").setCellEditor(new BoxEditeur(new JCheckBox()));
            

            donc "MonModele" est la clsse étendu d'AbstractTableModel
            qui change mes booléen en "checkbox".

            Pour ce qui est de la récupération des données de la colonne en question, j'envoi l'Object 'donnees' à la méthode 'donnees' de la classe 'DonneesTableau':
            donnees 	= DonneesTableau.donnees(donnees);
            


            Dans la classe 'DonneesTableau', j'ai créer un tableau de booléen (clotureTab) qui se rempli de booléen provenant de ma base ACCESS et grâce à ce tableau, je rempli mon Object donnees:
            for(int i = 0; i < clotureTab.length; i++)
            {
            	tableau[i][17] = clotureTab[i];
            }
            return tableau;
            

            Voilà mon tableau est rempli, les booléen en checkbox,seul la colonne contenant les checkbox sont éditable.
            Pour le CellEditor,je ne vois pas comment lui envoyer la checkbox du tableau vu qu'à la base,c'est un booléen.
            //tableau.getColumn("Clôt").setCellEditor(new BoxEditeur(new JCheckBox()));
            



            voilà, j'ai dit que j'essaierais de ne pas te submergé de code mais bon, j'espère que c'est pas lourd à lire.

            • Partager sur Facebook
            • Partager sur Twitter
              24 juin 2009 à 18:38:01

              aller tu y es presque, il te manque un petit truc a corriger au niveau de la modification de l'édition de cellule, voici un lien fort utile :
              http://prevert.upmf-grenoble.fr/Prog/J [...] .html#edition

              J'espère que tu réussiras tout seul. Bon courage
              • Partager sur Facebook
              • Partager sur Twitter
                25 juin 2009 à 14:21:08

                MMMmmmmhhhhh...lol...c'est chaud! o_O

                dans l'exemple, je remplace le bouton par un JChecBox et quelque autre modif mais j'imagine que je suis à côté de la plaque, le résultat est que j'ai toujours ma case qui se coche et qui se décoche dès que je clic ailleurs.

                Je planche dessus depuis ce matin 8h et je le vis mal ;) .
                Je vais faire travailler ce qui me reste de cerveau jusqu'à 16h30 et je posterais mon avancement.
                Mais c'est déjà super sympa de ta part ton aide, merci beaucoup.

                • Partager sur Facebook
                • Partager sur Twitter
                  25 juin 2009 à 17:11:50

                  Oui, c'est vrai que c'es pas facile dis donc!
                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 juin 2009 à 9:32:17

                    Bon, me revoilà,j'ai planché dessus encore hier soir et j'ai trouvé une solution....et oui mais elle est un peu
                    barbare :-° .
                    j'ai pris le modèle que tu m'as passé avant hier que j'ai modifié bien sùr.
                    voilà ce que j'ai mis:
                    public Component getTableCellEditorComponent
                    (JTable table, Object value,
                    boolean isSelected, int row, int column) 
                    {
                       if(value instanceof Boolean)
                         {
                    	if(value == (Object)true)
                              {
                    		System.out.println("je suis true et je vais devenir false");
                    		value = (Object)false;
                    		table.setValueAt(value, row, column);
                    	  }
                    	else if(value == (Object) false)
                              {
                    	        System.out.println("je suis false et je vais devenir true");
                    		value = (Object) true;
                    		table.setValueAt(value, row, column);
                    	  }
                         }
                      return table;
                    }
                    


                    J'ai testé. Le programme rentre bien dans la condition, la case se coche et se décoche à volonté et garde son statut et en regardant la valeur dans le tableau,elle change aussi (true/false).
                    Mais le problème est qu'à chaque fois, il me met cette erreur:
                    "Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: adding container's parent to itself".

                    je suis en train de me dire que j'envoie peut être un tableau dans la cellule :euh: .est ce que c'est possible?
                    • Partager sur Facebook
                    • Partager sur Twitter

                    JTable : données ACCESS JCheckBox non éditable

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown