# Programmation JavaFX/Composants d'une application

* Base commune
** Introduction
** Composants d'une application JavaFX
* Interface graphique (2D)
** Classes 2D
* Scene 3D
** Formes 3D
** Apparence
** Interactions
* Media
** Jouer une vidéo ou un son
* Outils
** Scene Builder
* Base commune
** Introduction
** Composants d'une application JavaFX
* Interface graphique (2D)
** Classes 2D
* Scene 3D
** Formes 3D
** Apparence
** Interactions
* Media
** Jouer une vidéo ou un son
* Outils
** Scene Builder
[ Modifier le sommaire ]
Ce chapitre est important car il présente les classes de bases communes aux applications JavaFX. Un exemple illustre ce chapitre, complété au fur et à mesure des notions introduites dans les sections du chapitre.

## Application

Application est le nom de la classe Abstraite à implémenter par la sous-classe représentant l'application JavaFX.
Cette sous-classe ne comporte pas obligatoirement une méthode statique main car la JVM peut lancer directement un JAR contenant une application JavaFX en utilisant certains attributs particuliers du fichier de manifeste.
Elle suit un cycle particulier :
* La méthode statique launch(Class c, String args) est appelée soit par une méthode main(String args), soit directement par la JVM. Le premier argument est la classe implémentant la classe abstraite Application et peut être omis, auquel cas la méthode utilise la classe à partir de laquelle elle a été appelée. Le second argument est un tableau des arguments de la ligne de commande (voir section « Récupération des arguments de la ligne de commande » ci-dessous).
* Cette méthode initialise l'environnement JavaFX et appelle ensuite la méthode init.
* La méthode start(Stage stage) est ensuite appelée pour démarrer l'application : créer l'interface et les scènes à afficher dans la fenêtre (stage) donnée en argument. La sous-classe de Application doit implémenter cette méthode.
* La méthode stop est appelée pour arrêter l'application, généralement quand la fenêtre de l'application est fermée. L'implémentation par défaut ne fait rien.

### Récupération des arguments de la ligne de commande

Quel que soit le mode de lancement de l'application, la méthode getParameters de la classe Application retourne un objet de classe Parameters :
Les méthodes de la classe Parameters permettent de récupérer les arguments de la ligne de commande :

#### List<String> getRaw

    Cette méthode retourne une liste contenant tous les arguments de la ligne de commande.

#### Map<String,String> getNamed

    Cette méthode retourne un dictionnaire de tous les arguments nommés de la forme suivante :
    --name=value

#### List<String> getUnnamed

    Cette méthode retourne une liste contenant les autres arguments (non nommés) de la ligne de commande.

### Exemple
## Stage

Une instance de la classe Stage représente une fenêtre d'application JavaFX.
Les principales méthodes sont les suivantes:

### setTitle(String title)

    Définir le titre de la fenêtre.

### setScene(Scene scene)

    Définir la scène à afficher.

### show

    Afficher la fenêtre.
Il est également possible d'ajouter une ou plusieurs icônes en modifiant la liste observable retournée par la méthode getIcons.

## Liste observable

Une liste observable est une liste générique dont les modifications sont notifiés aux instances des classes implémentant l'interface ListChangeListener enregistrées sur la liste par la méthode addListener. Les listes observables sont très utilisées dans l'API JavaFX.

## Scene

Une scène est composée de nœuds (Node). Une scène comporte des nœuds 2D (composants : boutons, labels...) ou 3D (formes : sphères, boîtes, cylindres...).

## Classes similaires à AWT et Swing

JavaFX a été conçu pour remplacer Swing et AWT à long terme. Le framework est donc indépendant et possède des classes spécifiques, nommées comme celles de Swing et AWT et jouant à peu près le même rôle mais sont différentes. Ce qui veut dire qu'il n'est pas possible d'utiliser directement les classes de JavaFX en Swing/AWT et vice-versa.
La spécificité des classes de JavaFX permet leur utilisation en 2D et en 3D.

### Color

    Représente une couleur, modélisée par les composantes RVB (Rouge, Vert, Bleu) dont les valeurs sont de type double et comprises entre 0.0 et 1.0.

### Image

    Représente une image.

## Nœud (Node)

Un nœud représenté un élément affichable dans une scène.
Certaines classes d'objet ne sont pas des nœuds ; leurs instances doivent alors être encapsulées dans une vue (View) gérant le type d'objet :
* ImageView pour les objets de classe Image ;
* MeshView pour les objets de classe Mesh (notamment la sous-classe TriangleMesh) ;