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
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);
}
}
âą
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);
}
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
}
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;
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 Scenejavafx.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
applicationpour les projets JavaFX - Imports : Au minimum
ApplicationetStage
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 :
- init() : Appelée avant start(), pour l'initialisation (optionnelle)
- start() : Appelée pour démarrer l'application (obligatoire)
- 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...");
}
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);
}
}
âą
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);
}
}
âą 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'appelerprimaryStage.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
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
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)
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);
}
}
Ă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);
}
}
âą 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 :
- Créer le layout (VBox, HBox, etc.)
- Créer les composants (Label, Button, etc.)
- Ajouter les composants au layout (getChildren().add())
- Créer la Scene avec le layout comme Node racine
- Attacher la Scene au Stage (setScene())
- Afficher le Stage (show())
đĄ 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
â Checklist de votre premiĂšre application
Vérifiez que votre application contient bien :
- â
Une classe qui étend
Application - â
La méthode
main()aveclaunch(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é