Rendre JButton inactif après un YES_NO_CANCEL_OPTION

[Résolu]
Signaler
Messages postés
34
Date d'inscription
mercredi 8 novembre 2006
Statut
Membre
Dernière intervention
8 juillet 2010
-
Messages postés
34
Date d'inscription
mercredi 8 novembre 2006
Statut
Membre
Dernière intervention
8 juillet 2010
-
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

4 réponses

Messages postés
34
Date d'inscription
mercredi 8 novembre 2006
Statut
Membre
Dernière intervention
8 juillet 2010

J'ai enfin trouvé... Un petit break pour sortir du while... et après le setEnabled(false);...
Parfait...
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
128
Salut,

Montre nous ton code, car sans cà ca va être dur de savoir ce qui ne marche pas...
Messages postés
34
Date d'inscription
mercredi 8 novembre 2006
Statut
Membre
Dernière intervention
8 juillet 2010

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
        });
Messages postés
34
Date d'inscription
mercredi 8 novembre 2006
Statut
Membre
Dernière intervention
8 juillet 2010

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();
    }
}