Nous donnons ci-dessous le listing du code de la méthodes paint() à laquelle est confiée l’affichage des graphiques. Nous commenterons certains points dans les 2 paragraphes suivants.
protected void paint(Graphics g) {
/////////////////////////////////
// affichage de la grille
if(imgGrille == null) this.initialiseGrille();
g.drawImage(imgGrille, 0, 0, Graphics.TOP|Graphics.LEFT);
/////////////////////////////////
// dessin de la courbe des cours
N = cours.length;
double[] valeursCours = cours;
double[] bornesCours = this.getBornesCours(valeursCours);
this.valGraphMax = bornesCours[1] + 0.1*(bornesCours[1]-bornesCours[0]);
this.valGraphMin = bornesCours[0] - 0.1*(bornesCours[1]-bornesCours[0]);
// calcul des unités
double deltaCours = valGraphMax - valGraphMin;
double u1 = wg/(N-1);
double v1 = hg1/deltaCours;
/////////////////////////////////
// dessin de la courbe historique
g.setColor(0, 0, 255);
for(int i = 0; i < N-1; i++){
int x1 = (int)(marge + i*u1);
int y1 = - (int)((valeursCours[i]-valGraphMin)*v1) + marge + (int)hg1 ;
int x2 = (int) (marge + ((i+1)*u1));
int y2 = - (int)((valeursCours[i+1]-valGraphMin)*v1) + marge +
(int)hg1 ;
g.drawLine(x1, y1, x2, y2);
}
/////////////////////////////////
// dessin de l’histogramme des volumes;
if(this.volumes != null && this.volumes.length != 0){
int[] valeursVolume = this.volumes;
int[] bornesVolume = this.getBornesVolume(valeursVolume);
double delta = (bornesVolume[1]-bornesVolume[0])
/this.getOrdreGrandeur((bornesVolume[1]-bornesVolume[0]));
double v2 = hg2/delta;
g.setColor(0, 0, 255);
for(int i = 1; i < N-1; i++){
int x2 = (int)(marge + (i*u1));
double val = valeursVolume[i]
/this.getOrdreGrandeur(bornesVolume[1]-bornesVolume[0]);
int hHisto = (int)(val*v2);
int lHisto = 1;
int y2 = (int)(2*marge + hg1 + hg2 - hHisto);
g.fillRect(x2 , y2, lHisto, hHisto);
}
} // fin dessin histogramme des volumes
// dessin des curseurs
g.setColor(153, 153, 153);
int xCurseur = marge + (int)(iCurseur*u1);
g.drawLine(xCurseur, marge+1, xCurseur, marge + hg1-1);
if(this.volumes != null && this.volumes.length != 0){
g.drawLine(xCurseur, 2*marge + hg1 +1, xCurseur, marge + hg1 + hg2 -1);
}
// écriture des valeurs
g.setColor(0, 0, 0);
int hf = g.getFont().getHeight();
g.drawString(this.code, xv, yv, Graphics.TOP|Graphics.LEFT);
g.drawString(dates[iCurseur], xv + (int)wg/2, yv, Graphics.TOP|Graphics.LEFT);
g.setColor(0, 0, 255);
g.drawString("" + cours[iCurseur], xv + 50, yv + hf, Graphics.TOP|Graphics.LEFT);
g.setColor(0, 0, 0);
if(this.volumes != null && this.volumes.length != 0){
g.drawString("" + volumes[iCurseur], xv + 50, yv + 2*hf, Graphics.TOP|Graphics.LEFT);
}
}
public void initialiseGrille(){
w = this.getWidth();
h = this.getHeight();
// en % occupation relative de l’espace
marge = (int) (0.02* h);
// largeur des graphiques et centrage horizontal
wg = (int)(w-2*marge);
// hauteur des graphiques
hg1 = (int)(0.5*h);
hg2 = (int)(0.2*h);
// dessin des cadres des graphiques
imgGrille = Image.createImage(w, h);
Graphics g = imgGrille.getGraphics();
g.setColor(0, 0, 0);
g.drawRect(marge, marge, (int)wg, hg1);
g.drawRect(marge, 2*marge + hg1, (int)wg, hg2);
// écriture des étiquettes
xv = 2*marge;
yv = 3*marge + hg1 + hg2;
int hf = g.getFont().getHeight();
g.drawString("Cours : ", xv, yv + hf, Graphics.TOP|Graphics.LEFT);
g.drawString("Volume : ", xv, yv + 2*hf, Graphics.TOP|Graphics.LEFT);
if(afficheMMA){
g.drawString("MMA : ", xv, yv + 3*hf, Graphics.TOP|Graphics.LEFT);
}
}