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 :
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 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.
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.
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; }
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).
Partager