While et ActionListener de Button [Résolu]

eldebutant 11 Messages postés vendredi 7 mars 2008Date d'inscription 6 avril 2008 Dernière intervention - 22 mars 2008 à 16:14 - Dernière réponse : eldebutant 11 Messages postés vendredi 7 mars 2008Date d'inscription 6 avril 2008 Dernière intervention
- 6 avril 2008 à 18:33
bonjour!


j'ai 2 boutons ( avec les dates de naissance) et quand je clike sur le premier il me renvoit aucun resultat (alros qu'il en existe bien dans la BDD) et sur le 2eme il me renvoit bien un resultat
les resultats sont  le nom en fonction de la date de naissance
et je ne comprends pas pourquoi ?!


mon code
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;


import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;




public class Eleve extends JFrame implements ActionListener{




 
 JButton button = new JButton();
 JPanel pan = new JPanel();
 private String dateNaiss;
 
 
 
 public Eleve()
 {
String pilote = "com.mysql.jdbc.Driver";
  
  try{
   
   Class.forName(pilote);
   Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/eleves","root","");
   Statement stmt = conn.createStatement();
   String requete = "SELECT date_naiss FROM eleves";
   ResultSet resultat = stmt.executeQuery(requete);
   
   
   while (resultat.next())
   {
    
    dateNaiss = resultat.getString("date_naiss");
    button = new JButton ("date de naissance le : "+dateNaiss);
    button.addActionListener(this);
    pan.add(button);
    setContentPane(pan);
    
    
   }
   


  }
  catch (Exception e){
   
   System.out.println("echec pilote : "+e);
  }
 }
 
 
 
 
 public void actionPerformed(ActionEvent e) 
   {
  if (e.getSource().equals(button))
  {
   
   String pilote = "com.mysql.jdbc.Driver";
   
   try{
    
    Class.forName(pilote);
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/eleves","root","");
    Statement stmt = conn.createStatement();    String rekette "SELECT nom_eleve FROM eleves WHERE date_naiss "+"""+dateNaiss+""";
    System.out.println(rekette);
    ResultSet resultatt = stmt.executeQuery(rekette);
   
   
   
   try {
    while (resultatt.next())
    {
     String nom = resultatt.getString("nom_eleve");
     System.out.println("nom_eleve" +nom);
     
   
    }
  
   }
   catch (Exception e1){
    
    System.out.println("echec pilote : "+e1);
   }
   
    }
   catch (Exception e1){
    
    System.out.println("echec pilote : "+e1);
   }
   
   
   }
  }
   
 
 
 
 
 
 public static void main(String[] args) {
  Eleve elv = new Eleve();
  elv.setSize(200,200);
  elv.setVisible(true);


 }


}





merci pour votre aide!
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
extraman1 103 Messages postés lundi 8 septembre 2003Date d'inscription 26 décembre 2009 Dernière intervention - 6 avril 2008 à 18:28
3
Merci
Salut

Désolé,

  while (resultat.next())
   {
    
    dateNaiss = resultat.getString("date_naiss");
   button.add(new JButton ("date de naissance le : "+dateNaiss));
    button.get(i).setName(dateNaiss);                        
    button.get(i).addActionListener(this);                    
    pan.add(button.get(i));
    i++; =>Rajoute ça
   }

Voilà ce sera mieu déjà

extraman1

Merci extraman1 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de extraman1
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 22 mars 2008 à 17:55
0
Merci
Salut,

Et bien au moins, t'es sûr que ton bouton est crée là !

Ton problème est très simple : tu ne stocke que la dernière instance de ton bouton dans ta variable button, du coup, ton test  if (e.getSource().equals(button)) te renverra vrai que pour le dernier bouton crée !

Revoie ton algorithme : soit tu ajoute tout les boutons que tu crée dans une liste, et tu la parcoure dans ton actionPerformed (loin d'être optimisé !), soit tu ajoute un nom différent à chaque bouton (méthode setName), et tu teste alors ce nom dans ton actionPerformed (beaucoup plus propre et optimisé !).
______________________________________
DarK Sidious
Commenter la réponse de cs_DARKSIDIOUS
eldebutant 11 Messages postés vendredi 7 mars 2008Date d'inscription 6 avril 2008 Dernière intervention - 23 mars 2008 à 19:17
0
Merci
ok
j'ai utilisé getName() pour récuperer le nom de mon bouton
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Vector;


import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;




public class Eleve extends JFrame implements ActionListener{


 
 
 private JButton button =  new JButton();
 JPanel pan = new JPanel();
 private String dateNaiss;
 private String nomBut;
 
 
 
 
 public Eleve()
 {
String pilote = "com.mysql.jdbc.Driver";
  
  try{
   
   Class.forName(pilote);
   Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/eleves","root","");
   Statement stmt = conn.createStatement();
   String requete = "SELECT date_naiss FROM eleves";
   ResultSet resultat = stmt.executeQuery(requete);
   
   
   while (resultat.next())
   {
    
    dateNaiss = resultat.getString("date_naiss");
    button = new JButton ("date de naissance le : "+dateNaiss);
    button.setName(dateNaiss);                           ==>setName
    button.addActionListener(this);
    pan.add(button);
    setContentPane(pan);
    
    
   }
   


  }
  catch (Exception e){
   
   System.out.println("echec pilote : "+e);
  }
 }
 
 
 
 
 public void actionPerformed(ActionEvent e) 
   {
  if (e.getSource().equals(button))
  {   nomBut button.getName();                 > getName() 
   String pilote  = "com.mysql.jdbc.Driver";
   
   try{
    
    Class.forName(pilote);
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/eleves","root","");
    Statement stmt = conn.createStatement();
    
        String rekette "SELECT nom_eleve FROM eleves WHERE date_naiss "+"""+nomBut+""";
    System.out.println(rekette);
    ResultSet resultatt = stmt.executeQuery(rekette);
   
   
   
   try {
    while (resultatt.next())
    {
     String nom = resultatt.getString("nom_eleve");
     System.out.println("nom_eleve" +nom);
     
   
    }
  
   }
   catch (Exception e1){
    
    System.out.println("echec pilote : "+e1);
   }
   
    }
   catch (Exception e1){
    
    System.out.println("echec pilote : "+e1);
   }
   
   
   }
  }
   
 
 
 
 
 
 public static void main(String[] args) {
  Eleve elv = new Eleve();
  elv.setSize(200,200);
  elv.setVisible(true);


 }


}


mais rien de concluant
Commenter la réponse de eldebutant
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 23 mars 2008 à 20:28
0
Merci
Salut,

T'as rien compris à ce que j'ai dit ?

Il ne faut pas faire : if (e.getSource().equals(button)) car c'est lui qui ne marche pas comme tu voudrais ! Il faut le remplacer par un test du nom du bouton :
if (e.getSource()getName.equals("nomDuBouton1")) {
    // il s'agit du bouton1 !
}  
______________________________________
DarK Sidious
Commenter la réponse de cs_DARKSIDIOUS
uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention - 23 mars 2008 à 21:14
0
Merci
Si j'ai bien compris, le nom du bouton correspond à la date de naissance (p.ex. 1980-11-29).
Alors pour le requète il vaut mieux la convertir en java.sql.Date et utiliser un "PreparedStatement".
Quelquechose comme ceci:

    public void actionPerformed(ActionEvent e) {
        Object source = e.getSource();
        if (source instanceof JButton && ((JButton)source).getName().contains("-")) {
            nomBut = ((JButton)source).getName();
...                PreparedStatement stmt conn.prepareStatement("SELECT nom_eleve FROM eleves WHERE  date_naiss ?");
                Calendar c = Calendar.getInstance();
                c.set(Integer.parseInt(nomBut.substring(0, 4)),
                        Integer.parseInt(nomBut.substring(5, 7))-1,
                        Integer.parseInt(nomBut.substring(8, 10)));
                java.sql.Date date = new java.sql.Date(c.getTime().getTime());
                stmt.setDate(1, date);
                ResultSet resultatt = stmt.executeQuery();
Commenter la réponse de uhrand
eldebutant 11 Messages postés vendredi 7 mars 2008Date d'inscription 6 avril 2008 Dernière intervention - 23 mars 2008 à 22:20
0
Merci
et faire ça :
public

void actionPerformed(ActionEvent e) {

nomBut =
button.getName();

if (e.getSource().equals(
nomBut)){

....

 

?
Commenter la réponse de eldebutant
uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention - 23 mars 2008 à 23:33
0
Merci
1. "nomBut" contiendra uniquement le nom du dernier bouton, donc ça ne marchera pas pour les autres boutons!
2. "e.getSource()" est  un bouton et pas un nom! Donc ça ne marchera pas non plus de comparer un bouton avec un nom. Il faut comparer ce qui comparable!
Commenter la réponse de uhrand
eldebutant 11 Messages postés vendredi 7 mars 2008Date d'inscription 6 avril 2008 Dernière intervention - 24 mars 2008 à 15:32
0
Merci
huummm ok
donc j'abandonne setName ? ou est ce que l'on m'a mis sur la bonne voie?
Commenter la réponse de eldebutant
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 24 mars 2008 à 16:46
0
Merci
Salut,

On t'a mis sur la bonne voie, mais tu n'a toujours pas compris le problème : il ne faut plus utiliser la variable button !!!

Fait au moins l'effort de lire et comprendre les posts qu'on a fait jusqu'à maintenant !

______________________________________

DarK Sidious
Commenter la réponse de cs_DARKSIDIOUS
eldebutant 11 Messages postés vendredi 7 mars 2008Date d'inscription 6 avril 2008 Dernière intervention - 24 mars 2008 à 18:45
0
Merci
dac!
Commenter la réponse de eldebutant
extraman1 103 Messages postés lundi 8 septembre 2003Date d'inscription 26 décembre 2009 Dernière intervention - 3 avril 2008 à 11:58
0
Merci
Salut,

Voilà ce que tu dois faire,

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Vector; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Eleve extends JFrame implements ActionListener{

 
  private ArrayList<JButton> button new ArrayList<JButton>();  >Comme dit plus haut tu prépares une liste de bouton
 JPanel pan = new JPanel();
 private String dateNaiss;
 private String nomBut;
 
 
 
 
 public Eleve()
 {
String pilote = "com.mysql.jdbc.Driver";
  
  try{
   
   Class.forName(pilote);
   Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/eleves","root","");
   Statement stmt = conn.createStatement();
   String requete = "SELECT date_naiss FROM eleves";
   ResultSet resultat = stmt.executeQuery(requete);
   
   int i = 0;
   while (resultat.next())
   {
    
    dateNaiss = resultat.getString("date_naiss");
   button.add(new JButton ("date de naissance le : "+dateNaiss)); = > Là tu ajoutes un bouton
    button.get(i).setName(dateNaiss);                           ==>tu lui donnes un nom
    button.get(i).addActionListener(this);                        ==>tu lui ajoutes une ActionListener
    pan.add(button.get(i));

   }
   setContentPane(pan); ==> C'est mieux de le mettre là

  }
  catch (Exception e){
   
   System.out.println("echec pilote : "+e);
  }
 }
 
 
 
 
 public void actionPerformed(ActionEvent e)
   {
  if (button.contains((JButton)e.getSource())) ==> La partie que tu as pas compris c'est que tu dois vérifié que ton bouton cliqué fait partie de ta liste
  {
   nomBut = ((JButton)e.getSource()).getName();  Là tu peux copier le nom de ton bouton cliqué</gras></italique> </gras>
   String pilote = "com.mysql.jdbc.Driver";
   
   try{
    
    Class.forName(pilote);
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/eleves","root","");
    Statement stmt = conn.createStatement();
    
        String rekette "SELECT nom_eleve FROM eleves WHERE date_naiss "+"""+nomBut+""";
    System.out.println(rekette);
    ResultSet resultatt = stmt.executeQuery(rekette);
   
   
   
   try {
    while (resultatt.next())
    {
     String nom = resultatt.getString("nom_eleve");
     System.out.println("nom_eleve" +nom);
     
   
    }
  
   }
   catch (Exception e1){
    
    System.out.println("echec pilote : "+e1);
   }
   
    }
   catch (Exception e1){
    
    System.out.println("echec pilote : "+e1);
   }
   
   
   }
  }
  
 
 
 
 
 
 public static void main(String[] args) {
  Eleve elv = new Eleve();
  elv.setSize(200,200);
  elv.setVisible(true);

 }

}

Voilà, tiens moi au courant

A++

extraman1
Commenter la réponse de extraman1
eldebutant 11 Messages postés vendredi 7 mars 2008Date d'inscription 6 avril 2008 Dernière intervention - 6 avril 2008 à 17:44
0
Merci
hello
désolé pour ma réponse un peu tardive

j'ai testé ton code et il n'y a qu'un seul bouton qui s'affiche (au lieu de 2) :(
Commenter la réponse de eldebutant
eldebutant 11 Messages postés vendredi 7 mars 2008Date d'inscription 6 avril 2008 Dernière intervention - 6 avril 2008 à 18:33
0
Merci
ah oui effectivement, c'est un peu logique :d
là ça marche nickel!!

merci beaucoup !!!!!!!!!!!!!!!!
Commenter la réponse de eldebutant

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.