↑
CHAPITRE 1.1

Comprendre JavaFX

Découvrir JavaFX, son histoire, ses avantages et son architecture fondamentale
Dans cette section, vous allez découvrir JavaFX, une bibliothèque moderne pour créer des interfaces graphiques en Java. Vous apprendrez son historique, sa position dans l'écosystème Java, ses avantages par rapport à Swing, et les concepts fondamentaux de son architecture : Stage, Scene et Node. Cette section pose les bases essentielles pour comprendre et utiliser JavaFX efficacement.

1.1Comprendre JavaFX

1.1.1 – Historique et positionnement

JavaFX est une plateforme moderne de développement d'applications graphiques pour le desktop, les appareils mobiles et les navigateurs web. Pour bien comprendre JavaFX, il est important de connaître son histoire et sa place dans l'écosystème Java.

📜 Historique de JavaFX

JavaFX a été développé par Sun Microsystems (maintenant Oracle) comme successeur de Swing, la bibliothèque graphique traditionnelle de Java. Voici les étapes clés de son évolution :

  • 2007 : JavaFX 1.0 est annoncĂ© comme une alternative Ă  Swing, initialement basĂ© sur un langage de script appelĂ© JavaFX Script
  • 2009 : Oracle acquiert Sun Microsystems et continue le dĂ©veloppement de JavaFX
  • 2011 : JavaFX 2.0 est lancĂ©, réécrit entièrement en Java (abandon de JavaFX Script)
  • 2014 : JavaFX 8 est intĂ©grĂ© au JDK 8, devenant une partie officielle de Java
  • 2018 : JavaFX est sĂ©parĂ© du JDK Ă  partir de Java 11, devenant un projet open-source indĂ©pendant
  • Aujourd'hui : JavaFX continue d'Ă©voluer avec des versions rĂ©gulières et une communautĂ© active
Note importante : Depuis Java 11, JavaFX n'est plus inclus dans le JDK. Vous devez l'ajouter séparément à votre projet. Cependant, cela permet une évolution plus rapide et indépendante de JavaFX.

🎯 Positionnement dans l'écosystème Java

JavaFX occupe une place particulière dans l'écosystème Java pour le développement d'interfaces graphiques :

JavaFX vs autres technologies

  • JavaFX vs Swing : JavaFX est plus moderne, avec de meilleures performances graphiques, un système de styles CSS, et une architecture plus flexible. Swing reste largement utilisĂ© mais Oracle recommande JavaFX pour les nouveaux projets.
  • JavaFX vs Java Web (JSP/Servlets) : JavaFX est pour les applications desktop, tandis que les technologies web servent pour les applications accessibles via navigateur.
  • JavaFX vs frameworks web (Spring Boot + Thymeleaf) : JavaFX crĂ©e des applications installĂ©es localement, tandis que les frameworks web crĂ©ent des applications accessibles via URL.
  • JavaFX vs Electron/JavaFX Web : JavaFX peut ĂŞtre utilisĂ© pour crĂ©er des applications desktop natives avec de meilleures performances que Electron.

đź’ˇ Pourquoi utiliser JavaFX ?

JavaFX offre plusieurs avantages pour le développement d'interfaces graphiques :

  • Moderne et performant : Utilise le GPU pour le rendu, offrant des animations fluides et des interfaces rĂ©actives
  • FXML et Scene Builder : Permet de crĂ©er des interfaces visuellement avec un outil graphique, sĂ©parant la prĂ©sentation de la logique
  • CSS intĂ©grĂ© : Stylisation avancĂ©e avec des feuilles de style CSS familières aux dĂ©veloppeurs web
  • Architecture MVC : Structure claire avec sĂ©paration entre la vue (FXML), le contrĂ´leur (Java) et le modèle (donnĂ©es)
  • Cross-platform : Fonctionne sur Windows, macOS et Linux avec le mĂŞme code
  • Composants riches : TableView, ListView, Charts, WebView, et bien d'autres composants prĂŞts Ă  l'emploi
  • Animations et transitions : Support natif pour les animations et effets visuels
  • Binding de donnĂ©es : Système puissant de liaison automatique entre les donnĂ©es et l'interface

📊 Cas d'utilisation typiques

JavaFX est particulièrement adapté pour :

  • Applications desktop professionnelles : Logiciels de gestion, outils d'administration, applications mĂ©tier
  • Outils de dĂ©veloppement : IDEs, Ă©diteurs, visualiseurs de donnĂ©es
  • Applications multimĂ©dias : Lecteurs vidĂ©o, Ă©diteurs d'images, visualiseurs
  • Applications de visualisation : Graphiques, tableaux de bord, outils d'analyse
  • Applications Ă©ducatives : Logiciels pĂ©dagogiques, simulateurs, dĂ©monstrateurs
Exemples d'applications JavaFX :
• Scene Builder : L'outil officiel de création d'interfaces JavaFX
• Applications de gestion : Logiciels de comptabilité, CRM, ERP
• Outils de visualisation : Visualiseurs de données, tableaux de bord
• Applications créatives : Éditeurs graphiques, outils de design

đź”® Avenir de JavaFX

JavaFX continue d'évoluer activement :

  • Projet open-source : DĂ©veloppement communautaire actif depuis Java 11
  • Versions rĂ©gulières : Nouvelles versions avec amĂ©liorations et nouvelles fonctionnalitĂ©s
  • Support mobile : JavaFX peut ĂŞtre utilisĂ© pour crĂ©er des applications Android (via Gluon)
  • IntĂ©gration moderne : Compatible avec les dernières versions de Java et les frameworks modernes
  • CommunautĂ© active : Nombreux tutoriels, bibliothèques et ressources disponibles
Important : JavaFX est une technologie mature et stable, largement utilisée dans l'industrie. Oracle continue de le supporter et la communauté open-source assure son évolution. C'est un excellent choix pour développer des applications desktop modernes en Java.

💡 Points clés à retenir

  • JavaFX : Bibliothèque moderne pour interfaces graphiques en Java
  • Successeur de Swing : Plus moderne, performant et flexible que Swing
  • IntĂ©grĂ© au JDK 8 : Fait partie de Java 8, mais sĂ©parĂ© depuis Java 11
  • Cross-platform : Fonctionne sur Windows, macOS et Linux
  • Technologie mature : Stable, performante et largement utilisĂ©e
  • Écosystème riche : Nombreux outils, bibliothèques et ressources disponibles
Conseil : Si vous débutez avec JavaFX, sachez que vous apprenez une technologie moderne, performante et avec un bel avenir. Les compétences acquises sont valorisées dans l'industrie et vous permettront de créer des applications desktop professionnelles.

1.1.2 – JavaFX vs Swing (niveau débutant)

Si vous avez déjà entendu parler de Swing, vous vous demandez peut-être quelle est la différence avec JavaFX. Cette section compare les deux technologies de manière simple et accessible pour les débutants.

🔄 Vue d'ensemble : Swing vs JavaFX

Swing et JavaFX sont deux bibliothèques Java pour créer des interfaces graphiques, mais JavaFX est plus récent et moderne. Voici les principales différences :

Tableau comparatif simplifié

Critère Swing JavaFX
Année de création 1997 2007-2011
Rendu graphique CPU (processeur) GPU (carte graphique)
Performance Correcte Meilleure (animations fluides)
Création d'interface Code Java uniquement FXML + Scene Builder (visuel)
Stylisation Look and Feel (limité) CSS complet (comme le web)
Animations Complexes à implémenter Natives et simples
Apparence Style système (ancien) Moderne et personnalisable
Recommandation Oracle Maintenance uniquement Recommandé pour nouveaux projets

🎨 Différences visuelles

La différence la plus visible entre Swing et JavaFX est l'apparence des interfaces :

  • Swing : Utilise le "Look and Feel" du système d'exploitation, ce qui donne un aspect parfois datĂ© et peu personnalisable
  • JavaFX : Permet une personnalisation complète avec CSS, crĂ©ant des interfaces modernes et attrayantes
Exemple visuel :
• Swing : Boutons gris avec bordures 3D, apparence "Windows 95"
• JavaFX : Boutons modernes avec coins arrondis, ombres, dégradés, animations au survol

⚡ Performance et rendu

JavaFX utilise le GPU (carte graphique) pour le rendu, ce qui offre de meilleures performances :

  • Swing : Rendu par le CPU, peut ĂŞtre lent pour les animations et les interfaces complexes
  • JavaFX : Rendu par le GPU, animations fluides mĂŞme avec beaucoup d'Ă©lĂ©ments
En pratique : Avec JavaFX, vous pouvez créer des interfaces avec de nombreuses animations, transitions et effets visuels sans ralentissement. C'est particulièrement important pour les applications modernes avec des interactions fluides.

🛠️ Outils de développement

JavaFX offre des outils plus modernes pour créer des interfaces :

  • Swing : Tout doit ĂŞtre créé en code Java, ce qui peut ĂŞtre long et fastidieux
  • JavaFX : Scene Builder permet de crĂ©er des interfaces visuellement en glissant-dĂ©posant, puis gĂ©nère le FXML automatiquement
Workflow JavaFX :
1. Créer l'interface visuellement dans Scene Builder
2. Scene Builder génère le fichier FXML
3. Écrire le code Java pour la logique (contrôleur)
4. Lier le FXML au contrĂ´leur

Workflow Swing :
1. Écrire tout le code Java manuellement
2. Tester visuellement en exécutant l'application
3. Ajuster le code, réexécuter, répéter...

🎯 Quand utiliser Swing ?

Swing reste utile dans certains cas :

  • Applications existantes : Si vous maintenez une application Swing existante, il peut ĂŞtre plus simple de continuer avec Swing
  • CompatibilitĂ© : Swing est inclus dans tous les JDK, JavaFX nĂ©cessite une dĂ©pendance supplĂ©mentaire (depuis Java 11)
  • SimplicitĂ© : Pour des interfaces très simples, Swing peut suffire
Important : Oracle recommande JavaFX pour tous les nouveaux projets. Swing est en mode "maintenance" : il continue d'être supporté mais ne recevra plus de nouvelles fonctionnalités majeures.

🎯 Quand utiliser JavaFX ?

JavaFX est recommandé pour :

  • Tous les nouveaux projets : C'est la technologie moderne recommandĂ©e par Oracle
  • Interfaces modernes : Si vous voulez une apparence moderne et personnalisable
  • Animations et effets : Pour des interfaces avec animations, transitions et effets visuels
  • ProductivitĂ© : Scene Builder accĂ©lère considĂ©rablement le dĂ©veloppement
  • Performance : Pour des applications nĂ©cessitant de bonnes performances graphiques

📚 Migration de Swing vers JavaFX

Si vous connaissez déjà Swing, la bonne nouvelle est que :

  • Concepts similaires : Les concepts de base (fenĂŞtres, composants, Ă©vĂ©nements) sont similaires
  • Java toujours : Vous continuez Ă  utiliser Java, la syntaxe est la mĂŞme
  • Nouveaux outils : FXML et Scene Builder sont des ajouts qui facilitent le dĂ©veloppement
  • Courbe d'apprentissage : Si vous connaissez Swing, vous apprendrez JavaFX rapidement
Conseil pour débutants : Si vous débutez complètement avec les interfaces graphiques Java, commencez directement avec JavaFX. C'est la technologie moderne et vous n'aurez pas à "désapprendre" Swing plus tard. Si vous connaissez déjà Swing, JavaFX sera facile à apprendre car les concepts sont similaires.

💡 Points clés à retenir

  • JavaFX est plus rĂ©cent : Créé pour remplacer Swing avec des technologies modernes
  • Meilleure performance : Utilise le GPU pour un rendu plus rapide
  • Outils visuels : Scene Builder permet de crĂ©er des interfaces visuellement
  • Stylisation CSS : Personnalisation complète avec des feuilles de style
  • RecommandĂ© par Oracle : Technologie recommandĂ©e pour tous les nouveaux projets
  • Swing en maintenance : Toujours supportĂ© mais plus de nouvelles fonctionnalitĂ©s
  • Concepts similaires : Si vous connaissez Swing, JavaFX sera facile Ă  apprendre
Résumé simple :
• Swing = Ancien, fonctionne bien, mais limité
• JavaFX = Moderne, performant, flexible, recommandé

Pour un nouveau projet, choisissez JavaFX !

1.1.3 – Architecture de base : Stage, Scene, Node

JavaFX utilise une architecture hiérarchique basée sur trois concepts fondamentaux : Stage, Scene et Node. Comprendre ces trois concepts est essentiel pour maîtriser JavaFX.

🏗️ Vue d'ensemble de l'architecture

L'architecture JavaFX suit une hiérarchie simple :

Hiérarchie JavaFX :

Stage (FenĂŞtre)
└── Scene (Contenu de la fenêtre)
└── Node (Éléments de l'interface : boutons, labels, etc.)
└── Node (Les Nodes peuvent contenir d'autres Nodes)

🎭 Stage : La fenêtre

Le Stage représente la fenêtre principale de votre application. C'est le conteneur de plus haut niveau.

Caractéristiques du Stage

  • FenĂŞtre native : Correspond Ă  une fenĂŞtre du système d'exploitation
  • Un Stage = Une fenĂŞtre : Chaque Stage est une fenĂŞtre indĂ©pendante
  • PropriĂ©tĂ©s : Titre, taille, position, visibilitĂ©, mode plein Ă©cran
  • Point d'entrĂ©e : C'est par le Stage que vous commencez votre application JavaFX

Exemple : Créer un Stage

package application;

import javafx.application.Application;
import javafx.stage.Stage;

public class MonApplication extends Application {
    
    @Override
    public void start(Stage primaryStage) {
        // primaryStage est le Stage principal fourni par JavaFX
        
        // Configurer le Stage
        primaryStage.setTitle("Ma Première Application JavaFX");
        primaryStage.setWidth(800);
        primaryStage.setHeight(600);
        primaryStage.setResizable(true);
        
        // Afficher le Stage
        primaryStage.show();
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}
Explication :
• primaryStage : Le Stage principal de l'application (fourni automatiquement)
• setTitle() : Définit le titre de la fenêtre
• setWidth() et setHeight() : Définissent la taille
• setResizable() : Permet ou non le redimensionnement
• show() : Affiche la fenêtre (sans ça, rien ne s'affiche !)

🎬 Scene : Le contenu de la fenêtre

La Scene représente le contenu affiché dans le Stage. Une Scene contient tous les éléments visuels de votre interface.

Caractéristiques de la Scene

  • Conteneur de Nodes : La Scene contient un Node racine (root) qui peut contenir d'autres Nodes
  • Une Scene = Un Ă©cran : Vous pouvez changer de Scene pour changer complètement l'interface affichĂ©e
  • PropriĂ©tĂ©s : Taille, couleur de fond, styles CSS
  • Liaison Stage-Scene : Un Stage affiche une Scene Ă  la fois

Exemple : Créer une Scene

package application;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class MonApplication extends Application {
    
    @Override
    public void start(Stage primaryStage) {
        // Créer un Node racine (VBox est un conteneur vertical)
        VBox root = new VBox();
        
        // Ajouter des éléments à la Scene
        Label label = new Label("Bonjour JavaFX !");
        root.getChildren().add(label);
        
        // Créer la Scene avec le Node racine
        Scene scene = new Scene(root, 800, 600);
        
        // Attacher la Scene au Stage
        primaryStage.setScene(scene);
        
        // Configurer et afficher
        primaryStage.setTitle("Ma Première Application");
        primaryStage.show();
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}
Explication :
• VBox : Un conteneur (layout) qui organise les éléments verticalement
• root : Le Node racine de la Scene (obligatoire)
• new Scene(root, width, height) : Crée une Scene avec un Node racine et une taille
• setScene() : Attache la Scene au Stage
• Important : Une Scene doit toujours avoir un Node racine !

🎨 Node : Les éléments de l'interface

Un Node est un élément visuel de l'interface. Tous les composants JavaFX (boutons, labels, champs de texte, etc.) sont des Nodes.

Types de Nodes

  • Nodes de contrĂ´le : Boutons, Labels, TextField, ListView, etc. (Ă©lĂ©ments interactifs)
  • Nodes de conteneur (Layouts) : VBox, HBox, BorderPane, etc. (organisent d'autres Nodes)
  • Nodes de forme : Rectangle, Circle, Line, etc. (formes gĂ©omĂ©triques)
  • Nodes multimĂ©dias : ImageView, MediaView, etc. (images, vidĂ©os)

Exemple : Créer et utiliser des Nodes

package application;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class MonApplication extends Application {
    
    @Override
    public void start(Stage primaryStage) {
        // Créer le Node racine (conteneur)
        VBox root = new VBox();
        root.setSpacing(10); // Espacement entre les éléments
        
        // Créer des Nodes (éléments de l'interface)
        Label labelTitre = new Label("Bienvenue !");
        TextField champTexte = new TextField();
        champTexte.setPromptText("Entrez votre nom");
        Button bouton = new Button("Cliquez-moi");
        
        // Ajouter les Nodes au conteneur racine
        root.getChildren().addAll(labelTitre, champTexte, bouton);
        
        // Créer la Scene avec le Node racine
        Scene scene = new Scene(root, 400, 300);
        
        // Attacher au Stage
        primaryStage.setScene(scene);
        primaryStage.setTitle("Exemple Nodes");
        primaryStage.show();
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}
Structure créée :

Stage (fenĂŞtre "Exemple Nodes")
└── Scene (400x300)
└── VBox (Node racine, conteneur vertical)
├── Label ("Bienvenue !")
├── TextField (champ de saisie)
└── Button ("Cliquez-moi")

đź”— Relations entre Stage, Scene et Node

Voici comment ces trois concepts s'articulent :

Relations :

• Stage contient une Scene (à la fois)
• Scene contient un Node racine (obligatoire)
• Node racine peut contenir d'autres Nodes (hiérarchie)
• Nodes peuvent contenir d'autres Nodes (imbrication)

Analogie :
• Stage = La maison (fenêtre)
• Scene = La pièce (contenu)
• Node = Les meubles et objets dans la pièce (éléments)

📝 Exemple complet : Application simple

Voici un exemple complet illustrant Stage, Scene et Node :

package application;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ApplicationComplete extends Application {
    
    @Override
    public void start(Stage primaryStage) {
        // ============================================
        // ÉTAPE 1 : Créer le Node racine (conteneur)
        // ============================================
        VBox root = new VBox(20); // 20 = espacement entre éléments
        root.setStyle("-fx-padding: 20; -fx-alignment: center;");
        
        // ============================================
        // ÉTAPE 2 : Créer des Nodes (éléments)
        // ============================================
        Label label = new Label("Ma Première Application JavaFX");
        label.setStyle("-fx-font-size: 18px; -fx-font-weight: bold;");
        
        Button bouton = new Button("Cliquez ici");
        bouton.setOnAction(e -> {
            label.setText("Vous avez cliqué !");
        });
        
        // ============================================
        // ÉTAPE 3 : Ajouter les Nodes au conteneur
        // ============================================
        root.getChildren().addAll(label, bouton);
        
        // ============================================
        // ÉTAPE 4 : Créer la Scene avec le Node racine
        // ============================================
        Scene scene = new Scene(root, 600, 400);
        
        // ============================================
        // ÉTAPE 5 : Attacher la Scene au Stage
        // ============================================
        primaryStage.setScene(scene);
        primaryStage.setTitle("Architecture JavaFX");
        primaryStage.show();
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}
Ordre des opérations :
1. Créer le Node racine (conteneur)
2. Créer les Nodes (éléments de l'interface)
3. Ajouter les Nodes au conteneur
4. Créer la Scene avec le Node racine
5. Attacher la Scene au Stage
6. Configurer et afficher le Stage

🎯 Points importants à retenir

  • Stage : La fenĂŞtre de l'application (une fenĂŞtre = un Stage)
  • Scene : Le contenu affichĂ© dans le Stage (un Ă©cran = une Scene)
  • Node : Tous les Ă©lĂ©ments visuels (boutons, labels, conteneurs, etc.)
  • HiĂ©rarchie : Stage → Scene → Node racine → autres Nodes
  • Node racine obligatoire : Une Scene doit toujours avoir un Node racine
  • Un Stage, une Scene : Un Stage affiche une Scene Ă  la fois (mais vous pouvez changer de Scene)
  • Nodes imbriquĂ©s : Les Nodes peuvent contenir d'autres Nodes (conteneurs)
Erreur courante : Ne pas créer de Node racine avant de créer la Scene. Une Scene doit toujours avoir un Node racine, même si c'est juste un conteneur vide.

đź’ˇ Analogie simple

Pensez à un théâtre :

• Stage = La scène du théâtre (la fenêtre)
• Scene = La pièce de théâtre jouée (le contenu)
• Node = Les acteurs et décors (les éléments visuels)

Vous pouvez changer de pièce (Scene) sur la même scène (Stage), et les acteurs (Nodes) peuvent interagir entre eux !

💡 Points clés à retenir

  • Stage : FenĂŞtre de l'application, contient une Scene
  • Scene : Contenu de la fenĂŞtre, contient un Node racine
  • Node : ÉlĂ©ment visuel (bouton, label, conteneur, etc.)
  • HiĂ©rarchie : Stage → Scene → Node racine → Nodes enfants
  • Node racine obligatoire : Toute Scene doit avoir un Node racine
  • Structure simple : Cette architecture est la base de toutes les applications JavaFX
Conseil : Maîtrisez bien ces trois concepts (Stage, Scene, Node) car ils sont la base de tout en JavaFX. Une fois que vous les comprenez, le reste devient beaucoup plus simple !