[java][applet]inserer des jpanel dans un gridlayout

inserer des jpanel dans un gridlayout [java][applet] - Java - Programmation

Marsh Posté le 31-03-2005 à 21:14:51    

salut,
J essaye de realiser une interface graphique de jeu d echecs, une applet,
 j ai une classe Echiquier qui est en fait un tableau de JPanel et une classe Carre qui charge tout les elements graphiques de la futur applet...
voici la classe Echiquier qui compile bien(wahou)
 

Code :
  1. class Echiquier extends JPanel {
  2. public Echiquier() {
  3. char [] tabColonne = {'a','b','c','d','e','f','g','h'};                 
  4. int[] tabLigne;
  5. tabLigne  = new int[8];
  6. for (int i = 0; i<tabLigne.length; i++) {
  7. tabLigne[i]=i+1;
  8.     }
  9.     Echiquier[] tabCases = new Echiquier[64];
  10.    
  11.  
  12.    
  13.    
  14.         //puis la boucle qui va determiner quelle couleur doit etre chaque case de l echiquier
  15.         for (int c =0; c<64;c++) {
  16. for (int i =0; i<tabColonne.length;i++)
  17. {
  18.     for (int j =0; j<tabLigne.length;j++)
  19.      {
  20.            switch(i)  {
  21.                case 'a':
  22.                if  ((j % 2) == 0) {
  23.                tabCases[c].setBackground(Color.black);}
  24.                case 'b':
  25.                if  ((j % 2) != 0) {
  26.                tabCases[c].setBackground(Color.black);}
  27.                case 'c':
  28.                if  ((j % 2) == 0) {
  29.                tabCases[c].setBackground(Color.black);}
  30.                case 'd':
  31.                if  ((j % 2) != 0) {
  32.                tabCases[c].setBackground(Color.black);}
  33.                case 'e':
  34.                if  ((j % 2) == 0) {
  35.                tabCases[c].setBackground(Color.black);}
  36.                case 'f':
  37.                if  ((j % 2) != 0) {
  38.                tabCases[c].setBackground(Color.black);}
  39.                case 'g':
  40.                if  ((j % 2) == 0) {
  41.                tabCases[c].setBackground(Color.black);}
  42.                case 'h':
  43.                if  ((j % 2) != 0) {
  44.                tabCases[c].setBackground(Color.black);}
  45.                
  46.              
  47.          
  48.          
  49.             default: {
  50.            
  51.             tabCases[c].setBackground(Color.white);
  52.         }
  53.             add(tabCases[c]);
  54.         }
  55.      }
  56. } }
  57.     }
  58. }


 
voila je pense que ca ca devrait generer 64 Jpanel pouvant correspondre a un echiquier..
Mais le probleme survient lorsque j essaye de dire a ma classe Carre de charger chaque Jpanel dans une case d un gridLayout!! , j y arrive pas :cry:  
 
voici la class Carre bien qu y est pas grand chose...
 

Code :
  1. public class Carres extends JApplet {
  2. //Image im;
  3. public void init() {
  4. getContentPane().setLayout(new GridLayout(8,8));
  5. int i;
  6. for (i=0;i<64;i++) {
  7. //C la ou ca foire evidemment  "cannot resolv symbol Method Echiquier(int)"
  8. add(Echiquier(i));
  9. }
  10.     }
  11. }


 
Je sens que j m y prends vraiment mal la! mais comment faire alors pour que dans chaque case du gridLayout il m ajoute un de mes 64 JPanel prefabriques 8O ?
 
merci

Reply

Marsh Posté le 31-03-2005 à 21:14:51   

Reply

Marsh Posté le 31-03-2005 à 21:18:07    

steuba a écrit :


for (i=0;i<64;i++) {
//C la ou ca foire evidemment  "cannot resolv symbol Method Echiquier(int)"
add(new Echiquier(i));
 
 
}
    }
}  


?


Message édité par WhatDe le 31-03-2005 à 21:18:37
Reply

Marsh Posté le 31-03-2005 à 21:19:19    

Non, c'est vraiment n'importe quoi.

Reply

Marsh Posté le 31-03-2005 à 21:20:12    

Faudrait que tu me dis à quoi tu passes le 'i' dans "add(Echiquier(i));"

Reply

Marsh Posté le 31-03-2005 à 21:30:17    

wouai je sais c nawak mais j sais pas quoi tester!!
En fait dans ma classe Echiquier y a les 64 JPanel qui sont fabriques donc j essaye d appeler ma classe echiquier pour recuperer chaque JPanel qui iront dans le gridLayout donc je fais  
 

Code :
  1. Echquier d = new Echiquier();
  2. add(d);


mais ca aussi ca marche pas...Le probleme c est que j arrive pas a synchroniser les cases du griLayout avec chaque JPanel que je cree dans ma classe Echiquier.

Reply

Marsh Posté le 31-03-2005 à 21:32:01    

Code :
  1. Faudrait que tu me dis à quoi tu passes le 'i' dans "add(Echiquier(i));"


Est que je peut passer des parametres a ma classe Echiquier qd je l apelle d une autre classe?

Reply

Marsh Posté le 02-04-2005 à 00:28:40    

merci ese-aSH,
c clair que ton code est 100 fois plus propre!!
Bon j debute aussi...En tout cas merci de ta critique constructive...

Reply

Marsh Posté le 05-04-2005 à 16:00:30    

Bon beh j hesite pas alors :);
J arrive a modeliser l echiquier(largement grace a ton code :)) mais la je bloque tout de suite apres...
Comment faire pour afficher des images (en l occurence les pieces du jeu) dans chaque case?
Donc dans chaque JPanel  
 
 
Par exemple juste pour tester peu importe le placement...

Code :
  1. public class CaseView extends JPanel {
  2.      
  3.    
  4.     CaseView(boolean b) {
  5.         this.setSize(10,10);
  6.        if (b) { 
  7.           this.setBackground(Color.black);
  8. //On rajoute une methode qui va ajouter une image sur tout les cases noires
  9.           this.AfficherPiece(5);
  10.        } else {
  11.           this.setBackground(Color.blue); 
  12.        }
  13. }
  14. }


 
et donc la classe AfficherPiece

Code :
  1. public class AfficherPiece extends JApplet{
  2. Image im;
  3. public AfficherPiece(int piece) {
  4. if (piece ==5) {
  5.         im = getImage(getCodeBase(), "Tour.GIF" );
  6.     }
  7. }
  8.  
  9.     public void paint(Graphics g)
  10.     {
  11.         g.drawImage(im, 0, 0, this);
  12.        
  13.     }
  14. }


Deja premiere question, suis obliger d heriter de JApplet pour avoir la methode getCodeBase?
A la compil ca me dit "cannot resolv method AfficherPiece"
 
 
 
steuba qui a l impression de faire n importe quoi.
 
 
 

Reply

Sujets relatifs:

Leave a Replay

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