Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : ecouteur et nombre indefini de Button [ Divers / Débutant(e) ] (oceane751)

dimanche 15 avril 2007 à 18:38:42 | ecouteur et nombre indefini de Button

oceane751

bonjour à tous!!

j'ai un nombre indefini de bouton, issu d'une requete et le soucis est que l'ecouteur n'est actif que pour seulement le dernier bouton et non pas pour l'ensemble des boutons
voici mon bout de code :
[code]
......

ResultSet resultat = instruction.executeQuery("SELECT nom, prix FROM carte ORDER BY type");
      
   while(resultat.next())
   {
    
    String resul = resultat.getString("nom");
    String prix = resultat.getString("prix");
    labe = new JLabel(resul);
    text = new TextField(prix);
    bouton = new Button("modifier");
    
    
    panel.setLayout(new GridLayout(5,2));
    panel.add(labe);
    panel.add(text);
    panel.add(bouton);
    bouton.addActionListener(this);
         
   }

public void actionPerformed(ActionEvent e)
 {
  if ( (Button) e.getSource() == bouton )

  {
   int reponse = JOptionPane.showConfirmDialog(null,"Ticket", "confirmation", JOptionPane.YES_NO_OPTION);
   
   if (reponse == JOptionPane.YES_OPTION)
   {
.......
[/code]

pourtant l'ecouteur est bien dans la boucle while, je ne comprends pas trop porquoi ça en marche pas...

quelqu'un peut il m'aider?

merci!


lundi 16 avril 2007 à 09:16:02 | Re : ecouteur et nombre indefini de Button

indiana_jules

Salut
cela vient peut être du fait que tu utilises des variables globales. Essai plutot des variables locales à ta boucle.

Voilà

[#Tout le monde a des idées : la preuve, c'est qu'il y en a de mauvaises]
[#Je ne comprends pas tout, mais je parle de tout : c'est ce qui compte]

lundi 16 avril 2007 à 14:01:11 | Re : ecouteur et nombre indefini de Button

oceane751

comment ça?
je ne comprends pas..

lundi 16 avril 2007 à 21:31:27 | Re : ecouteur et nombre indefini de Button

cheplu

A chaque passage dans ta boucle, tu change la valeur de ta variable "bouton". Une même varaible ne peut pas avoir plusieurs valeurs! A la sortie de ta bouclen il ne reste dans "bouton" que la valeur pour le dernier passage, soit le dernier bouton.

Tu n'as gardé aucune référence sur tous les autres boutons de créés. Si tu doit avoir plusieurs boutons, tu devrait stocké chacun d'entre eux dans un tableau ou un ArrayList.

mardi 17 avril 2007 à 00:33:34 | Re : ecouteur et nombre indefini de Button

oceane751

et si je n'utilise qu'un seul bouton?


mardi 17 avril 2007 à 15:21:58 | Re : ecouteur et nombre indefini de Button

Twinuts

Membre Club Administrateur CodeS-SourceS
Salut,

sinon tu peux utiliser une liste de tes boutons ou encore de faire de l'introspection sur ton panel...

exemple de code pour la liste:

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

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


public class Test extends JFrame implements ActionListener{

    private List<JButton> buttons = new ArrayList<JButton>();
   
    public Test(){       
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(0, 1, 5, 5));
        //simule ton while
        for(int i = 1; i < 11; ++i){
            JButton bt = new JButton("Bouton " + i);
            bt.addActionListener(this);
            panel.add(bt);
            //ajoute à la liste
            buttons.add(bt);
        }
        setContentPane(panel);
        pack();
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
   
    public static void main(String[] args) {
        new Test().setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        Object src = e.getSource();
        //teste si le bouton est dans la liste
        int index = -1;
        if((index = buttons.indexOf(src)) != -1){
            JButton bt = buttons.get(index);
            JOptionPane.showMessageDialog(this, "Je suis le bouton : " + bt.getText());
        }
    }
}




------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA

mardi 17 avril 2007 à 17:38:11 | Re : ecouteur et nombre indefini de Button

oceane751

ah aouis c'est pas mal comme code!!!
mais si je rajoute une TextField, ça va poser pb, non?

mardi 17 avril 2007 à 17:46:45 | Re : ecouteur et nombre indefini de Button

oceane751

'jai fait ça :

OptionPane.showMessageDialog(

null, "Je suis le bouton : " + bt.getText()+" " +((TextField)e.getSource()).getText());

mais ya beaucoup d'erreurs....

mardi 17 avril 2007 à 18:04:28 | Re : ecouteur et nombre indefini de Button

oceane751

j'ai refait :

public

void actionPerformed(ActionEvent e) {

Object src = e.getSource();

//teste si le bouton est dans la liste

int index = -1;

if((index = buttons.indexOf(src)) != -1){

JButton bt =

buttons.get(index);

if ((TextField)e.getSource() == text)

{

JOptionPane.showMessageDialog(

null, "Je suis le bouton : " + bt.getText() + " " + text.getText() );

}

}

}


puis les erreurs :

Exception in thread "AWT-EventQueue-0"

java.lang.ClassCastException: javax.swing.JButton

at test.actionPerformed(

test.java:56)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

at java.awt.Component.processMouseEvent(Unknown Source)

at javax.swing.JComponent.processMouseEvent(Unknown Source)

at java.awt.Component.processEvent(Unknown Source)

at java.awt.Container.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Window.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)

 

qu'en penses tu?

merci..


mardi 17 avril 2007 à 18:58:57 | Re : ecouteur et nombre indefini de Button

Twinuts

Membre Club Administrateur CodeS-SourceS
Salut,

toujours le meme problème pour les textes labels, etc .... de plus tu fais

 if ((TextField)e.getSource() == text)

hors dans la méthode actionPerformed e.getSource ne pourra jamais etre une instance d'un champ texte.

Note : Tu utilise un JLabel, un TextField, Button et c'est crade sérieux parce que tu mélange les composants AWT et SWING ce qu'il ne faut absolument pas faire sous peine d'obtenir des effets non désirés.

voici une solution que tu pourrais adopter :

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Hashtable;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class Test extends JFrame implements ActionListener{

    private Hashtable<JButton, MyData> myDatas = new Hashtable<JButton, MyData>();
  
    public Test(){      
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(0, 1, 5, 5));
        //simule ton while
        for(int i = 1; i < 11; ++i){
            MyData md = new MyData();
            md.label = new JLabel("Label " + i);
            md.text = new JTextField("Text " + i);
            JButton button = new JButton("JButton " + i);
            button.addActionListener(this);
            panel.add(button);//affiche seulement le bouton  mais tu peux afficher ce que tu veux
            //ajoute à la liste
            //note ici on place le bouton comme clé vu qu'il est
            //le seul à pouvoir déclancher la méthode actionPerformed
            myDatas.put(button, md);
        }
        setContentPane(panel);
        pack();
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
  
    public static void main(String[] args) {
        new Test().setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        Object src = e.getSource();
        //teste si le bouton est dans la liste
        if(myDatas.containsKey(src)){
            JButton bt = (JButton)src;
            MyData md = myDatas.get(src);//récupere les champs selon le bouton
            JOptionPane.showMessageDialog(this, "Je suis le bouton : " +
                    bt.getText() + ", et moi le texte : " +
                    md.text.getText() + ", et moi le label : " + md.label.getText());
        }
    }
   
    //cette classe contient :
    // JLabel
    // JTextField
    class MyData {
        public JLabel         label     = null;
        public JTextField     text     = null;
    }
}


------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA


1 2

Cette discussion est classé dans : bouton, button, resultat, prix, ecouteur


Répondre à ce message

Sujets en rapport avec ce message

B [ par Noir ] Salut J'ai un petit probleme avec les Button avec AWT : Je fait un petit jeu sous forme d'applet. Le personage principal est manipulé au clavier et Button empeche une autre classe de recuperer les messages claviers [ par Noir ] Salut J'ai un petit probleme avec les Button avec AWT : Je fait un petit jeu sous forme d'applet. Le personage principal est manipulé au clavier et URGENTISSIME... !!! [ par Bison_Ravi_33 ] salut tout le monde....J'ai un projet à rendre dans 2 semaines...Un projet basé sur les JavaBeansJ'ai deja réalisé mes algorithmes... tout fonctionne boutons [ par Bison_Ravi_33 ] salut tout le monde....J'ai un projet à rendre dans 2 semaines...Un projet basé sur les JavaBeansJ'ai deja réalisé mes algorithmes... tout fonctionne Débugguage d'un code source [ par TiPunK ] Bonjour à tous, Voilà, je commence à développer en java en cours, et nous avons à construire pendant les travaux pratiques un système de vent Pb couleur button [ par Zach1 ] Bonjour,je suis entrain de travailler sur une application pour une association sportive,mon problem est le suivant :je veux changer la couleur d'un bo deplacer un bouton avec la souris en java [ par talibikeba ] Bonjour j'aimerais savoir comment deplacer un bouton à l'aide de la souris en java merciIn god we trust de jolie bouton [ par ge17 ] Bonjour.Je voulais savoir s'il existait des fonctions pour donner un effets plus jolie aux boutons. Par exemple, rendre leur forme moins rectangulaire java:ouvrir une fenetre via un clique bouton [ par hkahil ] Bonjourje viens tout juste de me mettre au javajai creer une interface avec 3 boutonsje voudrais juste ouvrir une frame en cliquant sur un boutonsi vo changer la profondeur d'un bouton [ par vincej ] Bonjour,J'ai plusieur bouton sur un même calque et je voudrai ka chaque click le bout vienne au premier plan.Merci d'avanceVincej


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,499 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.