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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
//Dessine un arbre
//g : Graphics permétant de dessiner
//abo : Arbre binair ordonné à dessiner
//x : abscisse minimale du rectangle de dessin
//y : ordonée du dessin
//larg : largeur reservée au dessin
//haut : hauteur d'une chaine de caractères
//fm : Mesusreur de chaîne de caractères
private void dessine(Graphics g,GenealogieCanari abo,int x,int y,int larg,int haut,FontMetrics fm)
{
//Si l'arbre est null, rien à dessiner
if(abo==null)
return;
//Si l'arbre est vide, rien à dessiner
if(abo.estVide())
return;
//Initialise
int lg=larg/2;
int mx=x+lg;
//Ecrit la racine
ecrireCentrer(mx,y,abo.getDonnee().getIdentifiant(),g,fm);
//Incrèmente y
y += 2*haut;
//S'il s'agit d'une feuille, le dessin est terminé
if(abo.estFeuille())
return;
//On dessine, si il existe, le coté gauche
GenealogieCanari gauche=abo.getGauche();
if(gauche!=null)
{
//on dessine un lien entre la racine et la branche gauche
g.drawLine(mx,(y-haut)+5,x+lg/2,y+20);
//On dessine la branche gauche
dessine(g,gauche,x,y+20,lg,haut,fm);
}
//On dessine, si il existe, le coté droit
GenealogieCanari droit=abo.getDroit();
if(droit!=null)
{
//on dessine un lien entre la racine et la branche droite
g.drawLine(mx,(y-haut)+5,mx+lg/2,y+20);
//On dessine la branche droite
dessine(g,droit,mx,y+20,lg,haut,fm);
}
} |