Problème actionPerformed(ActionEvent e)

Absot Messages postés 819 Statut Membre -  
 c'estToutConQuandOnSait -
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. Absot Messages postés 819 Statut Membre 44
     
    Personne ne sait svp?
    0
  2. tarek_dotzero Messages postés 834 Statut Membre 122
     
    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
  3. Absot Messages postés 819 Statut Membre 44
     
    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
  4. tarek_dotzero Messages postés 834 Statut Membre 122
     
    Juste après "new JButton()".
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. c'estToutConQuandOnSait
     
    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
  7. c'estToutConQuandOnSait
     
    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