# Programmation Java Swing/Dessin d'une étoile

* Introduction
* Composants
** Arbre
* Fenêtres
* Menus
* Actions
* Types de données et constantes
* Gestion de la disposition des composants
* Gestion des évènements
* Gestion des actions asynchrones
* Apparence de l'interface
* Contenu en HTML
* Créer un composant
** Une case à cocher à trois états
** Dessin d'un composant
** Dessin d'une étoile
** Dessin de texte et effets
* Créer une image
* Introduction
* Composants
** Arbre
* Fenêtres
* Menus
* Actions
* Types de données et constantes
* Gestion de la disposition des composants
* Gestion des évènements
* Gestion des actions asynchrones
* Apparence de l'interface
* Contenu en HTML
* Créer un composant
** Une case à cocher à trois états
** Dessin d'un composant
** Dessin d'une étoile
** Dessin de texte et effets
* Créer une image
[ Modifier le sommaire ]
Le dessin d'un composant utilise différente formes de base : lignes, rectangles, polygones. Le but de cette section est de dessiner des étoiles de cette forme :
Afin d'avoir un composant générique permettant d'afficher le texte sous une série d'étoiles correspondant à un niveau d'appréciation, un niveau de qualité, ...

## Composant

La classe DisplayLevel ci-dessous définit le composant : état courant et couleurs utilisées. Elle sera complétée progressivement au cours de ce chapitre.

## Dessin d'une étoile

Les lignes de la forme n'étant pas courbées, le dessin d'un polygone sera utilisé.
Le polygone sera composé de 10 points :
* 5 points pour les pointes, à la distance r du centre du cercle englobant (voir image ci-contre).
* 5 points entre les pointes, à la distance s du centre du cercle englobant (voir image ci-contre).
La distance r représente le rayon du cercle englobant qui déterminera la taille des étoiles dessinées. La distance s est calculable à partir du rayon r par la formule suivante :
$s={\frac {r}{\phi ^{2}}}={\frac {r}{\phi +1}}$
Avec $\phi ={\frac {{\sqrt {5}}+1}{2}}$
Les points étant radialement espacés régulièrement, l'angle entre deux points est de ${\frac {360}{10}}=36$ degrés.

### Coordonnées du polygone

Les coordonnées des points du polygone sont pré-calculées et stockées dans un tableau pour un rayon de 10000 pixels. Ces coordonnées de base servent au calcul des coordonnées selon la taille d'étoile voulue, et sont relatives au centre du cercle situé aux coordonnées (0,0).
Un objet de la classe java.awt.Polygon est utilisé pour représenter le polygone adapté à la taille de l'étoile selon celle du composant. Les points sont calculés en multipliant les coordonnées pré-calculées des 10 points par le rayon voulu et en divisant le résultat par 10000. Pour les points intermédiaires, on peut aussi ajouter un coefficient pour changer la forme de l'étoile :
* Dessin d'une étoile avec coefficient de 80%.
* Dessin d'une étoile avec coefficient de 100%.
* Dessin d'une étoile avec coefficient de 150%.

### Calcul du polygone

Le polygone est calculé, si besoin, au moment de dessiner le composant :
Les coordonnées dans le polygone shape sont fixes, mais le composant a besoin de le dessiner plusieurs fois à différents endroits. La méthode moveShapeTo ci-dessous déplace les points en mettant à jour le point de référence servant à calculer le vecteur de translation à appliquer :

### Dessiner le composant

Il ne reste plus que le dessin du composant, utilisant plusieurs fois le polygone pour afficher les étoiles et affiche également le texte.
La méthode applyHintsTo ajuste la configuration pour améliorer la qualité d'affichage :

## Code source complet et utilisation

Le code source complet de la classe DisplayLevel est ci-dessous.
Le programme ci-dessous illustre comment le composant peut être utilisé.