Changement d'état JButton

Résolu
kujafilth Messages postés 12 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 22 avril 2009 - 28 avril 2008 à 15:44
kujafilth Messages postés 12 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 22 avril 2009 - 30 avril 2008 à 09:58
bonsoir. ça fait un moment que je parcours le site en long en large et dans tous les sens humainement possible et ça m'a beaucoup aidé jusque'à maintenant mais là je bloque. peut-être ai-je mal cherché mais en tout cas je n'ai pas trouv la réponse a mon problème qui est le suivant:

je développe actuellement une ihm dans le cadre d'un projet pour mon bts. seulement voilà, je voudrais qu'un bouton change d'état pour réaliser une fonction différente une fois qu'il a été activé (connexion/déconnexion). j'ai tenté une solution a l'arrache mais bon comme l'indique le nom de la méthode c'est surement pas très efficace. le problème principal est que après deux ans de dévelopement c++ on nous balance sur java pour le prjet... du coup la réussite est assez limitée. si vous pouviez m'aider ça serait ma foi fort sympathique. je poste ci dessous la partie qui nous concerne:

private JButton getConnexion()
    {
        if (Connexion == null)
        {
            Connexion = new JButton();
            Connexion.setBounds(new Rectangle(5, 225, 139, 25));
            Connexion.setText("Connexion");
            if (Connexion.getText() == "Connexion")
            {
                Connexion.addActionListener(new java.awt.event.ActionListener()
                {
                    public void actionPerformed(java.awt.event.ActionEvent e)
                    {
                        bdd.Connexion();
                        Purge.setEnabled(true);
                        Connexion.setText("Déconnexion");
                    }
                });
            }
            if (Connexion.getText() == "Déconnexion")
            {
                Connexion.addActionListener(new java.awt.event.ActionListener()
                {
                    public void actionPerformed(java.awt.event.ActionEvent e)
                    {   
                        System.out.println(Connexion.getText());
                        bdd.Deconnexion();
                        Purge.setEnabled(false);
                        Connexion.setText("Connexion");
                    }
               
                });
            }
        }
        return Connexion;
       
    }

merci

3 réponses

cs_Chatbour Messages postés 764 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 6 septembre 2010 19
28 avril 2008 à 16:43
Salut,

d'abord, la méthode que tu suit est fausse car l'ajout d'un ActionListener conserve les anciens Listener ajoutés.

Tu peux par exemple, faire un seul ActionListener où tu décides quoi faire selon la valeur d'une variable booléenne dédiée pour cela, et qui sera changée après chaque exécution du Listener.
3
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
28 avril 2008 à 17:23
En plus de la solution de Chatbour, il y a deux solutions :

- tu sauvegardes le ActionListener courant du bouton dans une variable et quand tu changes d'action, tu retire le dernier actionlistener avant d'ajouter le nouveau.

- ou bien (la meilleure à mon avis)
tu crées 2 boutons. et tu alternes les visibilités des boutons selon l'état (connecté/déconnecté).
3
kujafilth Messages postés 12 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 22 avril 2009
30 avril 2008 à 09:58
merci beaucoup après avoir testé les différentes méthodes j'ai finalement opté pour la plus simple celle des deux boutons. merci a vous deux pour la rapidité et la pertinence de vos réponses.
0
Rejoignez-nous