Problème actionPerformed(ActionEvent e)
Absot
Messages postés
819
Statut
Membre
-
c'estToutConQuandOnSait -
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:
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.. :/
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.. :/
A voir également:
- Problème actionPerformed(ActionEvent e)
- É majuscule - Guide
- E/s en série intel - Forum Carte graphique
- Comment fait-on des majuscules accentuées dans Excel? ✓ - Forum Excel
- E exposant clavier ✓ - Forum Bureautique
- [Ecrire Exposant 12] 10² ou 10³ ok mais... ✓ - Forum Windows
6 réponses
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
}
});
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?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.
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 :
- 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)");
}
}
}