Bonjour,

Je sais que cette question revient souvent, mais là je ne trouve pas. La classe TracePlan calcule les coordonnées des points à tracer, puis donne l'ordre de les imprimer à l'écran :


Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class TracePlan extends AbstractAction{
public TracePlan (PlanC C1, ValTransfo[] TDP, int nT, Panneau pan)
        {this.C1 = C1;
        this.TDP = TDP;    //Tableaux de valeurs.
        this.nT = nT;    
        this.pan = pan;    //Le panneau où sera tracé le dessin.
        }
 
    public void actionPerformed (ActionEvent e)
        {NbrePts = C1.getNombrePoints();
        ZoomVal = C1.getZooming();
 
    /*etc., suite à cette récupération des valeurs vient une série de calculs
    de coordnnées des points à tracer*/
 
    Color ClT = new Color(TDP[k].getRedVal(), TDP[k].getGreenVal(), TDP[k].getBlueVal());//Va chercher les valeurs de la couleur de fond.
    Color Cfd = new Color (C1.getRougeP(), C1.getVertP(), C1.getBleuP());
    pan.FondPan(Cfd); //Couleur de fond.
 
if((0<=CoX) && (CoX<=800) && (0<=CoY) && (CoY<=550))//limites de l'écran.
            {pan.TracePt(CoX, CoY, ClT);
            }//ordonne de tracer le point.
Le Jpanel fait l'objet d'une classe à part, dont voici le code intégral :

Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Panneau extends JPanel {
    public void paintComponent(Graphics g)
        {super.paintComponent(g);
        }
 
    public void FondPan(Color Cfd){
        this.Cfd = Cfd;
        setBackground(Cfd);
        }    
 
    public void TracePt(int CoX, int CoY, Color ClT){
        this.ClT = ClT;
        this.CoX = CoX;
        this.CoY = CoY;
        Graphics g = getGraphics();/*Si il n'y est pas, cela génère une exception.*/
        g.setColor(ClT); //Couleur du point.
        g.drawOval (CoX, (550-CoY),1,1);  //réglage du positionnement et de la largeur.
        g.fillOval(CoX, (550-CoY),1,1);
        g.dispose();
        super.paintComponent(g);//n'apporte rien!
        }    
    Color ClT, Cfd;
    int CoX, CoY;    
    Graphics g;    
}
Problème classique, les points s'affichent, mais ne résistent pas au redimensionnement des fenêtres. Mieux, si je change la couleur de fond, celle-ci se met sur le dessin, et je dois relancer la classe TracePlan pour revoir apparaitre le graphisme.

La méthode repaint, où qu'elle soit placée, efface les points à peine créés. J'ai essayé de tracer depuis TracePlan en rappelant Graphics g dans cette classe, le problème était le même!

Non, vraiment, je n'arrive pas à trouver. (Je ne pense pas avoir besoin de threads ici, il n'y a pas tant de points à tracer).