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

Maroc789 7 Messages postés mercredi 2 avril 2014Date d'inscription 17 avril 2014 Dernière intervention - 8 avril 2014 à 18:18 - Dernière réponse : cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscriptionModérateurStatut 15 mars 2018 Dernière intervention
- 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) {
  }

 }
}

Afficher la suite 

1 réponse

Répondre au sujet
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscriptionModérateurStatut 15 mars 2018 Dernière intervention - 9 avril 2014 à 07:51
+1
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Julien39

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.