Repaint()

Résolu
Inutqen Messages postés 21 Date d'inscription mardi 11 août 2009 Statut Membre Dernière intervention 20 juin 2011 - 11 août 2009 à 22:13
Inutqen Messages postés 21 Date d'inscription mardi 11 août 2009 Statut Membre 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)

5 réponses

Kotomine Messages postés 112 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 5 novembre 2009
13 août 2009 à 10:01
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
3
Kotomine Messages postés 112 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 5 novembre 2009
12 août 2009 à 09:24
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
0
Inutqen Messages postés 21 Date d'inscription mardi 11 août 2009 Statut Membre Dernière intervention 20 juin 2011
12 août 2009 à 15:02
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 ?
0
Inutqen Messages postés 21 Date d'inscription mardi 11 août 2009 Statut Membre Dernière intervention 20 juin 2011
12 août 2009 à 15:24
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()...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Inutqen Messages postés 21 Date d'inscription mardi 11 août 2009 Statut Membre Dernière intervention 20 juin 2011
13 août 2009 à 14:55
Il fallait effectivement invalider avant de valider...

Réponse parfaite Kotomine !

Merci beaucoup !
0
Rejoignez-nous