Problème de gestion dynamique des JcheckBox [Résolu]

coolanso 75 Messages postés jeudi 12 août 2010Date d'inscription 5 juillet 2014 Dernière intervention - 23 août 2011 à 12:28 - Dernière réponse : cs_GodConan 2116 Messages postés samedi 8 novembre 2003Date d'inscriptionContributeurStatut 6 octobre 2012 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

14 réponses

cs_GodConan 2116 Messages postés samedi 8 novembre 2003Date d'inscriptionContributeurStatut 6 octobre 2012 Dernière intervention - 24 août 2011 à 03:02
+3
Utile
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)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_GodConan
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 23 août 2011 à 13:34
0
Utile
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.
Commenter la réponse de cs_Julien39
coolanso 75 Messages postés jeudi 12 août 2010Date d'inscription 5 juillet 2014 Dernière intervention - 23 août 2011 à 15:02
0
Utile
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?
Commenter la réponse de coolanso
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 23 août 2011 à 15:53
0
Utile
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.
Commenter la réponse de cs_Julien39
coolanso 75 Messages postés jeudi 12 août 2010Date d'inscription 5 juillet 2014 Dernière intervention - 23 août 2011 à 16:06
0
Utile
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?
Commenter la réponse de coolanso
cs_GodConan 2116 Messages postés samedi 8 novembre 2003Date d'inscriptionContributeurStatut 6 octobre 2012 Dernière intervention - 23 août 2011 à 18:15
0
Utile
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)
Commenter la réponse de cs_GodConan
coolanso 75 Messages postés jeudi 12 août 2010Date d'inscription 5 juillet 2014 Dernière intervention - 23 août 2011 à 18:42
0
Utile
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
Commenter la réponse de coolanso
cs_GodConan 2116 Messages postés samedi 8 novembre 2003Date d'inscriptionContributeurStatut 6 octobre 2012 Dernière intervention - 23 août 2011 à 19:29
0
Utile
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)
Commenter la réponse de cs_GodConan
coolanso 75 Messages postés jeudi 12 août 2010Date d'inscription 5 juillet 2014 Dernière intervention - 23 août 2011 à 19:43
0
Utile
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.
Commenter la réponse de coolanso
cs_GodConan 2116 Messages postés samedi 8 novembre 2003Date d'inscriptionContributeurStatut 6 octobre 2012 Dernière intervention - 23 août 2011 à 23:28
0
Utile
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)
Commenter la réponse de cs_GodConan
coolanso 75 Messages postés jeudi 12 août 2010Date d'inscription 5 juillet 2014 Dernière intervention - 24 août 2011 à 00:52
0
Utile
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 ?
Commenter la réponse de coolanso
cs_GodConan 2116 Messages postés samedi 8 novembre 2003Date d'inscriptionContributeurStatut 6 octobre 2012 Dernière intervention - 24 août 2011 à 01:14
0
Utile
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)
Commenter la réponse de cs_GodConan
coolanso 75 Messages postés jeudi 12 août 2010Date d'inscription 5 juillet 2014 Dernière intervention - 26 août 2011 à 20:20
0
Utile
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.
Commenter la réponse de coolanso
cs_GodConan 2116 Messages postés samedi 8 novembre 2003Date d'inscriptionContributeurStatut 6 octobre 2012 Dernière intervention - 27 août 2011 à 10:42
0
Utile
;o)

GodConan ;o)
Commenter la réponse de cs_GodConan

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.