melimess a écrit :
non, c'est pas que je ne sais pas quel type de bouton que j'utilise, je t'ai dis j'ai crée une classe bouton (elle a un fond spécifique....) qui hérite de JButton, et puis le bb9 est une instance de cette classe, je vais voir le site que tu ma donnée peut être je trouverai des réponses a mes questions, merci et a bientôt :
|
Je rejoins breizhbugs, j'pense que y a un problème de conception... M'enfin j'vais essayer de m'expliquer, mais bon vu que tu donnes vraiment peu de détails il y a une grande part de supposition.
Ton problème c'est que tu as une grille de boutons, et que quand tu cliques sur un des boutons, tu ajoutes un nouveau bouton par-dessus un autre déjà existant. Visiblement, tu pars du principe que le nouveau devrait toujours s'afficher par-dessus l'ancien. Et visiblement, ce n'est pas le cas, et c'est pour ca que lorsque l'affichage se rafraichit (ex: quand tu redimensionnes), tu as l'impression que l'ancien bouton réaparrait. Sauf qu'il n'avait jamais disparu, c'est juste qu'il était caché par le nouveau, mais quand tu rafraichis c'est le nouveau qui est caché par l'ancien. T'y peux rien, c'est comme ca et indépendant de ta volonté, perso ca ne me choque pas, je ne vois pas l'intéret dans une interface bien concue d'avoir des boutons qui se chevauchent, donc le comportement de l'affichage dans un cas comme ca, j'm'en bats les steaks vu que j'aurais jamais à m'en soucier.
Maintenant, en-dehors des histoires de problèmes de conception, si tu veux garder ta grille de boutons et pouvoir les "changer", tu vas pas couper à devoir garder des références de tous tes boutons. Comment? Ben facile, d'après ton code tu as une matrice d'entiers quelque part qui représente ton plateau, ben t'as qu'à la dupliquer pour les boutons. Là où tu déclares ta matrice, rajoute une déclaration pour ta matrice de boutons:
JButton[][] matriceBoutons; |
Là où tu dimensionnes ta matrice, dimensionnes ta matrice de boutons à la meme taille, et enfin, dans la boucle où tu créés tous les boutons, assignes-les dans la matrice, par ex:
JButton bouton = new JButton(...);
// .... le reste de ton traitement du bouton, setBounds() etc
matriceBoutons[i][j] = bouton; |
Et enfin, dans ton actionPerformed(), tu récupères le bouton correspondant à la case cliquée dans la matrice, et t'en fais ce que tu veux! En l'occurence, si tu tiens à garder ton bb9 tel quel, tu vires l'ancien bouton du container avant d'ajouter ton bb9. Le code que tu as posté au début m'al l'air pourri au possible, j'y reviendrai, en attendant voilà l'idée:
public void actionPerformed(ActionEvent e)
{
if ((e.getSource()==b1)&&(matrice[0][0]==0)) {
// Si j'ai bien compris, tu joues le coup en mémoire
matrice[0][0]=rond;
jouer(rond);
// Et là tu veux mettre ton bouton bb9 pour afficher un rond:
// 1- tu vires du container l'ancien bouton qui est en [0][0]
remove(matriceBoutons[0][0]);
// 2- tu ajoutes ton bb9 au container
add(bb9);
// 3- tu signales à la matrice de boutons que tu as remplacé le bouton en [0][0]
matriceBoutons[0][0]=bb9;
// Après tu continues ton traitement normal de bb9, setBounds etc
}
} |
... Et ca devrait marcher, moyennant quelques possibles erreurs de ma part vu que j'écris ca sans tester.
Sauf qu'en écrivant ca, j'me rends compte d'un truc: le bouton cliqué dans le cas du code que tu as copié, c'est b1 en fait... Donc tu as bien gardé une référence de tous tes boutons en dur quelque part déjà? Mouarf.
Bref, revenons-en à la conception de ton truc. Une matrice de 3*3, c'est un morpion que tu essaies de faire? Si oui, tu te compliques la vie mais alors d'une force, et en plus à tout coder en dur ton truc est absolument pas maintenable.
Suggestion vite fait, ca fait longtemps que j'ai pas fait du Swing donc bon:
- Oublies tous tes boutons
- Crées une classe Cacaprout (appelles-là comme tu veux) qui extends JComponent et implements MouseListener
- Ta classe Cacaprout, tu lui donnes une référence vers ta matrice de jeu
- Tu redéfinis sa méthode paint() pour lui faire dessiner la grille en fonction de la matrice de jeu (commence juste avec des lignes et des cercles, voir ici http://download.oracle.com/javase/ [...] tives.html, après si t'as le temps ou que tu trouves ca trop moche, lis le reste de la doc pour importer une jolie image de plateau de jeu et des jolis pions dessinés avec amour sous Paint)
- Tu implémentes sa méthode onMouseClicked(), tu lui fais calculer quelle case de la matrice a été cliquée en fonction des coordonnées de la souris (et de la facon dont tu dessines la grille évidemment), tu modifies ta matrice en conséquence et demandes un repaint de ton objet.
- Après t'as juste à créer un object Cacaprout, lui passer la matrice et l'ajouter dans ta fenetre.
Et c'est tout! En gros hein, j'ai pas fait ce genre de trucs depuis que j'ai fini l'IUT quoi.
---------------
C'était vraiment très intéressant.