Besoin d'aide: pb affichage rectangle (trivial surement)

Besoin d'aide: pb affichage rectangle (trivial surement) - Java - Programmation

Marsh Posté le 07-11-2004 à 12:53:35    

Hello,  
j'ai 2 classes Jetons et Grille ainsi:

Code :
  1. public class Grille extends JPanel
  2. {
  3. private int x, y ;
  4. private int nblignes, nbcolonnes ;
  5. private int largeur, hauteur ;
  6.  public Grille()
  7.  {
  8.   this.x=0;
  9.   this.y=0;
  10.   this.nblignes=5;
  11.   this.nbcolonnes=5;
  12.   this.largeur=50;
  13.   this.hauteur=50;
  14.   this.setLayout(new BorderLayout()) ;
  15.  }
  16.  public void paint(Graphics g)
  17.  {
  18.   g.setColor(Color.BLACK);
  19.   for(int i=0 ; i<=nblignes ; i++)
  20.   {
  21.    g.drawLine(x, i*hauteur, x+nbcolonnes*largeur, i*hauteur) ;
  22.   }
  23.   for(int i=0 ; i<=nbcolonnes ; i++)
  24.   {
  25.    g.drawLine(i*largeur, y, i*largeur, y+nbcolonnes*hauteur) ;
  26.   }
  27.   Jeton tabJeton[][]= new Jeton[nbcolonnes][nblignes];
  28.   for (int i=0; i<nbcolonnes; i++){
  29.    for (int j=0; j>nblignes; j++){
  30.     tabJeton[i][j]= new Jeton(x+2+i*nbcolonnes, y+2+i*nblignes, Color.RED, 0, 46, 46);
  31.     }
  32.    }
  33.   }
  34. }


Code :
  1. public class Jeton extends Rectangle2D.Double
  2. {
  3. Color couleur ;
  4. int x, y ; // coordonnées du point haut gauche du jeton
  5. int numero ; // numéro jeton affiché
  6. int largeur, hauteur ;
  7. public Jeton()
  8. {
  9.  couleur=Color.RED ;
  10.  numero=0 ;
  11.  largeur=46 ; // on suppose une grille avec des cases de 50x50,
  12.  hauteur=46 ; // 2 pixels de marge
  13. }
  14. public Jeton(int x, int y, Color c, int num, int larg, int haut)
  15. {
  16.  super(x, y,larg,haut) ;
  17.  couleur=c ;
  18.  numero=num ;
  19.  largeur=larg ;
  20.  hauteur=haut ;
  21. }
  22. public void paint(Graphics g)
  23. {
  24.  g.setColor(couleur) ;
  25.  g.fillRect((int) x, (int) y, (int) largeur, (int) hauteur) ;
  26.  g.setColor(Color.BLACK) ;
  27.  g.drawString(""+numero, (int) (x+largeur/2), (int) (y+hauteur/2)) ;
  28. }
  29. }


 
Le problème est que je ne parviens pas à afficher de rectangle coloré dans les cases de la Grille. Vous voyez pourquoi ? J'utilise mal les 2 méthodes paint ?
 
Merci d'éclairer un débutant :jap:


Message édité par Pwill le 07-11-2004 à 14:45:00
Reply

Marsh Posté le 07-11-2004 à 12:53:35   

Reply

Marsh Posté le 07-11-2004 à 19:49:39    

euh

public class Jeton extends Rectangle2D.Double

c'est quoi l'idée derrière ce choix .... pour le moins discutable !?

Reply

Marsh Posté le 08-11-2004 à 10:14:34    

Ca c'est le prof qui nous a présenté une correction avec Rectangle2D.Double.
 
Sinon lorsque je déclare une grille elle s'affiche correctement mais aucun jeton n'apparrait (je devrais voir des carrés rouges à l'intérieur ??)

Reply

Marsh Posté le 08-11-2004 à 10:32:11    

Essaye ca!

Code :
  1. public class Grille extends JPanel
  2. {
  3.     private int x, y ;
  4.     private int nblignes, nbcolonnes ;
  5.     private int largeur, hauteur ;
  6.     private Jeton tabJeton[][]= new Jeton[nbcolonnes][nblignes];
  7.    
  8.     public Grille()
  9.     {
  10.         this.x=0;
  11.         this.y=0;
  12.         this.nblignes=5;
  13.         this.nbcolonnes=5;
  14.         this.largeur=50;
  15.         this.hauteur=50;
  16.         this.setLayout(new BorderLayout()) ;
  17.         for (int i=0; i<nbcolonnes; i++){ 
  18.             for (int j=0; j>nblignes; j++){ 
  19.                 tabJeton[i][j] = new Jeton(TES PARAMETRES);
  20.             } 
  21.        } 
  22.     }
  23.     public void paint(Graphics g)
  24.     {
  25.         g.setColor(Color.BLACK);
  26.         for(int i=0 ; i<=nblignes ; i++)
  27.         {
  28.             g.drawLine(x, i*hauteur, x+nbcolonnes*largeur, i*hauteur) ;
  29.         }
  30.    
  31.         for(int i=0 ; i<=nbcolonnes ; i++)
  32.         {
  33.             g.drawLine(i*largeur, y, i*largeur, y+nbcolonnes*hauteur) ;
  34.         }
  35.        
  36.        
  37.         for (int i=0; i<nbcolonnes; i++){
  38.             for (int j=0; j>nblignes; j++){
  39.                 (tabJeton[i][j]).paint(g);
  40.                 }
  41.             }
  42.     }
  43. }


Message édité par phnatomass le 08-11-2004 à 11:28:49
Reply

Marsh Posté le 08-11-2004 à 10:34:21    

pourquoi étendre JPanel ?


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 08-11-2004 à 10:42:32    

Pwill a toi de répondre.
Moi je me suis juste contenter de faire en sorte que ces "jetons" s'affichent.

Reply

Marsh Posté le 08-11-2004 à 10:44:41    

ah merde 'scuze phna, c'est un prof neuneu et ça souffre pas d'explication.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 08-11-2004 à 10:50:53    

Le plus éffrayant comme l'a signalé Moins Moins c'est l'implémentation de sa classe Jeton qui hérite de Rectangle2D.Double.

Reply

Marsh Posté le 08-11-2004 à 11:02:11    

phna > je dois avouer que je ne suis hostensiblement *pas* allé voir de quoi il en retournait dans la javadoc, parce que je suis un peu fragile en ce moment. Mais je subodore ...
 
c'est comme de faire hériter son composant de MachinListener.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 08-11-2004 à 13:30:19    

Oui ben moi je suis bêtement que le prof nous explique ou nous montre de sa solution...  :pt1cable:  
 
J'essaye ca tout à l'heure ! Merci :jap:
 
Ben sinon ma classe Grille est un JPanel utlisé dans un Applet que je n'ai pas indiqué... vu que le java c'est pas encore très net dans ma tête... je ne peux en dire plus.


Message édité par Pwill le 08-11-2004 à 13:32:18
Reply

Marsh Posté le 08-11-2004 à 13:30:19   

Reply

Marsh Posté le 08-11-2004 à 19:23:08    

J'ai essayé de reprendre proprement le code avec ce que proposait phnatomass, mais rien de ce que j'ai essayé ne marche.
Je ne vois pas pourquoi je n'ai pas de rectangle rouge qui s'affiche dans les cases.
Je suppose que ca vient de l'instanciation des jetons ??  
Comment voir le problème avec le debugger sous eclipse (je ne sais pas faire) ?
 

Code :
  1. public class Grille extends JPanel
  2. {
  3. private final int x=0;
  4. private final int y=0; ;
  5. private int nbLignes, nbColonnes ;
  6. int largeur, hauteur ;
  7. Jeton tabJeton[][];
  8.  public Grille()
  9.  {
  10.   this.nbLignes=3;
  11.   this.nbColonnes=3;
  12.   this.largeur=75;
  13.   this.hauteur=75;
  14.   this.creerJetons();
  15.  }
  16. private void creerJetons(){
  17.   tabJeton = new Jeton[nbLignes][nbColonnes];
  18.   for (int i = 0; i < nbLignes; i++)
  19.    for (int j = 0; j < nbColonnes; j++)
  20.     tabJeton[i][j] = new Jeton(j + i*nbColonnes,
  21.     x+j*largeur + 3, Color.RED, y+i*hauteur + 3,
  22.     largeur - 6, hauteur - 6);
  23.   tabJeton[0][0] = null;
  24. }
  25.  public void paint(Graphics g)
  26.  {
  27.   g.setColor(Color.BLACK);
  28.   for(int i=0 ; i<=nbLignes ; i++)
  29.   {
  30.    g.drawLine(x, i*hauteur, x+nbColonnes*largeur, i*hauteur) ;
  31.   }
  32.   for(int i=0 ; i<=nbColonnes ; i++)
  33.   {
  34.    g.drawLine(i*largeur, y, i*largeur, y+nbColonnes*hauteur) ;
  35.   }
  36.   for (int i=0; i<nbColonnes; i++){ 
  37.     for (int j=0; j>nbLignes; j++){ 
  38.      if (tabJeton[i][j] != null) tabJeton[i][j].paint(g); 
  39.    } 
  40.   }
  41.  }
  42. }


 

Code :
  1. public class Jeton extends Rectangle2D.Double
  2. {
  3. Color couleur ;
  4. int numero ;
  5. public Jeton(double x0, double y0, Color c, int num, double largeur, double hauteur)
  6. {
  7.  super(x0, y0, largeur, hauteur);
  8.  couleur=c ;
  9.  numero=num ;
  10. }
  11. public void setPosition(double x, double y){
  12.   this.x = x;
  13.   this.y = y;
  14.  }
  15. public void paint(Graphics g)
  16. {
  17.  g.setColor(Color.RED) ;
  18.  g.fillRect((int) x, (int) y, (int) width, (int) height) ;
  19.  g.setColor(Color.BLACK) ;
  20.  //g.drawString(""+numero, (int) (x+width/2), (int) (y+height/2)) ;
  21. }
  22. }


 
Merci de votre aide dans tous les cas ;)


Message édité par Pwill le 08-11-2004 à 19:23:30
Reply

Marsh Posté le 08-11-2004 à 20:19:28    

public class Grille extends JPanel
{
 private final int x=0;  
 private final int y=0; ;
 private int nbLignes, nbColonnes ;
 int largeur, hauteur ;
 Jeton tabJeton[][];
  public Grille()
  {
   this.nbLignes=3;
   this.nbColonnes=3;
   this.largeur=75;
   this.hauteur=75;
   this.creerJetons();
  }
 
 private void creerJetons(){
   tabJeton = new Jeton[nbLignes][nbColonnes];
   
   for (int i = 0; i < nbLignes; i++)
    for (int j = 0; j < nbColonnes; j++)
     tabJeton[i][j] = new Jeton(j*largeur,  
     i*hauteur, Color.RED, y+i*hauteur + 3,  
     largeur - 6, hauteur - 6);
   tabJeton[0][0] = null;
 }
 
 
  public void paint(Graphics g)
  {
   g.setColor(Color.BLACK);
   for(int i=0 ; i<=nbLignes ; i++)
   {
    g.drawLine(x, i*hauteur, x+nbColonnes*largeur, i*hauteur) ;
   }
   
   for(int i=0 ; i<=nbColonnes ; i++)
   {
    g.drawLine(i*largeur, y, i*largeur, y+nbColonnes*hauteur) ;
   }
   
   for (int i=0; i<nbColonnes; i++){  
     for (int j=0; j < nbLignes; j++){  
      if (tabJeton[i][j] != null) tabJeton[i][j].paint(g);  
    }  
   }
  }
}


Message édité par phnatomass le 08-11-2004 à 20:22:22
Reply

Marsh Posté le 09-11-2004 à 13:54:59    

Je te remercie beacoup, j'ai pas étudié plus que ca encore mais ca marche. Y'a plus qu'a arranger le tout et avancer dans le taquin...  
 
:jap: Merci ;)

Reply

Sujets relatifs:

Leave a Replay

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