Problème pour l'affichage des images dans une grille [Résolu]

Signaler
Messages postés
7
Date d'inscription
mercredi 2 avril 2014
Statut
Membre
Dernière intervention
17 avril 2014
-
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
-
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

Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
345
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.