Rafraichissement Infini JAVA

Fermé
xav73 - 11 mars 2009 à 21:02
 jamian - 11 mars 2009 à 23:44
Bonjour,

J'essaie de créer un plateau de jeu dérivant d'un JPanel. Lorsque je lui demande de choisir aléatoirement une case, le programme s'emballe et tourne à l'infini... Je ne vois vraiment pas d'ou vient l'erreur mais mes compétences dans le côté graphique et les méthodes paint et compagnie et assez limitée...

Voici mon code, si une bonne âme pouvait m'aiguiller :

package quizz;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.TexturePaint;

import java.awt.image.BufferedImage;

import javax.imageio.ImageIO;

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Toolkit;

import java.io.FileReader;

import java.util.Random;

public class Plate extends JPanel {
public Plate () {
}


public void paint(Graphics g) {
Image bleu = Toolkit.getDefaultToolkit().getImage("Images/casebleuerd.jpg");
Image violet = Toolkit.getDefaultToolkit().getImage("Images/casemoradord.jpg");
Image orange = Toolkit.getDefaultToolkit().getImage("Images/caseorangerd.jpg");
Image rouge = Toolkit.getDefaultToolkit().getImage("Images/caserougerd.jpg");
Image vert = Toolkit.getDefaultToolkit().getImage("Images/caseverterd.jpg");
Image depart = Toolkit.getDefaultToolkit().getImage("Images/casedepartrd.jpg");
Image arrivee = Toolkit.getDefaultToolkit().getImage("Images/casearriveerd.jpg");

for (int i=0;i<5;i++) {
for(int j=0;j<7;j++) {
java.util.Random rand = new java.util.Random();
int couleur = rand.nextInt(5);
Image kase=null;

if (couleur==0)
{kase=bleu;}
if (couleur==1)
{kase=violet; }
if (couleur==2)
{kase=rouge; }
if (couleur==3)
{kase=orange; }
if (couleur==4)
{kase=vert; }
g.drawImage(kase, 10+60*j, 10+60*i, null); } }
Image [][] plateau = new Image[5][7];
plateau[0][0]=depart;
g.drawImage(plateau[0][0], 10, 10, null);
plateau[2][3]=arrivee;
g.drawImage(plateau[2][3], 10+60*3, 10+60*2, null);
repaint();
}

}
A voir également:

4 réponses

Euh... pourquoi as-tu mis un repaint(); à la fin de ta méthode paint ?
0
Sans le repaint, je n'obtiens aucun résultat. Mon "plateau" ne se dessine pas mais effectivement je pense que le problème tourne autour du repaint...
0
Hmm, c'est bizarre ça.

En tout cas, le repaint() dansla méthode paint, c'est clairement ça qui fait boucler ton programme (etant donné que repaint() appelle en tour paint avec en parametre l'objet graphique associé à la fenêtre).
Comment affiches-tu ta fenêtre dans le programme principal ? Au pire, essayes, juste après avoir créé et rendu visible ta fenêtre, de faire un repaint() dessus. Normalement, elle devrait bien s'afficher.

(à ce propos, je te conseille, dans ton constructeur, d'ajouter
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
ce qui affiche ta fenêtre dès la création de l'objet et signale que le programme doit se terminer dès qu'on ferme cette fenêtre. Ca évite d'avoir à le faire à coté...)
0
Merci de ton aide :) Voici le code de ma classe Frame :

package quizz;

import java.awt.Dimension;

import java.awt.Panel;

import java.awt.Rectangle;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Frame1 extends JFrame {

private Plate Plate1 = new Plate();

public Frame1() {
try {
jbInit();
} catch (Exception e) {
e.printStackTrace();
}
}

private void jbInit() throws Exception {
this.getContentPane().setLayout( null );
this.setSize(new Dimension(536, 372));
Plate1.setBounds(new Rectangle(0, 0, 535, 345));
this.getContentPane().add(Plate1, null);

}
}
0
Hmmm, dans jbInit, rajoutes
this.setVisible(true);
this.repaint();
et dis-moi si ça affiche quelque chose (en virant le repaint dnas le paint de ton JPanel).
0
Non cela n'affiche rien.
0
Hmmm, bizarre...

J'ai essayé chez moi. N'ayant pas tes images, il ne peut rien m'afficher, mais en faisant un System.out.println dans la méthode paint du jpanel, on voit qu'elle est bien appelée... Donc ca devrait fonctionner.

Ce que je ne comprends pas, c'est pourquoi ca fonctionne quand tu rajoutes le repaint() dans la méthode paint du jpanel... c'est franchement bizarre...
0