While et ActionListener de Button

Résolu
eldebutant Messages postés 11 Date d'inscription vendredi 7 mars 2008 Statut Membre Dernière intervention 6 avril 2008 - 22 mars 2008 à 16:14
eldebutant Messages postés 11 Date d'inscription vendredi 7 mars 2008 Statut Membre Dernière intervention 6 avril 2008 - 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!

13 réponses

extraman1 Messages postés 103 Date d'inscription lundi 8 septembre 2003 Statut Membre Dernière intervention 26 décembre 2009 2
6 avril 2008 à 18:28
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
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
22 mars 2008 à 17:55
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
0
eldebutant Messages postés 11 Date d'inscription vendredi 7 mars 2008 Statut Membre Dernière intervention 6 avril 2008
23 mars 2008 à 19:17
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
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 mars 2008 à 20:28
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
0

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

Posez votre question
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
23 mars 2008 à 21:14
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();
0
eldebutant Messages postés 11 Date d'inscription vendredi 7 mars 2008 Statut Membre Dernière intervention 6 avril 2008
23 mars 2008 à 22:20
et faire ça :
public

void actionPerformed(ActionEvent e) {

nomBut =
button.getName();

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

....

 

?
0
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
23 mars 2008 à 23:33
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!
0
eldebutant Messages postés 11 Date d'inscription vendredi 7 mars 2008 Statut Membre Dernière intervention 6 avril 2008
24 mars 2008 à 15:32
huummm ok
donc j'abandonne setName ? ou est ce que l'on m'a mis sur la bonne voie?
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
24 mars 2008 à 16:46
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
0
eldebutant Messages postés 11 Date d'inscription vendredi 7 mars 2008 Statut Membre Dernière intervention 6 avril 2008
24 mars 2008 à 18:45
dac!
0
extraman1 Messages postés 103 Date d'inscription lundi 8 septembre 2003 Statut Membre Dernière intervention 26 décembre 2009 2
3 avril 2008 à 11:58
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
0
eldebutant Messages postés 11 Date d'inscription vendredi 7 mars 2008 Statut Membre Dernière intervention 6 avril 2008
6 avril 2008 à 17:44
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) :(
0
eldebutant Messages postés 11 Date d'inscription vendredi 7 mars 2008 Statut Membre Dernière intervention 6 avril 2008
6 avril 2008 à 18:33
ah oui effectivement, c'est un peu logique :d
là ça marche nickel!!

merci beaucoup !!!!!!!!!!!!!!!!
0
Rejoignez-nous