bonjour a tous
j'ai un soucie......
je crée des bouton de couleur qui me servent ensuite a changer de couleur des partie de mon IHM.
donc, pour cela, je crée mes bouton dans une boucle for avec un tableau ce couleur.
et j'ajoute un actionListener.....
mais, la le problemes est que seul le dernier bouton crée accede a ma methode actionPerformed...
donc, je ne voit pas ou est le probleme.
voici mon code:
import java.awt.Button;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@SuppressWarnings("serial")
public class ChoixCouleur extends Panel implements ActionListener {
private Color[] tabCoul = { Color.RED, Color.WHITE, Color.BLACK,
Color.yellow, Color.GREEN, Color.CYAN, Color.PINK,
Color.LIGHT_GRAY, Color.BLUE };
private Button bhaut;
private Button bbas;
private Visu visu2;
public ChoixCouleur(Visu visu, boolean premierPlan) {
setBackground(Color.LIGHT_GRAY);
setLayout(new GridLayout(3, 3));
visu2=visu;
if (premierPlan) {
/**
* creer les couleurs des boutons de choix de la couleur du
* premierPlan
*/
for (int i = 0; i < tabCoul.length; i++) {
bhaut = new Button("");
bhaut.setBackground(tabCoul[i]);
bhaut.addActionListener(this);
add(bhaut);
}
} else {
/**
* creer les couleurs des boutons de choix de la couleur du
* SecondPlan
*/
for (int i = 0; i < tabCoul.length; i++) {
bbas = new Button("");
bbas.setBackground(tabCoul[i]);
bbas.addActionListener(this);
add(bbas);
}
}
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (e.getSource()==bhaut) {
System.out.println("ici");
/**
* seul mon dernier bouton rentre ici
*lorsque je clique dessus....
*
**/
visu2.setBackground(bhaut.getBackground());
} else {
// de meme ici
}
}
}
merci de votre aide
Le jour où Microsoft fera des choses qui ne plantent pas, ça sera des clous ...
J'ai déjà vu ce problème y'a quelques jours.
En fait je pense que le soucis vient du getSource() parce que comme tu écrases les anciennes références des JButtons, seule reste la dernière.
Et une solution est la suivante :
for (int i = 0 ; i < tabCoul.length ; i++) {
final Button bhaut = new Button("");
bhaut.setBackground(tabCoul[i]);
bhaut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("ici");
visu2.setBackground(bhaut.getBackground());
}
});
add(bhaut);
}
[EDIT]
J'ai modifié le code entre temps, on évite les if(e.getSource() ) machin parce que c'est pas très objet comme façon de procéder...
Si tu connais le nombre de Jbutton tu peux peut être faire un tableau de jbutton
JButton[] tableauBoutton = new JButton[30] ;
for (int i = 0; i < tabCoul.length; i++) {
tableauBoutton[i].setBackground(tabCoul[i]);
tableauBoutton[i].addActionListener(this);
add(tableauBoutton[i]);
}
Perso j'ai utilisé sa il n'y a pas longtemps et tout mes boutons fonctionnent
Euh oui tu peux aussi déclarer un tableau de type final et l'initialisé dans la classe anonyme, mois c'est comme ça que je fais.
probleme actionListener
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.