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
🎯 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
• 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
💡 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
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
• 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
🛠️ 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
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
🎯 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
💡 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
• 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 :
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);
}
}
•
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);
}
}
•
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);
}
}
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 :
• 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);
}
}
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)
đź’ˇ Analogie simple
• 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