cs_oceane751
Messages postés151Date d'inscriptionjeudi 23 décembre 2004StatutMembreDernière intervention20 décembre 2012
-
15 avril 2007 à 18:38
cs_oceane751
Messages postés151Date d'inscriptionjeudi 23 décembre 2004StatutMembreDernière intervention20 décembre 2012
-
17 avril 2007 à 21:12
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 :
......
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)
{
.......
pourtant l'ecouteur est bien dans la boucle while, je ne comprends pas trop porquoi ça en marche pas...
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 17 avril 2007 à 20:38
Salut,
le Hashtable est une collection indéxé par des valeurs et non des indices comme les tableaux, vector, list etc ... ce qui permet de simplifier la vie aux developpeurs dans certains cas (voir doc hashtable)...
la classe MyData permet simplement d'associer des objets à un un bouton donné histoire de les retrouver le plus simplement possible.
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
cheplu
Messages postés16Date d'inscriptionvendredi 2 février 2007StatutMembreDernière intervention 1 juillet 2007 16 avril 2007 à 21:31
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
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 ..."
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 17 avril 2007 à 18:58
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.
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 ..."