Problème actionPerformed(ActionEvent e)

Bonjour, je suis en train de me faire une interface graphique pour un cours et j'ai un problème avec mes actions, je ne comprends pas pourquoi certaines actions fonctionnent et pas d'autres, j'ai bien pensé à ajouter une action aux variables concernées..

Mon problème est quand je clique sur Quitter dans mon menu, ça ferme bien mais quand je clique sur Connecter ou Cancel par exemple, il ne se passe rien alors que tout est analysé dans le même actionPerformed(ActionEvent e) avec des if..

Voici mon code:

package app;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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


public class Interface extends JFrame implements ActionListener{
	
	// Attributs
	private PopClient pop;
	private JMenuItem quitter;
	private JTextField user = new JTextField();
	private JTextField mdp = new JTextField();
	private JTextField host = new JTextField();
	private JTextField port = new JTextField();
	private JTextArea message = new JTextArea();
	private JButton connecter;
	private JButton cancel;
	
	
		// Constructeur
		public Interface()
		{
			// Donner un titre à la fenetre
			this.setTitle("PopServer");
			// Mettre une taille à la fenetre (largeur,hauteur)
			this.setSize(350,175);
			// Empecher le redimensionnement de la fenetre
			this.setResizable(false);
			// Positionner la fenetre (x,y), null pour le centre
			this.setLocationRelativeTo(null);
			// L'application s'arrête lorsque la fenêtre est fermée.
		     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			//Fonction pour initialiser les composants
			this.init();
			// Rendre visible la fenetre
			this.setVisible(true);
		}
		
		
		
		// Fonction pour initialiser le menu
		private void init()
		{
			// Menu
			JMenuBar menubar = new JMenuBar();
			JMenu menu = new JMenu("Fichier");
			quitter = new JMenuItem("Quitter");
			// Ajouter le menuitem au menu
			menu.add(quitter);
			menubar.add(menu);
			quitter.addActionListener(this);
			// Positionner le menu en haut de la fenetre
			this.setJMenuBar(menubar);
			// Déclaration des JPanel
			JPanel panelRenseignements = new JPanel(new BorderLayout());
			JPanel panelBoutton = new JPanel();
			// Déclaration d'un GridLayout de 3 lignes et 2 colonnes
			panelRenseignements.setLayout(new GridLayout(4,3));
			panelRenseignements.add(new JLabel("User :"));
			panelRenseignements.add(user);
			panelRenseignements.add(new JLabel("Mot de passe :"));
			panelRenseignements.add(mdp);
			panelRenseignements.add(new JLabel("Host :"));
			panelRenseignements.add(host);
			panelRenseignements.add(new JLabel("Port :"));
			panelRenseignements.add(port);
			// Bouttons
			JButton connecter = new JButton("Connecter");
			JButton cancel = new JButton("Cancel");
			panelBoutton.add(connecter);
			panelBoutton.add(cancel);
			// Ajout des actions			
			cancel.addActionListener(this);
			connecter.addActionListener(this);
			// Ajout des JPanel à la JFrame
			getContentPane().add(panelRenseignements, BorderLayout.NORTH);
			getContentPane().add(panelBoutton, BorderLayout.SOUTH);
		}
		
		
		
		
		
	
		// Fonction pour vider les champs Texte
		public void clear() 
               {
			  user.setText("");
			  host.setText("");
			  port.setText("");
			  mdp.setText("");
		}
		
		
		
		
		public void actionPerformed(ActionEvent e)
   {
			if (e.getSource() == quitter)
			{
				System.exit(0);
			
			}else if (e.getSource() == connecter)
				{
					Menu fenetreMenu = new Menu();
				}else if (e.getSource() == cancel)
					{
						clear();
					}
	
   }		


}
		
		

	



Je m'acharne depuis quelques heures dessus mais bon, c'est ma première fenêtre graphique donc je pense que c'est normal de faire des erreurs.. :/
Configuration: Windows Vista
Firefox 3.5.3

6 réponses

  1. Moi aussi j'ai pas trouvé l'erreur, de toute façon j'utilise une méthode différente:

    
    monButton.addActionListener(new ActionListener(){
    
              public void actionPerformed(ActionEvent e)
              {
                      // Traitement à lancer, sans avoir besoin des if-else
               }
    });
    
    
    
    0
    1. Ta méthode fonctionne donc je vais la garder mais tu l'insers à la fin du code ou juste après la création de ces JButton?
      0
      1. Juste après "new JButton()".
        0
        1. Salut, je suis aussi super débutant en java, mais après avoir touillé un peu j'ai compris ce qui cloche.

          Tout d'abord (un bon exercice pour le béotien que je suis) j'ai du comprendre qu'il manquait un méthode main pour faire tourner en local, je l'ai donc rajoutée (après avoir renommé Interface en TestBidon, Interface prête un peu à confusion pour moi...)

          public static void main(String[] args) {
          TestBidon bidon = new TestBidon();
          }

          Ensuite le problème était le suivant : tes boutons connect et clear tu les déclares deux fois à deux endroits différents. Une première fois comme variables 'globales' tout en haut :

          private JButton connecter;
          private JButton cancel;

          Fais le test de mettre ces lignes en commentaires, et tu verras que t'auras une erreur de compilation dans ta classe actionPerformed, y sont plus reconnus.

          Après tes boutons tu les as redéclarés dans la classe init, cette-fois en les "instanciants" :

          JButton connecter = new JButton("Connecter");
          JButton cancel = new JButton("Cancel");

          En fait tu prends ces 2 lignes et tu les déplaces là ou t'avais ta première déclaration tout en haut

          Et ça marche... y'a certainement plus élégant - suis toujours preneur des bons conseils.
          0
          1. Ah encore 2 trucs :
            - Ma note ci-dessus corrige le probleme que les events n'étaient pas traités, après coup je vois que le clear fonctionne mais pas encore le 'menu' derrière le bouton connect, par contre l'appel à Menu s'effectue bien.
            - J'avais aussi rajouté un champ avec insertion de strings depuis actionPerformed pour voir où ça clochait, et ai par conséquent changé les if - else if en juste des ifs, suis pas sûr si ça a eu une influence, voilà au cas où mon code :

            package masterFile;
            
            import java.awt.BorderLayout;
            import java.awt.GridLayout;
            import java.awt.Menu;
            import java.awt.event.ActionEvent;
            import java.awt.event.ActionListener;
            
            import javax.swing.JButton;
            import javax.swing.JFrame;
            import javax.swing.JLabel;
            import javax.swing.JMenu;
            import javax.swing.JMenuBar;
            import javax.swing.JMenuItem;
            import javax.swing.JPanel;
            import javax.swing.JTextArea;
            import javax.swing.JTextField;
            
            
            public class TestBidon extends JFrame implements ActionListener{
                
                // Attributs
               // private PopClient pop;
                private JMenuItem quitter;
                private JTextField user = new JTextField();
                private JTextField mdp = new JTextField();
                private JTextField host = new JTextField();
                private JTextField port = new JTextField();
                private JTextField debugField = new JTextField();
                
                private JTextArea message = new JTextArea();
                //private JButton connecter;
                //private JButton cancel;
                JButton connecter = new JButton("Connecter");
                JButton cancel = new JButton("Cancel");
                
                
                public static void main(String[] args) {
                    TestBidon bidon = new TestBidon();
                }
                
                    // Constructeur
                    public TestBidon()
                    {
                        // Donner un titre à la fenetre
                        this.setTitle("PopServer");
                        // Mettre une taille à la fenetre (largeur,hauteur)
                        this.setSize(350,175);
                        // Empecher le redimensionnement de la fenetre
                        this.setResizable(false);
                        // Positionner la fenetre (x,y), null pour le centre
                        this.setLocationRelativeTo(null);
                        // L'application s'arrête lorsque la fenêtre est fermée.
                         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                        //Fonction pour initialiser les composants
                        this.init();
                        // Rendre visible la fenetre
                        this.setVisible(true);
                    }
                    
                    
                    
                    // Fonction pour initialiser le menu
                    private void init()
                    {
                        // Menu
                        JMenuBar menubar = new JMenuBar();
                        JMenu menu = new JMenu("Fichier");
                        quitter = new JMenuItem("Quitter");
                        // Ajouter le menuitem au menu
                        menu.add(quitter);
                        menubar.add(menu);
                        quitter.addActionListener(this);
                        // Positionner le menu en haut de la fenetre
                        this.setJMenuBar(menubar);
                        // Déclaration des JPanel
                        JPanel panelRenseignements = new JPanel(new BorderLayout());
                        JPanel panelBoutton = new JPanel();
                        // Déclaration d'un GridLayout de 3 lignes et 2 colonnes
                        panelRenseignements.setLayout(new GridLayout(5,3));
                        panelRenseignements.add(new JLabel("User :"));
                        panelRenseignements.add(user);
                        panelRenseignements.add(new JLabel("Mot de passe :"));
                        panelRenseignements.add(mdp);
                        panelRenseignements.add(new JLabel("Host :"));
                        panelRenseignements.add(host);
                        panelRenseignements.add(new JLabel("Port :"));
                        panelRenseignements.add(port);
                        panelRenseignements.add(new JLabel("Debug :"));
                        panelRenseignements.add(debugField);
                        // Bouttons
                        panelBoutton.add(connecter);
                        panelBoutton.add(cancel);
                        // Ajout des actions            
                        cancel.addActionListener(this);
                        connecter.addActionListener(this);
                        // Ajout des JPanel à la JFrame
                        getContentPane().add(panelRenseignements, BorderLayout.NORTH);
                        getContentPane().add(panelBoutton, BorderLayout.SOUTH);
                    }
                    
                    
                    
                    
                    
                
                    // Fonction pour vider les champs Texte
                    public void clear() 
                           {
                          user.setText("");
                          host.setText("");
                          port.setText("");
                          mdp.setText("");
                    }
                    
                    
                    
                    
                    public void actionPerformed(ActionEvent e)
               {
                        if (e.getSource() == quitter)
                        {
                            System.exit(0);
                        }
                        if (e.getSource() == connecter)
                            {
                                debugField.setText("connect (before)");
                                Menu fenetreMenu = new Menu();
                                debugField.setText("connect (after)");
                            }
                        if (e.getSource() == cancel)
                                {
                                    debugField.setText("clear (before)");
                                    clear();
                                    debugField.setText("clear (after)");
                                }
                                    
               }        
            
            
            }
            0