Repaint() [Résolu]

Messages postés
21
Date d'inscription
mardi 11 août 2009
Dernière intervention
20 juin 2011
- - Dernière réponse : Inutqen
Messages postés
21
Date d'inscription
mardi 11 août 2009
Dernière intervention
20 juin 2011
- 13 août 2009 à 14:55
Bonjour à tous.

Je me sens obligé de poser ma question dans le topic "Débutant", parce que je la trouve tellement bête qu'elle ne peut être due qu'à une erreur de débutant de ma part.

Voila mon soucis :
J'ai une JFrame dans laquelle se trouve un JPanel, voici le code de ce dernier :
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
 
public class Graph extends JPanel
{

public Graph()
{
                //Un tas de trucs
}

public Graph(int bbe, float y)
{
                //Un tas de trucs
calcul();
}

public void calcul()
{
                //Un tas de trucs
validate();
                repaint();
} 

public void paintComponent(Graphics g)
    {
    		super.paintComponent(g);
                // Un tas de trucs
                // genre g.drawLine ...
    }              
}


Je voudrais que mon JPanel soit redessiné à chaque appel de la méthode calcul(), mais ce n'est pas le cas.
La méthode paintComponent n'est appelée qu'une seule fois, lors de la création de la fenetre (JFrame) et du placement de mon JPanel à l'intérieur.
La méthode calcul() est appelée souvent, mais le repaint() ne fait strictement rien.

C'est moi qui suis à l'ouest ou bien ?

Merci :o)
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
112
Date d'inscription
lundi 29 juin 2009
Dernière intervention
5 novembre 2009
3
Merci
Si je me trompe pas, il faut invalider ta form avant de la revalider
Dans une de mes programmes, j'avais fait un panel dynamique qui pouvait contenir un peu n'importe quoi. Une fois l'avoir modifié, je faisais :

 bigleftPanel.invalidate();
 bigleftPanel.validate();
 bigleftPanel.repaint();



; I'm just keeping the hopeless cross to increase the meaninglessness

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 105 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Kotomine
Messages postés
112
Date d'inscription
lundi 29 juin 2009
Dernière intervention
5 novembre 2009
0
Merci
Si je ne me trompe pas, la méthode repaint()
demande à l'API de swing de planifier l'appel à la méthode paint(Graphics g)

Je sais plus ce que fais celui du JPanel ...
Essaie de surcharger la méthode de Component :
public void paint(Graphics g)
et dis nous si c'est mieux !

PS: Es-tu sûr que ton Graph doit être un JPanel (pour contenir des composants swing à l'intérieur ?) je suis sûr qu'un JComponent devrait suffire.


; I'm just keeping the hopeless cross to increase the meaninglessness
Commenter la réponse de Kotomine
Messages postés
21
Date d'inscription
mardi 11 août 2009
Dernière intervention
20 juin 2011
0
Merci
Merci pour la réponse.

Mais j'ai déjà essayé de changer le paintComponent(Graphics g) en paint(Graphics g), et le résultat est le même.

En effet, un JComponent suffit, mais ça ne change rien à mon problème, si ?
Commenter la réponse de Inutqen
Messages postés
21
Date d'inscription
mardi 11 août 2009
Dernière intervention
20 juin 2011
0
Merci
J'ai contourné le problème en remplaçant repaint() dans mon code par resize() en spécifiant la même taille.

Et ça marche !

Mais j'aimerais comprendre ce qui cloche avec ce repaint()...
Commenter la réponse de Inutqen
Messages postés
21
Date d'inscription
mardi 11 août 2009
Dernière intervention
20 juin 2011
0
Merci
Il fallait effectivement invalider avant de valider...

Réponse parfaite Kotomine !

Merci beaucoup !
Commenter la réponse de Inutqen

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.