boutons en java

boutons en java - Java - Programmation

Marsh Posté le 21-12-2010 à 12:08:07    

bonjour, s'il vous plais aidez moi
 
voila, j'ai fait une grille de boutons, et je cherche quand je click sur un bouton (b1) pour une condition précise un autre bouton (b2) change d'apprence,
 
alors pour tous les bouton j'ai mis une seul fonction action performed, et des qu'il ya une click sur le bouton (b1), j'ai fait la creation de bouton avec une nouvelle icone,
ca marche, des que je clique sur b1,-> b2 change d'apprence avec la nouvelle icone  
le probleme des que je survole b2 avec la souris il revien a l'etat initiale
est ce que vous avez une idéé???
voila le code:
public void actionPerformed(ActionEvent e)  
{
 
int k=test();
System.out.println("k="+k);
if((e.getSource()==b1)&&(matrice[0][0]==0)){ matrice[0][0]=rond;
jouer(rond);
 
 
//le bouton que j'ai ajoute et que lors du sorvol de la souris il revien a l'etata initial
add(bb9);
if(x==2)if(y==2) bb9.setBounds(148,140,50,45);
System.out.println("affichage de la matrice " );
for (int i=0; i<3; i++)
for (int j=0; j<3; j++)
{
 
System.out.println("matrice["+i+"]["+j+"]="+matrice[i][j]);
}
 
}

Reply

Marsh Posté le 21-12-2010 à 12:08:07   

Reply

Marsh Posté le 22-12-2010 à 17:20:48    

Je pige que dalle. Enfin je pense deviner mais c'est pas très clair. Ta fonction là, elle est déclarée dans quelle classe, qui hérite de quoi? Quand tu fais add(bb9) c'est censé faire quoi? Si c'est ce que je pense, tu "ajoutes" ton bouton (avec la nouvelle apparence) au-dessus de celui déjà existant (au lieu de juste changer l'apparence du bouton existant). Donc tu as deux boutons superposés, sauf que je suppose que le comportement de l'affichage dans un cas comme celui-là est pas garanti vu que ca n'a pas trop de sens d'avoir plusieurs boutons superposés. En l'occurence, quand tu passes ta souris, le bouton initial est dessiné par-dessus le nouveau.

 

Donc si c'est bien ca, 2 solutions:
- en plus de ton add(bb9); tu t'arranges pour enlever le bouton qui était là avant,
- au lieu du add(bb9); tu récupères le bouton qui est là avant et tu changes son apparence pour de vrai.

 

Dans les deux cas il faut que tu aies un systeme pour récupérer tes boutons dans le code.

 

Dernière chose, si c'est pour un jeu ou il faut cliquer sur un plateau de cases, pas besoin de te faire chier avec des boutons, ya surement bien plus simple, genre une image toute bete avec un onClick() dessus qui te repère la case cliquée depuis les coordonées du clic. Enfin j'en sais rien, ca m'a l'air plus intuitif qu'une grille de boutons.


Message édité par lasnoufle le 22-12-2010 à 17:20:57

---------------
C'était vraiment très intéressant.
Reply

Marsh Posté le 22-12-2010 à 22:14:58    

bonsoir, merci pour ton aide,
pour les fonctions qui changent d'apparence des boutons est ce que tu peux me donner une ???
merci

Message cité 1 fois
Message édité par melimess le 22-12-2010 à 22:15:43
Reply

Marsh Posté le 23-12-2010 à 01:14:14    

melimess a écrit :

bonsoir, merci pour ton aide,
pour les fonctions qui changent d'apparence des boutons est ce que tu peux me donner une ???
merci


Ben vu que je ne sais pas quels boutons tu utilises...
Ton bouton bb9 il a quoi de différent des autres boutons?
On va dire que ya de grosses chances que tes boutons soient des JButtons, et que bb9 ait une icone différente des autres, donc go voir la doc: http://download.oracle.com/javase/ [...] utton.html, t'as une méthode setIcon(), je suppose que ca fera l'affaire.
 


---------------
C'était vraiment très intéressant.
Reply

Marsh Posté le 23-12-2010 à 20:53:09    

bonsoir,
ce fameux bouton bb9 est une instance d'une classe de bouton que j'ai crée qui a un fond particulier, j'ai essayé avec setIcone();  
normalement quand on déclare un bouton avec setIcone() c'est comme ca : JButton bb9 =new JButton( new ImageIcon("Image.png" )); et pour le positioner j'ai utiliser la fonction setBounds()
et si je veux changer le fond de ce bouton comment je fait? est ce que tu peux m'écrire en claire ce que je dois faire?
 
tu sais pour le problème que j'ai cité des que je réduit la fenêtre puis je la remonte les boutons apparaissent?? je ne vois quel est le problème??
merci pour aide


Message édité par melimess le 23-12-2010 à 20:56:40
Reply

Marsh Posté le 23-12-2010 à 20:54:48    

Bonsoir,
ce fameux bouton bb9 est une instance d'une classe de bouton que j'ai crée qui a un fond particulier, j'ai essayé avec setIcone();  
normalement quand on déclare un bouton avec setIcone() c'est comme ca : JButton bb9 =new JButton( new ImageIcon("Image.png" )); et pour le positioner j'ai utiliser la fonction setBounds()
et si je veux changer le fond de ce bouton comment je fait? est ce que tu peux m'écrire en claire ce que je dois faire?
 
tu sais pour le problème que j'ai cité des que je réduit la fenêtre puis je la remonte les boutons apparaissent?? je ne vois quel est le problème??  
merci pour ton aide

Reply

Marsh Posté le 23-12-2010 à 21:13:23    

http://download.oracle.com/javase/ [...] utton.html  
Il y a les fonctions seticon() et similaires...
De plus si ton actionperformed est commun à tous tes boutons, tu add(bb9) a chaque fois?
J'ai l'impression qu'il y a comme un problème de conception...


Message édité par breizhbugs le 23-12-2010 à 21:15:23

---------------
Seul Google le sait...
Reply

Marsh Posté le 23-12-2010 à 21:17:29    

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 :p  :

Reply

Marsh Posté le 23-12-2010 à 23:59:20    

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 :p  :


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.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed