[Swing] Problème avec getGraphics() et drawImage()
	
	
		Bonjour,
Je vais essayer d'expliquer au mieux mon problème tout en ajoutant que la partie de code intéressante.
Je développe un labyrinthe sur lequel je vais déplacer un personnage.
Je souhaite représenter ce personnage par une image.
Voici mon code :
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 
 |  
public class Labyrinthe extends JPanel implements Runnable {
private int numero;
	private Monde monde;
	private ParamsJeu paramsJeu;
 
public void paintComponent(Graphics g) {
		super.paintComponent(g);
		monde.dessine(g);
	}
 
public void prepare() {
		// niveau 1
		if (paramsJeu.getNiveau() == 1) {
 
		}
		// niveau 2
		else if (paramsJeu.getNiveau() == 2) {
			// premier labyrinthe
			if (numero == LABYRINTHE_1) {
				this.requestFocus();
 
 
				paramsJeu.getPerso1().dessine(getGraphics());
 
 
				addKeyListener(new KeyAdapter() {
					public void keyPressed(KeyEvent e) {
						if (e.getKeyCode() == KeyEvent.VK_LEFT) {
							paramsJeu.getPerso1().deplaceVers(monde, paramsJeu.getPerso1().getPosX(), paramsJeu.getPerso1().getPosY()-1*Monde.getTaillePixel());
							paramsJeu.getPerso1().dessine(getGraphics());
						} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
							paramsJeu.getPerso1().deplaceVers(monde, paramsJeu.getPerso1().getPosX(), paramsJeu.getPerso1().getPosY()+1*Monde.getTaillePixel());
							paramsJeu.getPerso1().dessine(getGraphics());
						} else if (e.getKeyCode() == KeyEvent.VK_UP) {
							paramsJeu.getPerso1().deplaceVers(monde, paramsJeu.getPerso1().getPosX()-1*Monde.getTaillePixel(), paramsJeu.getPerso1().getPosY());
							paramsJeu.getPerso1().dessine(getGraphics());
						} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
							paramsJeu.getPerso1().deplaceVers(monde, paramsJeu.getPerso1().getPosX()+1*Monde.getTaillePixel(), paramsJeu.getPerso1().getPosY());
							paramsJeu.getPerso1().dessine(getGraphics());
						}	
					}
				});
			}
			// deuxieme labyrinthe
			else {
				addMouseListener(new MouseAdapter() {
					public void mousePressed(MouseEvent e) {
						// TODO
					}
					public void mouseReleased(MouseEvent e) {
						// TODO
					}
				});
				addMouseMotionListener(new MouseMotionAdapter() {
					public void mouseDragged(MouseEvent e) {
						// TODO
					}
				});
			}
		}
		// niveau 3
		else {
 
		}
	}
 
public class Personnage {
 
	// coordonnees initiales du personnage
	private static int initX = 19;
	private static int initY = 6;
 
	private String nom;
	private int oldX;
	private int oldY;
	private int posX;
	private int posY;
	private Image image;
 
	private Personnage() {
		oldX = posX = initX * Monde.getTaillePixel();
		oldY = posY = initY * Monde.getTaillePixel();
	}
 
	public Personnage(String nom, String fichierImage) {
		this();
		this.nom = nom;
		this.image = Toolkit.getDefaultToolkit().getImage(fichierImage);
	}
 
	// dessine un carre blanc a l'ancienne position
	// dessine l'image a la nouvelle position
	public void dessine(Graphics g) {
		g.setColor(Color.RED);
		g.fillRect(oldY, oldX, Monde.getTaillePixel(), Monde.getTaillePixel());
		g.drawImage(image, posY, posX, null);
	}
 
// newX, newY : coordonnees absolues (multipliees par getTaillePixel())
	public void deplaceVers(Monde m, int newX, int newY) {
		// les coordonnees reelles se referent aux indices de la matrice Monde
		// si les nouvelles coordonnees chevauchent deux cases de taille getTaillePixel(), on teste la matrice sur la deuxieme case
		int realX = newX % Monde.getTaillePixel() == 0 ? newX / Monde.getTaillePixel() : newX / Monde.getTaillePixel() + 1;
		int realY = newY % Monde.getTaillePixel() == 0 ? newY / Monde.getTaillePixel() : newY / Monde.getTaillePixel() + 1;
 
		if (realX >= 0 && realX < Monde.getNbL() && realY >= 0 && realY < Monde.getNbC()
				&& !m.isMurAt(realX, realY)) {
			oldX = posX;
			oldY = posY;
			posX = newX;
			posY = newY;
		}
	}
 
	public int getPosX() {
		return posX;
	}
 
	public int getPosY() {
		return posY;
	}
} | 
 Mon problème est que lors de l'appel dans prepare() de paramsJeu.getPerso1().dessine(getGraphics()); il m'affiche mon carré rouge (en fait il sera blanc par la suite pour effacer l'ancienne position avant le déplacement) mais ensuite n'affiche pas l'image.
Je ne comprends donc pas pourquoi lors de l'affichage du perso à sa position initiale, seul le carré rouge s'affiche et n'est pas écrasé par l'image. Il faut que je commence à déplacer mon perso avec les touches pour que l'image s'affiche à la place du carré rouge.  8O 
Merci d'avance pour vos réponses.