Introduction à JavaFX

Université de Toulon

LIS UMR CNRS 7020

2026-10-03

Introduction

  • JavaFX est une API pour construire des IHM en Java
  • Entre Java 8 et 10 inclus dans le JDK
  • A partir de Java 11 dépendance externe
  • Intégration avec l’OS natif :
    • Optimisation matérielle (OpenGL, DirectX, …)
    • Files d’évènements

Historique et évolution

  • 2008 : Oracle annonce JavaFX comme successeur de Swing
  • 2011 : Intégration dans le JDK avec Java 7
  • 2014 : JavaFX 8 avec l’API Streams et Lambda
  • 2018 : Séparation du JDK (OpenJFX) à partir de Java 11
  • Aujourd’hui : Projet communautaire actif et maintenance continue

Quickstart

Etudes de Cas pratiques

  • Explorer le projet exemple notebook-java-javafx-sample-javafxclient pour mettre en pratique les concepts présentés
    • Étude du package fxapp1 : application simple avec interface graphique simple
    • Étude du package fxapp2 : application plus avancée utilisant FXML et le pattern MVC
  • Points d’intérêt particuliers :
    • Organisation du code et séparation des responsabilités
    • Utilisation des propriétés JavaFX
    • Gestion des événements et binding
    • Comparaison des approches programmatique vs déclarative
  • Lire le fichier README.md pour les instructions de compilation et d’exécution
  • Lire les explications suivantes et repérer les éléments correspondants dans le code

Modules

  • Dans le cas d’une application “modulaire”, le plugin javafx permet de créer une distribution autonome (avec son JRE) avec :

    ./mvnw javafx:jlink
  • Cela ne fonctionne pas si l’une des dépendances n’est pas modularisée :

    • Il faut alors utiliser les outils jdeps et jlink (cf. pom.xml de l’exemple précédent)
    • Cette commande produit un JRE réduit et une copie des modules des dépendances nécessaires dans le répertoire target/image
    • Exécution : ./target/image/bin/myapp

Structure d’une application JavaFX

  • Stage
    • Représente une fenêtre graphique
    • Contient une Scene
    • Au démarrage d’une application JavaFX, un Stage principal est automatiquement créé
  • Scene
    • Conteneur racine pour tous les composants graphiques
    • Une seule Scene active par Stage à un moment donné
  • Node
    • Classe abstraite dont héritent tous les composants graphiques
    • Organisés hiérarchiquement dans un graphe de scène

Multi-tâche dans JavaFX

  • JavaFX gère au minimum deux threads distincts :
    • Thread de rendu graphique : gère l’affichage et le rendu du graphe de scène
    • Thread principal de l’application : exécute la logique métier et les traitements
  • Important : les modifications de l’interface graphique doivent être réalisées depuis le thread JavaFX (via Platform.runLater())

Vues (Scene)

  • Deux approches pour la création des interfaces :
    • Déclaratives en XML
    • Programmatiques en Java
      • Construction dynamique des interfaces
      • Flexibilité maximale pour les interfaces générées à l’exécution

Layouts et contrôles

Application JavaFX

  • Une classe qui hérite de javafx.application.Application
    • init() : initialisation des ressources (appelée avant le thread JavaFX)
    • start(Stage primaryStage) : point d’entrée principal (thread JavaFX)
    • stop() : libération des ressources (appelée à la fermeture)
  • La méthode de classe launch(args) démarre l’application :
    • Crée une instance de votre classe d’application
    • Initialise le toolkit JavaFX
    • Appelle séquentiellement init(), puis start() avec le Stage principal

JavaFX Properties

Contrôleur

  • Classe Java responsable de la logique et de la réactivité de l’interface
  • Dans l’architecture MVC (Modèle-Vue-Contrôleur) de JavaFX :
    • Gère la communication entre le modèle de données et la vue (FXML)
    • Implémente les gestionnaires d’événements (event handlers)
    • Manipule les éléments d’interface déclarés dans le FXML
  • Avec FXML, les contrôleurs sont liés via l’attribut fx:controller
  • Les composants manipulables sont annotés avec @FXML
  • Les gestionnaires d’événements (méthodes annotées @FXML) réagissent aux actions utilisateur

Pour aller plus loin

  • Cours très complet: https://jenkov.com/tutorials/javafx/index.html