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.. :/

6 réponses

Absot Messages postés 819 Statut Membre 44
 
Personne ne sait svp?
0
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
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
tarek_dotzero Messages postés 834 Statut Membre 122
 
Juste après "new JButton()".
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
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