Rendre JButton inactif après un YES_NO_CANCEL_OPTION [Résolu]

elvis36 34 Messages postés mercredi 8 novembre 2006Date d'inscription 8 juillet 2010 Dernière intervention - 30 mai 2009 à 23:58 - Dernière réponse : elvis36 34 Messages postés mercredi 8 novembre 2006Date d'inscription 8 juillet 2010 Dernière intervention
- 3 juin 2009 à 12:35
Bonsoir,

Voila mon problème.
Par le biais d'un bouton donc d'un écouteur je lance un showConfirmDialogue, YES_NO_CANCEl_OPTION.
Lorsque je clique sur NO_OPTION mon bouton doit devenir inactif, j'ai donc mis un setEnabled(false); qui fonctionne.

Le problème est que maintenant j'ai été contraint dans mon programme de rajouter une boucle while qui contient mon showConfirmDialogue précédent et lorsque je quitte cette boucle avec NO_OPTION mon bouton ne devient plus inactif...

Quelqu'un aurait-il une petite idée pour que mon bouton devienne inactif malgré la boucle while
Car la vraiment même après recherche sur le net je sèche...

Merci
Afficher la suite 

Votre réponse

4 réponses

elvis36 34 Messages postés mercredi 8 novembre 2006Date d'inscription 8 juillet 2010 Dernière intervention - 3 juin 2009 à 12:35
+3
Utile
J'ai enfin trouvé... Un petit break pour sortir du while... et après le setEnabled(false);...
Parfait...
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de elvis36
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 31 mai 2009 à 08:57
0
Utile
Salut,

Montre nous ton code, car sans cà ca va être dur de savoir ce qui ne marche pas...
Commenter la réponse de cs_DARKSIDIOUS
elvis36 34 Messages postés mercredi 8 novembre 2006Date d'inscription 8 juillet 2010 Dernière intervention - 31 mai 2009 à 10:39
0
Utile
Bonjour DarkSidious,

En fait voila mon code, un peu long mais pas trop complexe.
En fait ce code est générer lorsque l'utilisateur appui sur un bouton. Dans un premier temps le programme demande le nom du joueur puis il réalise un premier essai qui est validé ou non en comparant cet essai avec la réponse 648...
Ensuite une boucle while tant que 648 n'est pas trouvé permet de répéter ce code par le biais d'un showConfirmDialog... Lorsque l'utilisateur clique sur Oui la boucle while s'exécute à nouveau, si il clique sur Annuler ou close le programme se ferme.
Le problème est si il clique sur non, je souhaite fermer le showConfirmDialogue ( setUndecorated(true); en vert dans le programme) et je souhaite rendre mon bouton Sol inactif par le biais du setEnabled(false);
Si je supprime le while le setEnabled fonctionne mais je ne peux plus utiliser le showConfirmDialogue pour demander à l'utilisateur de jouer à nouveau.

Voila c'est un peu long et cette subtilité semble pas évidente à résoudre...
Merci à toi...

Sol.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                String NomJoueur = JOptionPane.showInputDialog(null,"Quelle est le nom du joueur pour cette partie ? "
                        ,"Nom du joueur",JOptionPane.QUESTION_MESSAGE);
                if(NomJoueur==null){
                    JOptionPane.showMessageDialog(null,"Partie Annuler... Le programme va être fermé",
                            "Résultat", JOptionPane.INFORMATION_MESSAGE);
                        System.exit(0);
                }
                
                int i=0;
                nbEssais++;
                String nb1 = JOptionPane.showInputDialog(null,"Quelle valeur proposez-vous pour \n la somme des chiffres de factorielle 100 ? " +
                    "\n \n Essai numéro : "+nbEssais,
                    "Solution????",JOptionPane.QUESTION_MESSAGE);
                System.out.println(nb1);
                
                if(nb1!=null){
                try{i = Integer.parseInt(nb1);}
                catch(NumberFormatException E){JOptionPane.showMessageDialog(null,"Erreur(s) de saisie(s)... \n \n " +
                        "La valeur saisie est supérieur  \n à 2 exposant 31 ou est une chaîne de caractères...", "Résultat", JOptionPane.INFORMATION_MESSAGE);}
                }

                else{JOptionPane.showMessageDialog(null,"Partie Annuler... Le programme va être fermé",
                        "Résultat", JOptionPane.INFORMATION_MESSAGE);
                    System.exit(0);
                    
                }
                if(i<0){JOptionPane.showMessageDialog(null,"Erreur(s) de saisie(s)... \n La somme d'entiers positifs est une valeur positive...",
                        "Résultat", JOptionPane.INFORMATION_MESSAGE);}
                else{

                if(i==648){int choix = JOptionPane.showConfirmDialog(null,"GAGNE ! \n Vous avez effectué "+nbEssais+" essais." +
                        "\n Score incris dans les meilleurs scores... " +
                        "\n \n Voulez vous visualiser l'algorithme ayant permis la résolution de ce problème??" +
                        "\n \n Si vous cliquez sur NON le programme va être fermé automatiquement car la réponse a été trouvée!!!" +
                        "\n Si vous cliquez sur OUI la solution va s'afficher...",
                            "Résultat",JOptionPane.YES_NO_OPTION,JOptionPane.INFORMATION_MESSAGE);
                            System.out.println("Gagné");    
                            
                            DateFormat HeureFin = new SimpleDateFormat("HH:mm:ss");
                            System.out.println(""+HeureFin.format(new Date()));
                            
                            SimpleDateFormat hourParser=null;
                             Date heureS=null, heureF=null, heureDuree=null;
                             try {
                                 hourParser = new SimpleDateFormat("HH:mm:ss");
                                 heureF=hourParser.parse(HeureFin.format(new Date()));    
                                 heureS=hourParser.parse(HSFomatNewdate);
                                 heureDuree=new Date(heureF.getTime()-heureS.getTime()-3600000);
                                 System.out.println(hourParser.format(heureDuree));
                                 }
                             catch(java.text.ParseException ee){
                                 System.out.println("Impossible de formater la date");
                                 System.err.println("Erreur(s) : "+ee);
                                }
                            
                            String Scores1 = "Nom du joueur : "+NomJoueur+". Problème résolu en "+nbEssais+" essais et en " +
                                    hourParser.format(heureDuree)+" (Heure(s):Minute(s):Seconde(s)).";
                            Lireetecrire lee = new Lireetecrire();
                            lee.ecrire(Scores1);
                            
                            if(choix==0)
                                {JFrame RG = new ResultatGagne();}
                            else
                                System.exit(0);
                                }
                else {JOptionPane.showMessageDialog(null,"PERDU !",
                        "Résultat", JOptionPane.INFORMATION_MESSAGE);
                         System.out.println("Perdu");}
            }//fin else i<0
                
            while (!(i==648)){
                int Rees = JOptionPane.showConfirmDialog(null,"Voulez-vous effectuer un nouvel essai?",
                         "Résultat",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);
                
                if (Rees == JOptionPane.YES_OPTION) {
                    nbEssais++;
                    String nb = JOptionPane.showInputDialog(null,"Quelle valeur proposez-vous pour \n la somme des chiffres de factorielle 100 ? " +
                        "\n \n Essai numéro : "+nbEssais,
                        "Solution????",JOptionPane.QUESTION_MESSAGE);
                    System.out.println(nb);
                    
                    if(nb!=null){
                    try{i = Integer.parseInt(nb);}
                    catch(NumberFormatException E){JOptionPane.showMessageDialog(null,"Erreur(s) de saisie(s)... \n \n " +
                            "La valeur saisie est supérieur  \n à 2 exposant 31 ou est une chaîne de caractères...", "Résultat", JOptionPane.INFORMATION_MESSAGE);}
                    }
                    else{JOptionPane.showMessageDialog(null,"Partie Annuler... Le programme va être fermé",
                            "Résultat", JOptionPane.INFORMATION_MESSAGE);
                        System.exit(0);
                        
                    }
                    if(i<0){JOptionPane.showMessageDialog(null,"Erreur(s) de saisie(s)... \n La somme d'entiers positifs est une valeur positive...",
                            "Résultat", JOptionPane.INFORMATION_MESSAGE);}
                    else{
                    if(i==648){int choix = JOptionPane.showConfirmDialog(null,"GAGNE ! \n Vous avez effectué "+nbEssais+" essais." +
                            "\n Score incris dans les meilleurs scores... " +
                            "\n \n Voulez vous visualiser l'algorithme ayant permis la résolution de ce problème??" +
                            "\n \n Si vous cliquez sur NON le programme va être fermé automatiquement car la réponse a été trouvée!!!" +
                            "\n Si vous cliquez sur OUI la solution va s'afficher...",
                                "Résultat",JOptionPane.YES_NO_OPTION,JOptionPane.INFORMATION_MESSAGE);
                                System.out.println("Gagné");
                                
                                DateFormat HeureFin = new SimpleDateFormat("HH:mm:ss");
                                System.out.println(""+HeureFin.format(new Date()));
                                
                                SimpleDateFormat hourParser=null;
                                 Date heureS=null, heureF=null, heureDuree=null;
                                 try {
                                     hourParser = new SimpleDateFormat("HH:mm:ss");
                                     heureF=hourParser.parse(HeureFin.format(new Date()));    
                                     heureS=hourParser.parse(HSFomatNewdate);
                                     heureDuree=new Date(heureF.getTime()-heureS.getTime()-3600000);
                                     System.out.println(hourParser.format(heureDuree));
                                     }
                                
                                 catch(java.text.ParseException ee){
                                     System.out.println("Impossible de formater la date");
                                     System.err.println("Erreur(s) : "+ee);
                                    }
                                
                                String Scores2 = "Nom du joueur : "+NomJoueur+". Problème résolu en "+nbEssais+" essais et en " +
                                        hourParser.format(heureDuree)+" (Heure(s):Minute(s):Seconde(s)).";
                                Lireetecrire lee = new Lireetecrire();
                                lee.ecrire(Scores2);
                                
                                if(choix==0)
                                    {JFrame RG = new ResultatGagne();}
                                else
                                    System.exit(0);
                                    }
                    else {JOptionPane.showMessageDialog(null,"PERDU !",
                            "Résultat", JOptionPane.INFORMATION_MESSAGE);
                             System.out.println("Perdu");}
                }//fin else i<0    
                }// fin then YES_OPTION
                 else
                     if (Rees == JOptionPane.NO_OPTION) {
                         setUndecorated(true);
        
                         Sol.setEnabled(false);

                        System.out.println("remove");
                                 }//fin then NO_OPTION
                         
                     else  
                         if((Rees==JOptionPane.CANCEL_OPTION)||(Rees==JOptionPane.CLOSED_OPTION)){JOptionPane.showMessageDialog(null,"Partie Annulée... Le programme va être fermé",
                                "Résultat", JOptionPane.INFORMATION_MESSAGE);
                                 System.exit(0);}//fin else
                                
            }//fin while
            }//fin actionPerformed
        });
Commenter la réponse de elvis36
elvis36 34 Messages postés mercredi 8 novembre 2006Date d'inscription 8 juillet 2010 Dernière intervention - 31 mai 2009 à 22:19
0
Utile
Alors voila pour faciliter votre aide j'ai complètement réduit ce que je viens de poster ci-dessus. Je met ci-après un programme complet qui tourne et qui fait que 70 lignes... Comparé au précédent beaucoup trop long pour la compréhension.

La solution à la question est 648... Par contre cette version allégée ne comporte pas de try et de catch donc il faut saisir un entier naturel pour pouvoir continuer les itérations...

Le problème vient toujours du petit setEnabled(false) en rouge dans le programme qui ne veut pas me rendre mon JButton inactif...

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class Test extends JFrame{
    public Test(){
        setBounds(300,300,300,300);
        BorderLayout BL = new BorderLayout();
        final JButton OK = new JButton("Ok");
        getContentPane().setLayout(BL);
        getContentPane().add(OK);
        OK.addActionListener(new ActionListener(){       
            public void actionPerformed (ActionEvent e){           
                String nb1 = JOptionPane.showInputDialog(null,"Quelle valeur proposez-vous pour \n " +
                    "la somme des chiffres de factorielle 100 ? ","Solution????",JOptionPane.QUESTION_MESSAGE);
                int i=0;
                i = Integer.parseInt(nb1);
                if(i==648){JOptionPane.showConfirmDialog(null,"GAGNE !",
                            "Résultat",JOptionPane.INFORMATION_MESSAGE);
                            System.exit(0);}
                else {JOptionPane.showMessageDialog(null,"PERDU !",
                        "Résultat", JOptionPane.INFORMATION_MESSAGE);
                         System.out.println("Perdu");}
               
                while(!(i==648)){
                    int Rees = JOptionPane.showConfirmDialog(null,"Voulez-vous effectuer un nouvel essai?",
                             "Résultat",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);
                    if (Rees == JOptionPane.YES_OPTION) {
                       
                    String nb = JOptionPane.showInputDialog(null,"Quelle valeur proposez-vous pour \n la somme des chiffres de factorielle 100 ? ",
                                "Solution????",JOptionPane.QUESTION_MESSAGE);
                    i = Integer.parseInt(nb);
                    if(i==648){JOptionPane.showConfirmDialog(null,"GAGNE !",
                            "Résultat",JOptionPane.INFORMATION_MESSAGE);
                            System.exit(0);}
                    else {JOptionPane.showMessageDialog(null,"PERDU !",
                        "Résultat", JOptionPane.INFORMATION_MESSAGE);
                         System.out.println("Perdu");}
                   
                    }//fin then YES_OPTION
                     else
                         if (Rees == JOptionPane.NO_OPTION) {
                             setUndecorated(true);       
                            OK.setEnabled(false);
                            System.out.println("remove");
                                     }//fin then NO_OPTION
                         else 
                             if((Rees==JOptionPane.CANCEL_OPTION)||(Rees==JOptionPane.CLOSED_OPTION)){JOptionPane.showMessageDialog(null,"Partie Annulée... Le programme va être fermé",
                                    "Résultat", JOptionPane.INFORMATION_MESSAGE);
                                     System.exit(0);}//fin else   
                }//fin while
               
                    }
                }   
            );  
        setVisible(true);
    }
   
    public static void main(String[] args) {
        JFrame F = new Test();
    }
}
Commenter la réponse de elvis36

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.