Problème de gestion dynamique des JcheckBox

Résolu
coolanso Messages postés 75 Date d'inscription jeudi 12 août 2010 Statut Membre Dernière intervention 5 juillet 2014 - 23 août 2011 à 12:28
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 - 27 août 2011 à 10:42
Bonjour à tous,j'ai un problème avec la gestion dynamique des Jcheckbox.Dans mon formulaire je m'en sert pour attribuer des droits aux users que je crée.La valeur du droit de l'utilisateur étant la combinaison des Jcheckbox cochés.chaque droit est consigné dans ma table user.Mon souci est de pouvoir retablir les droits, c'est à dire de recocher les cases initialement coché lors de la création lorsqu'on voudra modifier ce user.en ce moment je passe par plein de "IF",et ça ne marche pas tout à fait.Je me demandais s'il n'existait une façon de le faire en fonction de n'importe quelle combinaison de JchekBox coché.Merci de me repondre.

14 réponses

cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
24 août 2011 à 03:02
au passage ... avec ma methode tu n aurais que 11 test ;o) ... enfin un nombre de test egal a ton nombre de chkbox ... je le repete ;o), pose toi la question pourquoi cette chkbox est elle à true?!! (ou à false' c est pareil) ;o)
tu refais cela 11 fois et c est fini..

GodConan ;o)
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
23 août 2011 à 13:34
Bonjour,

Tu peux peut être nous montrer ton code pour qu'on voit ce qui ne va pas. Mais la seule chose que tu puisses faire est peut être de factoriser ton code à l'aide d'une fonction. Cependant, je ne peux pas t'en dire plus sans voir ce que tu as fait.
0
coolanso Messages postés 75 Date d'inscription jeudi 12 août 2010 Statut Membre Dernière intervention 5 juillet 2014
23 août 2011 à 15:02
Merci Julien39 voici un bout de mon code :

if("Modifier".equals(CmdModifier.getText()))
        {
           CmdQuitter.setEnabled(true);
           annuler();     
           try {
                 Connection connection = DataBaseConnector.getConnection();
                 if (connection != null)     
                    {
                      boolean encore=rst.next();
                      if(encore)
                      { 
                        TxtNomUser.setText(rst.getString("NomUser"));//nom du user 
                        TxtMdp.setText(rst.getString("Pass"));//son pass
                         int admin= rst.getInt("Droit_Admin");
                         int naiss=rst.getInt("Acte_Naiss");
                         int juge=rst.getInt("Juge_Sup");
                         int mar=rst.getInt("Acte_Mar");
                          
                         if(admin!=0)
                         {
                           if(admin==7)
                           {
                             ChkDroitAdmin.setSelected(true);
                             ChkTousDroitGestion.setSelected(true);
                                          
                            }else
                              {
                                if(admin==3)
                                 {
                                   ChkDroitAdmin.setSelected(true); 
                                 }else
                                  {
                                    if(admin==4)
                                    {
                                      ChkTousDroitGestion.setSelected(true);
                                    }
                                  }
                               }
                             }
                             else{   
                                  if(naiss!=0)
                                   {
                                     if(naiss<4)
                                      {
                                        if(naiss==3)
                                         {
                                          ChkDroitConsActeNaissDeces.setSelected(true);
                                    ChkDroitCreerActeNaissDeces.setSelected(true);
                                                                                            }else
            {
             if(naiss==2)
             {
               ChkDroitCreerActeNaissDeces.setSelected(true);
                                                                                                }else
              {
                if(naiss==1)
                {
                  ChkDroitConsActeNaissDeces.setSelected(true);
                }
               }
             }
            }
       else
       {
       if(naiss==4)
       {
      ChkDroitModifActeNaissDeces.setSelected (true);                                                 
   }
else{
    if(naiss==5)
    {
     ChkDroitConsActeNaissDeces.setSelected(true);
     ChkDroitModifActeNaissDecessetSelected(true);
    }else
     {
     if(naiss==6)
     {
      ChkDroitCreerActeNaissDeces.setSelected(true);
      ChkDroitModifActeNaissDeces.setSelected(true);
     }else
      {
      if(naiss==7){
        ChkDroitConsActeNaissDeces.setSelected(true);
        ChkDroitCreerActeNaissDeces.setSelected(true);
        ChkDroitModifActeNaissDeces.setSelected(true);
               }                                                                        }
    }
   }
  }
 }           
}else
   {    /*Ainsi de suite pour chaque type d'acte*/
   }
Aussi avec ces if je ne peux cocher que des cases d'un seul type d'acte,si par exemple on accorde pour un meme user différents droits pour différents type d'acte,c'est à dire droit de(Consultat,création,modification)repectivement pour les types d'acte(Naissance,Jugement,Mariage)ça ne marche pas.Depuis maintenant 4 jrs je fait tout mais pas moyen d'y arriver.J'epère m'être fait comprendre?
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
23 août 2011 à 15:53
Tu peux simplifier ce code en utilisant un switch à la place de ta suite de if

swith(naiss){
   case 1 :
        //instructions
        break;
   case 2 :
        //instructions
        break;
}


Et de même pour toutes les autres variables.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
coolanso Messages postés 75 Date d'inscription jeudi 12 août 2010 Statut Membre Dernière intervention 5 juillet 2014
23 août 2011 à 16:06
oui c'est vrai j'y ai pensé,mais je crois que je risque encore de tombé dans le même problème en ce sens que,seul les droits correspondants à un type d'acte seront cochés.pourtant dan mon formulaire on peut assigner différents droits pour differents types d'acte ou les mêmes droits pour les differents types d'acte.est ce qu'avec le Switch je pour cocher tous les Jcheckbox dont la combinaison à constituer la valeur du droit?
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
23 août 2011 à 18:15
salut ...
c est une vrai boucherie ton code ... ;o) héhé
Déjà ce sont des if...else qu il te faudrait faire (et pourquoi pas 2 switch.. case vu que tu utilises des valeurs numérique).

De plus rapelle toi que tu utilises un language OO ;o) ...

Et si ton but est de cocher ou non des cases, tu prend peu etre le probleme à l envers... d autant que chaque case doit etre initialisé (vrai ou false) donc à l init de la valeur de chaque case pause toi la question des conditions qui doivent etre rempli... et dans ce cas tu es sur de n en oulier aucune...

sinon ;o) comme à l ecole ;o) avec un joli tableau de Karnaugh ;o) tu simplifi tout ca... ;o)

GodConan ;o)
0
coolanso Messages postés 75 Date d'inscription jeudi 12 août 2010 Statut Membre Dernière intervention 5 juillet 2014
23 août 2011 à 18:42
salut à toi GodConan,c'est bien ce que j'ai fais,les "if ... else",seulement le système de "if ... else" ne me coche que les checkbox correspondant au droit d'un type d'acte est ce que tu vois?
par ça:
int admin= rst.getInt("Droit_Admin");
int naiss=rst.getInt("Acte_Naiss");
int juge=rst.getInt("Juge_Sup");
int mar=rst.getInt("Acte_Mar");

je recupere les valeurs des droits correspondants à chaque type d'acte(Naissance,Jugement,Mariage) et chacun de ces actes dispose de trois types de droits(consultation=1,creation=2 et modification=4).si par exemple je crée un user qui n'a que les droits sur les actes de naissances,le "if... else" les coches sans problèmes,mais lorsque le user à des droits pour chaque type d'acte,le "if ...else"ne coche que les droits du premier type d'acte rencontré dans la condition ce qui n'est pas juste.je voudrais arriver à cocher exactement le mêmes JCheckbox qui ont été coché lors de la création du user à la modification.
Si à la création je me suis servi des JCheckbox cochés pour enregistrer le droit de l'utilisateur,à la modification je me sert maintenant de la valeur du droit pour cocher les jcheckbox.Ton idée du tableau de Karnaugh pourrait bien aller,mais tu t'imagine le nombre de if else que cela fera,raison pour laquelle je cherche une methode rendant le travail moins complexe.j'espere m'être fait comprendre? merci
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
23 août 2011 à 19:29
On dirait un enfant... si je te dis d utiliser "if else" c est que tu ne la pas fait.... si tu ne sais pas le faire utilise "switch case" grrrr...
ta séquence de if est une abbération ... et le tableau de Karnaugh sert justement à générer une séquence de test bonne à coup sur et obtimisé... ;o) certe ;o) ton tableau devrai etre asser grand ;o) mais j ai vu pire ;o) cependanbt en informatique (programmation il est souvent possible de prendre des racourci sur les math ;o) ...
Effaces tous et recommence en prenant le principe que je t ai exposé plus tot ...
de toute facon c est comme cela qu il faudrait faire ... tu passes tes check en revu une à une et tu leur appliques leur conditions de valeur... le traitement devrait etre asser rapide pour ne pas nécéssiter d obtimisation...

tu n a que 4 valeurs à tester...

GodConan ;o)
0
coolanso Messages postés 75 Date d'inscription jeudi 12 août 2010 Statut Membre Dernière intervention 5 juillet 2014
23 août 2011 à 19:43
si ma séquence de if est une abbération,montre moi un exemple de ce qui ne l'ai pas alors,car moi je te comprends pas trop.toi à ta place comment tu l'aurai fait,voici comment tu pourra vraiment m'aider si tu le veux.
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
23 août 2011 à 23:28
c est qd meme pas compliqué;)

int admin = rst.getInt("Droit_Admin");
int naiss = rst.getInt("Acte_Naiss");
int juge = rst.getInt("Juge_Sup");
int mar = rst

tu as combien de check ??
a priorie tesz check dependent de la valeurs de ces 4 variables donc au pire tu as :

bool value = false;
// init chekbox 1
if ( admin ... && naiss ... and juge = ... && mar = ... ) value = true else value = false
chek1.setselected( value )
// init chekbox 2
if ( admin ... && naiss ... and juge = ... && mar = ... ) value = true else value = false
chek2.setselected( value )
// init chekbox 3
if ( admin ... && naiss ... and juge = ... && mar = ... ) value = true else value = false
chek3.setselected( value )

Avec cette facon de faire tu es sur de balayer toutes tes checkbox et si une n est pas correctement init tu sais ou il faut chercher....

sinon si tu preferes la technique du tableau ...
au lieu de
if(naiss==2)
{
ChkDroitCreerActeNaissDeces.setSelected(true);
}else
{
if(naiss==1)
{
ChkDroitConsActeNaissDeces.setSelected(true);
}
}
ecrit plutot
if(naiss==2)
{
ChkDroitCreerActeNaissDeces.setSelected(true);
}
else if(naiss==1)
{
ChkDroitConsActeNaissDeces.setSelected(true);
}

c est plus conventionnel ;o) ... et plus facil de s y retrouver...



GodConan ;o)
0
coolanso Messages postés 75 Date d'inscription jeudi 12 août 2010 Statut Membre Dernière intervention 5 juillet 2014
24 août 2011 à 00:52
salut GodConan,je pense vraiment qu'on ne se comprend toujours voila le pblm:[list]

Admin

[*] ChkDroitAdmin;
[*] ChkTousDroitGestion

Acte_Naiss

[*] ChkDroitConsActeNaissDeces;
[*] ChkDroitCreerActeNaissDeces;
[*] ChkDroitModifActeNaissDeces;

Juge_Sup

[*] ChkDroitConsActeJugeSup;
[*] ChkDroitCreerActeJugeSup;
[*] ChkDroitModifActeJugeSup

Acte_Mar

[*] ChkDroitConsActeMariage;
[*] ChkDroitCreerActeMariage;
[*] ChkDroitModifActeMariage

voici en réalité à quoi correspond mon formulaire,Acte_Mar,Juge_sup,Acte_Mar constituent mes différents type d'acte.

ChkDroitConsXXX => 1
chkDroiCreerXXX => 2
chkDroitModifXXX => 4

constituent mes Jcheckbox représentant les droits pour chaque type d'acte,c'est à dire qu'il existe les memes droits pour tous les types d'acte.donc pour repondre à ta question ça fait 11 Jcheckbox
si à la création on attributs au moins un droit pour par exemple Acte_Naiss,mes if...else tels qu'ils sont fait me coche les options correspondantes,mais dès lors qu'on assoicie un des droits des autres actes les cases cochés ne sont plus justes.

GodConan je crois qu'avec ta méthode je devrait faire un truc de ce genre:

if ( admin 0 && naiss0 and juge =0 && mar =0 ) 
  {
       ChkDroitAdmin.setSelected(false);;
      ChkTousDroitGestion.setSelected(false);
      ChkDroitConsActeNaissDeces.setSelected(false);
      ChkDroitCreerActeNaissDeces.setSelected(false);
      ChkDroitModifActeNaissDeces.setSelected(false);
      ChkDroitConsActeJugeSup.setSelected(false);
      ChkDroitCreerActeJugeSup.setSelected(false);
      ChkDroitModifActeJugeSup.setSelected(false);
      ChkDroitConsActeMariage.setSelected(false);
      ChkDroitCreerActeMariage.setSelected(false);
      ChkDroitModifActeMariage.setSelected(false);
}else if(admin==0 && naiss==1 && juge==1 && mar==1)
     {
     }
     else if(admin==0 && naiss==0 && juge==1 && mar==1)
     {
     }
     else if(admin==0 && naiss==1 && juge==0 && mar==1)
     {
         /*Ainsi de suite pour chaque éventuelle valeur possible d'un des Jcheckbox*/
     }

j'espere que maintenant que tu me comprends ton JcheckBox que tu initialise n'a pas forcement la même valeur pour les differents types d'acte.tu t'imagine le nombre d if que j'aurais pour chaque combinaison de JCheckbox ?
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
24 août 2011 à 01:14
bon !! toujours pas clair ton affaire ... difficil de faire moins clair ;o) ...
quoi qu il en soit tu dis bien que c est données qui te servent à init tes chekbox proviennent d une precedente creation avec les meme check ...
donc si tu ne peu simlement faire l ago inverse ... prend toi une colonne de ta table pour sauver l etat des checkbox!!!???

GodConan ;o)
0
coolanso Messages postés 75 Date d'inscription jeudi 12 août 2010 Statut Membre Dernière intervention 5 juillet 2014
26 août 2011 à 20:20
Merci a toi GodConan,pour ta patience et ta comprehension,j'y suis finalement arrivé,j'ai utilisé le switch et ça a marché commme sur de roulettes,mais j'ai un second souci concernant un parametre dan une requête préparée.j'en ferai un autre poste,et j'aurai bien aimé que tu me pistonne sur ce coup.encore une fois merci.
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
27 août 2011 à 10:42
;o)

GodConan ;o)
0
Rejoignez-nous