Problème actionPerformed(ActionEvent e)

Problème actionPerformed(ActionEvent e) - Java - Programmation

Marsh Posté le 28-10-2009 à 21:18:44    

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:
 

Citation :


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

Reply

Marsh Posté le 28-10-2009 à 21:18:44   

Reply

Marsh Posté le 29-10-2009 à 01:51:05    

Facile:
 

Code :
  1. JButton connecter = new JButton("Connecter" );
  2. JButton cancel = new JButton("Cancel" );


 
 
Tu redéclares en fait deux variables LOCALES qui portent le même nom que tes variables d'instance "connecter" et "cancel". Evidemment ces variables locales prennent le dessus et le compilateur ne va rien te dire puisque c'est autorisé. Le problème c'est que dans le code de ta méthode actionPerformed, tu ne testes pas les mêmes variables, tu testes en fait les variables d'instance que tu n'as pas initialisées.
 
Tu dois donc juste enlever ces redéclarations:
 

Code :
  1. connecter = new JButton("Connecter" );
  2. cancel = new JButton("Cancel" );


 
Si tu veux être certain que ce sont bien les variables d'instance qui sont assignées, tu peux même écrire:
 

Code :
  1. this.connecter = new JButton("Connecter" );
  2. this.cancel = new JButton("Cancel" );


 
 
À part cela, une classe qui s'appelle "Interface", c'est perturbant.


Message édité par cbeyls le 29-10-2009 à 01:53:29
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed