Bonjour,
J'ai créé une application qui permet de crééer des missions d'avions d'arme
et donc de disposer différents objets sur un terrain.
Ces objets sont des formes géométriques simples et le terrain est un JPanel.
Je voudrais que chaque fois que l'utilisateur créé et positionne un nouvel objet,
le terrain affiche tous les objets qu'il a déjà créé.
Pour obtenir cette persistence, j'ajoute les objets dans un vecteur et dans la
méthode paintComponent du terrain j'appel les fonctions de dessin de chacun de ces objets.
Malheureusement, quand l'utilsateur clique dans le terrain pour
positionner un nouvel objet tous les anciens objets s'effacent.
Cet effacement viens de l'appel repaint que je fais quand l'utilsateur clique.
Pourtant ce repaint devrait appeler la méthode paintComponent
qui devrait redessiner les objets stockés dans le vecteurs.
J'ai l'impression que les objets sont bien dessinés mais aussitôt effacés,
car en forçant le raffraichissement du terrain (en redimentionnant ma fenêtre, par exemple),
le programme passe dans paintComponent, dessine les objets mais ils disparaissent aussitôt
Voici les différentes méthodes qui entrent en jeux :
PaintComponent du terrain (qui hérite d'un JPanel) :
DessinerObjets -> dessins des objets du vecteur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public void paintComponent(Graphics g) { super.paintComponent(g); this.dessinQuadrillage(g); this.tracerFondCarte(g); if (this.existeObjetActif) { /* Dessin de l'objet actif */ ... } this.dessinerObjets(); }
Tracer -> méthode qui est appellé par la fonction dessiner() de chacun des objets
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public void dessinerObjets() { EnvironnementXML mission = this.getMission(); if (mission.scenarioExiste()) { Scenario scenario = mission.getScenario(); scenario.dessiner(this); /* this = le terrain*/ } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public void tracer() { Graphics2D graphiqueTerrain = (Graphics2D)this.terrain.getGraphics(); graphiqueTerrain.setStroke(new BasicStroke(2.0f)); int x1 = this.pointDepart.getPixels_x(this.terrain.getSecondesParPixel_x()); int y1 = this.pointDepart.getPixels_y(this.terrain.getSecondesParPixel_y()); graphiqueTerrain.drawLine(x1, y1 .... /* Succession d'éléments simples pour contruire l'objet */ graphiqueTerrain.setStroke(new BasicStroke(1.0f)); }
Est ce que j'oublie quelquechose pour forcer le réaffichage des éléments du vecteur?
Faut il utilser (redefinir) la fonction paint au lieu de PaintComponent ?
Faut il utilser une autre politique de rafraichissement, avec des update ?
Merci d'avance
M@tth
Partager