↑
CHAPITRE 1.3

PremiĂšre application JavaFX

Créer votre premiÚre application JavaFX fonctionnelle étape par étape
Dans cette section, vous allez crĂ©er votre premiĂšre application JavaFX complĂšte. Vous apprendrez la structure minimale d'un projet JavaFX, le cycle de vie d'une application, comment afficher un Stage, et comment ajouter vos premiers composants (Label) dans un layout simple. À la fin de cette section, vous aurez créé et exĂ©cutĂ© votre premiĂšre application JavaFX fonctionnelle.

1.3PremiĂšre application JavaFX

1.3.1 – Structure minimale d'un projet JavaFX

Avant de créer votre premiÚre application, il est important de comprendre la structure minimale nécessaire pour qu'une application JavaFX fonctionne. Cette section vous présente les éléments essentiels.

📁 Structure d'un projet JavaFX minimal

Un projet JavaFX minimal nécessite au minimum :

  • Une classe principale qui Ă©tend Application
  • La mĂ©thode main() qui lance l'application
  • La mĂ©thode start() qui configure et affiche l'interface

Structure des fichiers

Dans Eclipse, aprÚs avoir créé un projet JavaFX, vous devriez avoir une structure similaire à celle-ci :

Sample/
├── src/
│   ├── application/
│   │   ├── Main.java          # Classe principale
│   │   └── application.css   # Fichier CSS (créé automatiquement par e(fx)clipse)
│   └── module-info.java       # DĂ©finition du module Java
├── bin/                       # Dossier de compilation (gĂ©nĂ©rĂ© automatiquement)
├── build.fxbuild             # Configuration de build
├── .classpath                 # Configuration du classpath Eclipse
├── .project                   # Configuration du projet Eclipse
└── .settings/                 # Paramùtres Eclipse
                    
Dans l'explorateur Eclipse, vous verrez aussi :
├── JRE System Library [jdk-25]  # Bibliothùque Java
└── JavaFX SDK                   # Bibliothùque JavaFX
Note : Le fichier application.css est créé automatiquement par e(fx)clipse dans le package application. Les fichiers FXML ne sont pas créés automatiquement - vous devez les créer manuellement si vous souhaitez utiliser FXML. Le fichier module-info.java est aussi généré automatiquement. Note importante : e(fx)clipse ne crée pas de dossier resources par défaut. Les fichiers sont placés directement dans le package application.

📝 Classe Application

Toute application JavaFX doit avoir une classe qui étend javafx.application.Application. Cette classe est le point d'entrée de votre application.

Exemple minimal : Application vide

package application;

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

public class Main extends Application {
    
    @Override
    public void start(Stage primaryStage) {
        // Votre code ici
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}
Explication :
‱ extends Application : Votre classe hĂ©rite de la classe Application de JavaFX
‱ @Override : Indique que vous redĂ©finissez la mĂ©thode start()
‱ start(Stage primaryStage) : MĂ©thode appelĂ©e automatiquement au lancement
‱ primaryStage : La fenĂȘtre principale fournie par JavaFX
‱ main(String[] args) : Point d'entrĂ©e classique de Java
‱ launch(args) : Lance l'application JavaFX

🔑 ÉlĂ©ments essentiels

1. La méthode main()

La méthode main() est le point d'entrée standard d'une application Java. Pour JavaFX, elle doit simplement appeler launch(args) :

public static void main(String[] args) {
    launch(args);
}
Important : launch(args) est une méthode statique de la classe Application. Elle initialise JavaFX et appelle automatiquement la méthode start().

2. La méthode start()

La méthode start() est appelée automatiquement par JavaFX aprÚs l'initialisation. C'est ici que vous configurez et affichez votre interface :

@Override
public void start(Stage primaryStage) {
    // primaryStage est la fenĂȘtre principale
    // Configurez et affichez votre interface ici
}
Conseil : Le paramĂštre primaryStage est fourni automatiquement par JavaFX. C'est la fenĂȘtre principale de votre application. Vous n'avez pas besoin de le crĂ©er vous-mĂȘme.

3. Le package

Par convention, les classes principales sont placées dans un package application :

package application;
Note : Vous pouvez utiliser n'importe quel nom de package, mais application est une convention courante pour les projets JavaFX créés avec e(fx)clipse.

📩 Imports nĂ©cessaires

Pour une application JavaFX minimale, vous devez importer au moins :

import javafx.application.Application;  // Classe de base
import javafx.stage.Stage;                // FenĂȘtre principale

Selon ce que vous voulez afficher, vous pourrez avoir besoin d'autres imports :

  • javafx.scene.Scene : Pour crĂ©er une Scene
  • javafx.scene.layout.* : Pour les layouts (VBox, HBox, etc.)
  • javafx.scene.control.* : Pour les composants (Label, Button, etc.)

💡 Points clĂ©s Ă  retenir

  • Classe Application : Toute application JavaFX Ă©tend Application
  • MĂ©thode main() : Appelle launch(args) pour dĂ©marrer JavaFX
  • MĂ©thode start() : ConfigurĂ©e et affiche l'interface (appelĂ©e automatiquement)
  • primaryStage : FenĂȘtre principale fournie par JavaFX
  • Package : Conventionnellement application pour les projets JavaFX
  • Imports : Au minimum Application et Stage
Prochaine étape : Maintenant que vous connaissez la structure minimale, vous allez apprendre le cycle de vie d'une application JavaFX et comment afficher un Stage dans la section suivante.

1.3.2 – Cycle de vie et affichage d'un Stage

Comprendre le cycle de vie d'une application JavaFX et savoir afficher un Stage est essentiel. Cette section vous explique comment JavaFX dĂ©marre votre application et comment configurer la fenĂȘtre principale.

🔄 Cycle de vie d'une application JavaFX

Une application JavaFX suit un cycle de vie bien défini avec trois méthodes principales :

  1. init() : Appelée avant start(), pour l'initialisation (optionnelle)
  2. start() : Appelée pour démarrer l'application (obligatoire)
  3. stop() : Appelée quand l'application se ferme (optionnelle)

Méthode init()

La méthode init() est appelée avant start(). Elle est optionnelle et sert à initialiser des ressources :

@Override
public void init() {
    // Initialisation avant le démarrage
    // Par exemple : charger des données, initialiser des variables
    System.out.println("Initialisation de l'application...");
}
Note : La méthode init() est appelée sur le thread JavaFX Application Thread, mais avant que l'interface ne soit créée. Vous pouvez l'utiliser pour préparer des données.

Méthode start()

La méthode start() est obligatoire et est appelée aprÚs init(). C'est ici que vous créez et affichez votre interface :

@Override
public void start(Stage primaryStage) {
    // Créer et configurer l'interface
    // Afficher la fenĂȘtre
}

Méthode stop()

La méthode stop() est appelée quand l'application se ferme. Elle est optionnelle et sert à nettoyer les ressources :

@Override
public void stop() {
    // Nettoyage avant la fermeture
    // Par exemple : sauvegarder des données, fermer des connexions
    System.out.println("Fermeture de l'application...");
}

đŸȘŸ CrĂ©er et afficher un Stage

Le Stage reprĂ©sente la fenĂȘtre de votre application. JavaFX vous fournit automatiquement un primaryStage dans la mĂ©thode start().

Exemple minimal : Afficher une fenĂȘtre vide

package application;

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

public class Main extends Application {
    
    @Override
    public void start(Stage primaryStage) {
        // Configurer le titre de la fenĂȘtre
        primaryStage.setTitle("Ma PremiĂšre Application");
        
        // DĂ©finir la taille de la fenĂȘtre
        primaryStage.setWidth(800);
        primaryStage.setHeight(600);
        
        // Afficher la fenĂȘtre
        primaryStage.show();
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}
Explication :
‱ setTitle() : DĂ©finit le titre affichĂ© dans la barre de titre de la fenĂȘtre
‱ setWidth() : DĂ©finit la largeur de la fenĂȘtre en pixels
‱ setHeight() : DĂ©finit la hauteur de la fenĂȘtre en pixels
‱ show() : Affiche la fenĂȘtre (sans ça, rien ne s'affiche !)

⚙ MĂ©thodes principales du Stage

Voici les méthodes les plus utilisées pour configurer un Stage :

Configuration de base

// Titre de la fenĂȘtre
primaryStage.setTitle("Mon Application");

// Taille de la fenĂȘtre
primaryStage.setWidth(800);      // Largeur en pixels
primaryStage.setHeight(600);     // Hauteur en pixels

// Position de la fenĂȘtre (optionnel)
primaryStage.setX(100);          // Position X (distance depuis la gauche)
primaryStage.setY(100);          // Position Y (distance depuis le haut)

// Redimensionnement
primaryStage.setResizable(true); // Permet ou non le redimensionnement

// Toujours au premier plan
primaryStage.setAlwaysOnTop(false); // FenĂȘtre toujours visible par-dessus les autres

// Mode plein écran
primaryStage.setFullScreen(false);  // Mode plein écran (ou non)

Méthodes utilitaires

// Afficher la fenĂȘtre
primaryStage.show();

// Cacher la fenĂȘtre
primaryStage.hide();

// Fermer la fenĂȘtre
primaryStage.close();

// VĂ©rifier si la fenĂȘtre est affichĂ©e
boolean visible = primaryStage.isShowing();

// Centrer la fenĂȘtre sur l'Ă©cran
primaryStage.centerOnScreen();

📝 Exemple complet : Application avec Stage configurĂ©

package application;

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

public class Main extends Application {
    
    @Override
    public void init() {
        System.out.println("Initialisation...");
    }
    
    @Override
    public void start(Stage primaryStage) {
        // Configuration du Stage
        primaryStage.setTitle("Ma PremiĂšre Application JavaFX");
        primaryStage.setWidth(800);
        primaryStage.setHeight(600);
        primaryStage.setResizable(true);
        
        // Centrer la fenĂȘtre sur l'Ă©cran
        primaryStage.centerOnScreen();
        
        // Afficher la fenĂȘtre
        primaryStage.show();
        
        System.out.println("Application démarrée !");
    }
    
    @Override
    public void stop() {
        System.out.println("Application fermée.");
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}
Résultat :
‱ Une fenĂȘtre vide de 800x600 pixels apparaĂźt
‱ Le titre "Ma Premiùre Application JavaFX" s'affiche dans la barre de titre
‱ La fenĂȘtre est centrĂ©e sur l'Ă©cran
‱ La fenĂȘtre peut ĂȘtre redimensionnĂ©e
‱ Les messages s'affichent dans la console lors du dĂ©marrage et de la fermeture

⚠ Erreurs courantes

Voici les erreurs les plus fréquentes lors de la création d'un Stage :

  • Oublier show() : La fenĂȘtre ne s'affichera pas si vous oubliez d'appeler primaryStage.show()
  • Appeler show() avant de configurer : Configurez d'abord le Stage, puis affichez-le
  • Ne pas dĂ©finir de taille : Si vous ne dĂ©finissez pas de taille, la fenĂȘtre sera trĂšs petite ou invisible
Important : N'oubliez jamais d'appeler primaryStage.show() ! Sans cette mĂ©thode, votre fenĂȘtre ne s'affichera pas, mĂȘme si tout le reste est correct.

💡 Points clĂ©s Ă  retenir

  • Cycle de vie : init() → start() → stop()
  • start() : MĂ©thode obligatoire, appelĂ©e automatiquement
  • primaryStage : FenĂȘtre principale fournie par JavaFX
  • setTitle() : DĂ©finit le titre de la fenĂȘtre
  • setWidth() / setHeight() : DĂ©finit la taille de la fenĂȘtre
  • show() : Affiche la fenĂȘtre (obligatoire !)
  • centerOnScreen() : Centre la fenĂȘtre sur l'Ă©cran
Conseil : Commencez toujours par crĂ©er une fenĂȘtre vide qui s'affiche correctement avant d'ajouter du contenu. Cela vous permet de vĂ©rifier que votre configuration de base fonctionne.

1.3.3 – Ajouter un Label dans un layout simple

Maintenant que vous savez créer et afficher un Stage, vous allez apprendre à ajouter du contenu. Dans cette section, vous découvrirez les layouts (conteneurs) et comment ajouter votre premier composant : un Label.

📩 Les Layouts (conteneurs)

Un layout (ou conteneur) est un composant qui organise d'autres composants. Pour afficher du contenu dans une Scene, vous devez d'abord créer un layout qui servira de Node racine.

Layouts simples pour débuter

  • VBox : Organise les composants verticalement (un en dessous de l'autre)
  • HBox : Organise les composants horizontalement (un Ă  cĂŽtĂ© de l'autre)
  • StackPane : Superpose les composants (un par-dessus l'autre)
Pour commencer : Utilisez VBox pour votre premiĂšre application. C'est le layout le plus simple et le plus intuitif.

đŸ·ïž Le composant Label

Un Label est un composant qui affiche du texte. C'est l'un des composants les plus simples de JavaFX.

Créer un Label

// Label avec texte
Label label = new Label("Bonjour JavaFX !");

// Label vide (texte défini plus tard)
Label labelVide = new Label();
labelVide.setText("Texte défini aprÚs création");

📝 Exemple complet : Application avec Label

Voici un exemple complet qui combine tout ce que vous avez appris :

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 Main extends Application {
    
    @Override
    public void start(Stage primaryStage) {
        // ============================================
        // ÉTAPE 1 : CrĂ©er un layout (conteneur)
        // ============================================
        VBox root = new VBox();
        
        // ============================================
        // ÉTAPE 2 : CrĂ©er un Label
        // ============================================
        Label label = new Label("Bonjour JavaFX !");
        
        // ============================================
        // ÉTAPE 3 : Ajouter le Label au layout
        // ============================================
        root.getChildren().add(label);
        
        // ============================================
        // ÉTAPE 4 : CrĂ©er une Scene avec le layout
        // ============================================
        Scene scene = new Scene(root, 400, 300);
        
        // ============================================
        // ÉTAPE 5 : Configurer et afficher le Stage
        // ============================================
        primaryStage.setTitle("Ma PremiĂšre Application");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}
Explication étape par étape :

Étape 1 : CrĂ©er un VBox qui servira de conteneur racine
Étape 2 : CrĂ©er un Label avec le texte "Bonjour JavaFX !"
Étape 3 : Ajouter le Label au VBox avec getChildren().add()
Étape 4 : CrĂ©er une Scene avec le VBox comme Node racine
Étape 5 : Attacher la Scene au Stage et l'afficher

🎹 Personnaliser le Label

Vous pouvez personnaliser l'apparence d'un Label de plusieurs façons :

Exemple : Label personnalisé

Label label = new Label("Mon Label Personnalisé");

// Changer le texte
label.setText("Nouveau texte");

// Style inline (CSS)
label.setStyle("-fx-font-size: 18px; -fx-font-weight: bold; -fx-text-fill: blue;");

// Ou utiliser des méthodes JavaFX
label.setStyle("-fx-font-size: 20px;");
label.setStyle("-fx-text-fill: red;");

📩 Personnaliser le VBox

Vous pouvez aussi personnaliser le VBox pour améliorer l'apparence :

VBox root = new VBox();

// Espacement entre les éléments
root.setSpacing(10);

// Padding (marge intérieure)
root.setStyle("-fx-padding: 20px;");

// Alignement
root.setStyle("-fx-alignment: center;");

// Ou combiner plusieurs styles
root.setStyle("-fx-padding: 20px; -fx-alignment: center; -fx-background-color: #f0f0f0;");

📝 Exemple amĂ©liorĂ© : Application avec Label stylisĂ©

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 Main extends Application {
    
    @Override
    public void start(Stage primaryStage) {
        // Créer le layout avec espacement
        VBox root = new VBox(20); // 20 pixels d'espacement
        root.setStyle("-fx-padding: 30px; -fx-alignment: center;");
        
        // Créer un Label stylisé
        Label label = new Label("Bienvenue dans JavaFX !");
        label.setStyle("-fx-font-size: 24px; -fx-font-weight: bold; -fx-text-fill: #2c3e50;");
        
        // Ajouter le Label au layout
        root.getChildren().add(label);
        
        // Créer la Scene
        Scene scene = new Scene(root, 500, 400);
        
        // Configurer et afficher
        primaryStage.setTitle("Ma PremiĂšre Application JavaFX");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}
Résultat :
‱ Une fenĂȘtre de 500x400 pixels
‱ Un Label centrĂ© avec un texte en gras et en bleu foncĂ©
‱ Un espacement de 20 pixels entre les Ă©lĂ©ments (utile si vous ajoutez d'autres composants)
‱ Un padding de 30 pixels autour du contenu

🔄 Ordre des opĂ©rations (important !)

L'ordre dans lequel vous créez et assemblez les composants est important :

  1. Créer le layout (VBox, HBox, etc.)
  2. Créer les composants (Label, Button, etc.)
  3. Ajouter les composants au layout (getChildren().add())
  4. Créer la Scene avec le layout comme Node racine
  5. Attacher la Scene au Stage (setScene())
  6. Afficher le Stage (show())
Erreur courante : Ne pas crĂ©er de Scene avant d'avoir un Node racine (layout). Une Scene doit toujours avoir un Node racine, mĂȘme si c'est juste un VBox vide.

💡 Points clĂ©s Ă  retenir

  • Layout : Conteneur qui organise les composants (VBox, HBox, etc.)
  • Label : Composant pour afficher du texte
  • VBox : Layout simple qui organise verticalement
  • getChildren().add() : MĂ©thode pour ajouter un composant Ă  un layout
  • Scene : Doit avoir un Node racine (le layout)
  • Ordre : Layout → Composants → Ajouter → Scene → Stage → show()
  • Style : Utilisez setStyle() avec du CSS pour personnaliser
Félicitations ! Vous avez maintenant créé votre premiÚre application JavaFX complÚte avec un composant affiché. Vous pouvez maintenant expérimenter en ajoutant d'autres Labels, en changeant les styles, ou en essayant d'autres layouts comme HBox.

✅ Checklist de votre premiùre application

Vérifiez que votre application contient bien :

  • ✅ Une classe qui Ă©tend Application
  • ✅ La mĂ©thode main() avec launch(args)
  • ✅ La mĂ©thode start(Stage primaryStage)
  • ✅ Un layout créé (VBox, HBox, etc.)
  • ✅ Au moins un composant (Label) créé
  • ✅ Le composant ajoutĂ© au layout
  • ✅ Une Scene créée avec le layout
  • ✅ La Scene attachĂ©e au Stage
  • ✅ Le Stage configurĂ© (titre, taille)
  • ✅ primaryStage.show() appelĂ©
Prochaine étape : Maintenant que vous maßtrisez les bases, vous pouvez passer au Chapitre 2 pour apprendre à utiliser FXML et Scene Builder, ce qui rendra la création d'interfaces beaucoup plus facile et visuelle !