# Programmation Java Swing/Créer une case à cocher à trois états

* 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 ]
Ce chapitre complète le sujet du précédent en montrant comment créer un composant à partir d'un composant existant. Ce chapitre décrira la création d'une case à cocher à trois états :
* Coché : L'option est sélectionnée,
* Non coché : L'option n'est pas sélectionnée,
* Inconnu ou partiel : Il s'agit d'un état utilisé soit quand l'option n'a pas d'état défini par l'utilisateur, soit parce qu'une partie des éléments qu'implique la sélection de l'option est sélectionnée (sélection partielle).

## Base du composant

La case à cocher sera basée sur un label (classe JLabel) pour afficher le texte, associé à une icône pour afficher l'état. L'état du composant dépendra de l'état de la case, mais aussi du fait que la souris soit au-dessus du composant ou non. Le tableau ci-dessous présente les différentes images utilisées, avec le nom du fichier utilisé par le code du composant pour charger l'image. Téléchargez les images sous le nom indiqué, dans le répertoire du package de la classe.
| État | Non coché | Inconnu / partiel | Coché |
| Normal | checkbox_0.png | checkbox_1.png | checkbox_2.png |
| Survol de la souris | checkbox_0_over.png | checkbox_1_over.png | checkbox_2_over.png |

## État du composant

Le composant a trois états possibles. Contrairement à une case à cocher normale, le type booléen ne suffit plus à représenter l'état. Il faut donc créer une énumération :
On ajoute deux méthodes retournant l'état suivant, selon deux modes de transition différents :
* Mode trois états : Non coché → Coché → Inconnu → Non coché.
* Mode deux états (case à cocher classique) : Inconnu → Non coché → Coché → Noncoché.

## Classe de la case à cocher

Le code ci-dessous présente la première version de la classe du composant, complétée au fil des sections de ce chapitre. La classe implémente l'interface java.awt.ItemSelectable des objets contenant des éléments sélectionnables (la case à cocher elle-même).

## Gestion de l'état du composant

La méthode suivante est appelée par plusieurs autres méthodes pour mettre à jour l'icône affichée en fonction de l'état et des indicateurs de la case à cocher.
Elle est utilisée par exemple par la méthode modifiant l'indicateur de survol de la souris :
Et également par les méthodes modifiant l'état de la case à cocher, en mode trois états ou en mode deux états.
La méthode nextState met la case à cocher dans l'état suivant, selon le mode de cycle courant.

## Déclencher une action

Beaucoup de composants Swing permettent de déclencher une action sur certains évènements. Les méthodes ci-dessous fournissent une implémentation pour définir un nom d'action et enregistrer des écouteurs de déclenchement d'action.

## Constructeurs

Le constructeur de la case à cocher définit l'écouteur d'évènements de la souris qui appelle les méthodes vues précédemment.

## Test du composant

Le code source pour tester la case à cocher est présenté ci-dessous :