# Programmation Java Swing/Introduction

* 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 ]

## Principes

La bibliothèque de composants Swing est définie dans le package javax.swing et utilise AWT (java.awt) :
* La gestion des évènements est celle des composants AWT basée sur les mêmes écouteurs d'évènements.
* Les types Color, Font, Dimension, Insets... du package java.awt sont utilisés par Swing également.
* Les gestionnaires de disposition des composants définis par AWT sont également utilisés par les conteneurs Swing.
* Les composants Swing dérivent tous du composant de base défini par la classe javax.swing.JComponent. Cette classe dérive de la classe java.awt.Container. Cela signifie que tout composant Swing peut contenir d'autres composants. Cependant, le conteneur privilégié est le panel défini par la classe javax.swing.JPanel.
Le nom des classes Swing reprend le nom de la classe équivalente AWT préfixé par la lettre J : JComponent, JContainer, JPanel, JFrame...

## Fenêtres simples

La fenêtre la plus simple est une classe vide héritant de la classe javax.swing.JFrame qui est vide par défaut.
Pour les opérations de mise à jour graphiques il vaut mieux utiliser le thread dédié (thread de répartition des évènements graphiques) pour éviter les problèmes de synchronisation, comme illustré par la méthode statique main ci-dessous pour créer et afficher la fenêtre :
Pour tester cet exemple :
* Copiez le code source dans un fichier nommé FenetreSimple.java dans une hiérarchie de répertoire org/wikibooks/fr/swing pour le paquetage déclaré ;
* Compilez-le avec la commande
    javac org.wikibooks.fr.swing.FenetreSimple
* Lancez le programme avec la commande
    java -cp . org.wikibooks.fr.swing.FenetreSimple
    ou comme il n'est pas nécessaire d'avoir une console :
    javaw -cp . org.wikibooks.fr.swing.FenetreSimple
La fenêtre ne comporte pas de titre, de taille réduite et située en haut à gauche, le bouton de fermeture permet toutefois de fermer la fenêtre. Cependant, l'application tourne encore. On s'en aperçoit en lançant l'application avec un IDE (tel Eclipse). Le thread de répartition des évènements graphiques continue de tourner.
Pour que l'application s'arrête (fin de tous les threads), il est nécessaire d'ajouter un écouteur d'évènement sur la fermeture de la fenêtre. L'exemple ci-dessous montre cela et comment définir un titre, la taille et la position de la fenêtre dans le constructeur de la classe. La méthode main de lancement de l'application reste la même :