Problème pour l'affichage des images dans une grille

Résolu
Maroc789 Messages postés 7 Date d'inscription mercredi 2 avril 2014 Statut Membre Dernière intervention 17 avril 2014 - Modifié par cs_Julien39 le 28/04/2014 à 09:54
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 9 avril 2014 à 07:51
Bonsoir, voila ma classe qui permet de dessiner ma grille, je n'ai pas tout mis. La grille s'affiche bien mais aucune image ne s'affiche en fonction des terrains.
Merci de votre compréhension.

public class CreationGrille extends JPanel {

 /**
  * 
  */
 private static final long serialVersionUID = 1L;
 
 
 GenerateurCarte generateurCarte = new GenerateurCarte();
 JoueurHumain joueurHumain = new JoueurHumain("joueur1");
 JoueurHumain joueurHumain2 = new JoueurHumain("joueur2");
 ArrayList<ModelJoueur> joueurs = new ArrayList<ModelJoueur>();
 HashMap<TypesTerrains, Image> images = new HashMap<TypesTerrains,Image>();
 TypesTerrains grilleType[][] = new TypesTerrains[4][4];
 GrilleJeu grille = new GrilleJeu();
 
 public CreationGrille(GrilleJeu grilleJeu) {
  grilleJeu = grille;
  int xMax = grilleJeu.getAbcisseMax();
  int yMax = grilleJeu.getOrdonneeMax();
  images.put(TypesTerrains.MER, lireImage("images/bleu.jpg"));
  images.put(TypesTerrains.PLAINE,lireImage("images/vert.jpg"));
  grilleType = new TypesTerrains[xMax][yMax];
  
  for (int i = 0; i < xMax; i++) {
   for (int j = 0; j < yMax; j++) {
    grilleType[i][j] = grilleJeu.getGrille()[i][j].getTerrain().getTerrainsJeu();
   }
  }
 }

 public void initialisation(GrilleJeu grilleJeu) {
 }

 
 public void paintComponent(Graphics g) {
  super.paintComponent(g);
  grilleGraphique(g);
 }

 private Image lireImage(String string) {

  try {

   return ImageIO.read(new File(string));

  } catch (IOException e1) {
   e1.printStackTrace();
   return null;
  }

 }

 public void grilleGraphique(Graphics g) {
  CaseTerrain[][] caseTerrains = grille.getGrille();
  
  int width = getWidth();
  int height = getHeight();
  int largeur = width / grille.getAbcisseMax();
  int hauteur = height / grille.getOrdonneeMax();
  
  
  for (int i = 0; i < grille.getAbcisseMax(); i++) {
   for (int j = 0; j < grille.getOrdonneeMax(); j++) {
    int x = j * largeur;
    int y = i * hauteur;
    //caseGraphique(g, caseTerrains, i, j, largeur, hauteur);
    g.drawImage(images.get(grilleType[i][j]), x,
      y, largeur, hauteur, this);
    
   
   
   }
  }
  g.setColor(Color.BLACK); 
   
        for (int i = 0; i <= width; i += largeur) {  
            g.drawLine(i, 0, i, height);  
        } 

        for (int i = 0; i <= height; i+=hauteur) { 
           g.drawLine(0, i, width, i); 
        } 
 }

 /*private void caseGraphique(Graphics g, CaseTerrain[][] caseTerrains, int i,
   int j, int largeur, int hauteur) {
  int x = j * largeur;
  int y = i * hauteur;
  
  
   * pour les images : aller dans la classe TypeGraphique et ajouter au
   * case corespondant image = 'image coresponant au type';
   
  g.drawImage(images.get(grilleType[i][j]), x,
    y, largeur, hauteur, this);
 }*/

 
 public void addImageClicker(final ImageClicker imageClicker) {
  
  addMouseListener(new MouseAdapter() {
   @Override
   public void mouseClicked(MouseEvent e) {
    
    int width = getWidth();
    int height = getHeight();
    int largeur = width / grille.getAbcisseMax();
    int hauteur = height / grille.getOrdonneeMax();
   
    int colonne = e.getX() / largeur;
    int ligne = e.getY() / hauteur;
   
    imageClicker.click(grille.getGrille()[colonne][ligne]);
    imageClicker.click(grille, colonne, ligne);
   }
  });
 }

 public static abstract class ImageClicker {

  public ImageClicker() {
  }

  
  public void click(GrilleJeu source, int colonne, int ligne) {
  }

  public void click(CaseTerrain caseTerrain) {
  }

 }
}

1 réponse

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
9 avril 2014 à 07:51
Salut,

C'est vraiment maladroit comme code, tu appelles ta méthode.

Tu peux utiliser un GridLayout qui te simplifiera bien la vie : http://docs.oracle.com/javase/tutorial/uiswing/layout/grid.html

Pour afficher une image, tu peux la mettre en fond d'un JPanel :
public class PanelImage extends JPanel {
    public void paintComponent(Graphics g) {
        try {
            BufferedImage image = ImageIO.read(new File(adresseImage));
            g.drawImage(image, 0, 0, null);
        }
        catch (IOException e) {
           e.printStackTrace();
        }
    }
}


Je n'ai pas lu ton code, je ne lis jamais les pavés de code, si tu veux que je jette un oeil à ce que tu as fait, isole les lignes qui posent problème et je te dirai ce qui ne va pas.

Mais je te conseil de revoir le développement pour utiliser un GridLayout, tu gagneras un temps infini et le résultat sera plus propre.
1
Rejoignez-nous