JavaFX - Application

Dans ce chapitre, nous aborderons en détail la structure d'une application JavaFX et apprendrons également à créer une application JavaFX avec un exemple.

Structure de l'application JavaFX

En général, une application JavaFX aura trois composants principaux à savoir Stage, Scene et Nodes comme indiqué dans le diagramme suivant.

Étape

Une scène (une fenêtre) contient tous les objets d'une application JavaFX. Il est représenté parStage classe du package javafx.stage. L'étape principale est créée par la plateforme elle-même. L'objet stage créé est passé en argument austart() méthode de la Application classe (expliqué dans la section suivante).

Un étage a deux paramètres déterminant sa position à savoir Width et Height. Il est divisé en zone de contenu et décorations (barre de titre et bordures).

Il existe cinq types d'étapes disponibles -

  • Decorated
  • Undecorated
  • Transparent
  • Unified
  • Utility

Vous devez appeler le show() méthode pour afficher le contenu d'une étape.

Scène

Une scène représente le contenu physique d'une application JavaFX. Il contient tout le contenu d'un graphe de scène. La classeScene du forfait javafx.scenereprésente l'objet de la scène. Dans une instance, l'objet scène est ajouté à une seule étape.

Vous pouvez créer une scène en instanciant la classe de scène. Vous pouvez opter pour la taille de la scène en passant ses dimensions (hauteur et largeur) avec leroot node à son constructeur.

Graphe de scène et nœuds

UNE scene graphest une structure de données arborescente (hiérarchique) représentant le contenu d'une scène. En revanche, unnode est un objet visuel / graphique d'un graphe de scène.

Un nœud peut inclure -

  • Objets géométriques (graphiques) (2D et 3D) tels que - Cercle, Rectangle, Polygone, etc.

  • Contrôles de l'interface utilisateur tels que - bouton, case à cocher, boîte de choix, zone de texte, etc.

  • Conteneurs (volets de disposition) tels que le volet de bordure, le volet de grille, le volet de flux, etc.

  • Éléments multimédias tels que les objets audio, vidéo et image.

le Node Classe du package javafx.scene représente un nœud dans JavaFX, cette classe est la super classe de tous les nœuds.

Comme indiqué précédemment, un nœud est de trois types -

  • Root Node - Le premier graphique de scène est connu sous le nom de nœud racine.

  • Branch Node/Parent Node- Le nœud avec des nœuds enfants est connu sous le nom de nœuds de branche / parent. La classe abstraite nomméeParent du forfait javafx.scene est la classe de base de tous les nœuds parents, et ces nœuds parents seront des types suivants -

    • Group- Un nœud de groupe est un nœud collectif qui contient une liste de nœuds enfants. Chaque fois que le nœud de groupe est rendu, tous ses nœuds enfants sont rendus dans l'ordre. Toute transformation, état d'effet appliqué au groupe sera appliqué à tous les nœuds enfants.

    • Region - Il s'agit de la classe de base de tous les contrôles d'interface utilisateur basés sur JavaFX Node, tels que Chart, Pane et Control.

    • WebView - Ce nœud gère le moteur Web et affiche son contenu.

  • Leaf Node- Le nœud sans nœuds enfants est appelé nœud feuille. Par exemple, Rectangle, Ellipse, Box, ImageView, MediaView sont des exemples de nœuds feuilles.

Il est obligatoire de passer le nœud racine au graphe de la scène. Si le groupe est passé en tant que racine, tous les nœuds seront coupés à la scène et toute modification de la taille de la scène n'affectera pas la disposition de la scène.

Création d'une application JavaFX

Pour créer une application JavaFX, vous devez instancier la classe Application et implémenter sa méthode abstraite start(). Dans cette méthode, nous écrirons le code de l'application JavaFX.

Classe d'application

le Application classe du package javafx.applicationest le point d'entrée de l'application dans JavaFX. Pour créer une application JavaFX, vous devez hériter de cette classe et implémenter sa méthode abstraitestart(). Dans cette méthode, vous devez écrire le code complet pour les graphiques JavaFX

dans le main méthode, vous devez lancer l'application à l'aide de la launch()méthode. Cette méthode appelle en interne lestart() méthode de la classe Application comme indiqué dans le programme suivant.

public class JavafxSample extends Application {  
   @Override     
   public void start(Stage primaryStage) throws Exception { 
      /* 
      Code for JavaFX application. 
      (Stage, scene, scene graph) 
      */       
   }         
   public static void main(String args[]){           
      launch(args);      
   } 
}

Dans le start() méthode, afin de créer une application JavaFX typique, vous devez suivre les étapes ci-dessous -

  • Préparez un graphe de scène avec les nœuds requis.

  • Préparez une scène avec les dimensions requises et ajoutez-y le graphique de scène (nœud racine du graphique de scène).

  • Préparez une scène et ajoutez la scène à la scène et affichez le contenu de la scène.

Préparation du graphique de scène

Selon votre application, vous devez préparer un graphique de scène avec les nœuds requis. Étant donné que le nœud racine est le premier nœud, vous devez créer un nœud racine. En tant que nœud racine, vous pouvez choisir parmi lesGroup, Region or WebView.

Group - Un nœud de groupe est représenté par la classe nommée Group qui appartient au package javafx.scene, vous pouvez créer un nœud de groupe en instanciant cette classe comme indiqué ci-dessous.

Group root = new Group();

le getChildren() méthode de la Group class vous donne un objet du ObservableListclasse qui contient les nœuds. Nous pouvons récupérer cet objet et y ajouter des nœuds comme indiqué ci-dessous.

//Retrieving the observable list object 
ObservableList list = root.getChildren(); 
       
//Setting the text object as a node  
list.add(NodeObject);

Nous pouvons également ajouter des objets Node au groupe, simplement en les passant au Group class et à son constructeur au moment de l'instanciation, comme indiqué ci-dessous.

Group root = new Group(NodeObject);

Region - Il s'agit de la classe de base de tous les contrôles d'interface utilisateur basés sur les nœuds JavaFX, tels que -

  • Chart - Cette classe est la classe de base de tous les graphiques et appartient au package javafx.scene.chart.

    Cette classe a deux sous-classes, qui sont - PieChart et XYChart. Ces deux à leur tour ont des sous-classes telles queAreaChart, BarChart, BubbleChart, etc. utilisé pour dessiner différents types de graphiques XY-Plane dans JavaFX.

    Vous pouvez utiliser ces classes pour incorporer des graphiques dans votre application.

  • Pane - Un volet est la classe de base de tous les volets de disposition tels que AnchorPane, BorderPane, DialogPane, etc. Cette classe appartient à un package appelé - javafx.scene.layout.

    Vous pouvez utiliser ces classes pour insérer des dispositions prédéfinies dans votre application.

  • Control - C'est la classe de base des contrôles de l'interface utilisateur tels que Accordion, ButtonBar, ChoiceBox, ComboBoxBase, HTMLEditor, etc. This class belongs to the package javafx.scene.control.

    Vous pouvez utiliser ces classes pour insérer divers éléments d'interface utilisateur dans votre application.

Dans un groupe, vous pouvez instancier l'une des classes mentionnées ci-dessus et les utiliser comme nœuds racine, comme indiqué dans le programme suivant.

//Creating a Stack Pane 
StackPane pane = new StackPane();       
       
//Adding text area to the pane  
ObservableList list = pane.getChildren(); 
list.add(NodeObject);

WebView - Ce nœud gère le moteur Web et affiche son contenu.

Voici un diagramme représentant la hiérarchie des classes de nœuds de JavaFX.

Préparer la scène

Une scène JavaFX est représentée par le Scene classe du package javafx.scene. Vous pouvez créer une scène en instanciant cette classe comme indiqué dans le bloc de code suivant.

Lors de l'instanciation, il est obligatoire de passer l'objet racine au constructeur de la classe de scène.

Scene scene = new Scene(root);

Vous pouvez également passer deux paramètres de type double représentant la hauteur et la largeur de la scène comme indiqué ci-dessous.

Scene scene = new Scene(root, 600, 300);

Préparer la scène

Il s'agit du conteneur de toute application JavaFX et il fournit une fenêtre pour l'application. Il est représenté par leStage classe du package javafx.stage. Un objet de cette classe est passé en paramètre dustart() méthode de la Application classe.

À l'aide de cet objet, vous pouvez effectuer diverses opérations sur la scène. Vous pouvez principalement effectuer les opérations suivantes -

  • Définissez le titre de la scène en utilisant la méthode setTitle().

  • Attachez l'objet de scène à la scène à l'aide du setScene() méthode.

  • Affichez le contenu de la scène à l'aide du show() méthode comme indiqué ci-dessous.

//Setting the title to Stage. 
primaryStage.setTitle("Sample application"); 
       
//Setting the scene to Stage 
primaryStage.setScene(scene); 
       
//Displaying the stage 
primaryStage.show();

Cycle de vie de l'application JavaFX

La classe Application JavaFX a trois méthodes de cycle de vie, qui sont -

  • start() - La méthode du point d'entrée où le code graphique JavaFX doit être écrit.

  • stop() - Une méthode vide qui peut être remplacée, ici vous pouvez écrire la logique pour arrêter l'application.

  • init() - Une méthode vide qui peut être remplacée, mais vous ne pouvez pas créer d'étape ou de scène dans cette méthode.

En plus de ceux-ci, il fournit une méthode statique nommée launch() pour lancer l'application JavaFX.

Depuis le launch()est statique, vous devez l'appeler à partir d'un contexte statique (main en général). Chaque fois qu'une application JavaFX est lancée, les actions suivantes seront exécutées (dans le même ordre).

  • Une instance de la classe d'application est créée.

  • Init() méthode est appelée.

  • le start() méthode est appelée.

  • Le lanceur attend que l'application se termine et appelle le stop() méthode.

Arrêt de l'application JavaFX

Lorsque la dernière fenêtre de l'application est fermée, l'application JavaFX se termine implicitement. Vous pouvez désactiver ce comportement en transmettant la valeur booléenne «False» à la méthode statique setImplicitExit() (doit être appelé à partir d'un contexte statique).

Vous pouvez mettre fin à une application JavaFX explicitement à l'aide des méthodes Platform.exit() ou System.exit(int).

Exemple 1 - Création d'une fenêtre vide

Cette section vous apprend à créer un exemple d'application JavaFX qui affiche une fenêtre vide. Voici les étapes -

Étape 1: Créer une classe

Créez une classe Java et héritez du Application classe du package javafx.application et implémentez la méthode start () de cette classe comme suit.

public class JavafxSample extends Application {  
   @Override     
   public void start(Stage primaryStage) throws Exception {      
   }    
}

Étape 2: création d'un objet de groupe

dans le start() crée un objet de groupe en instanciant la classe nommée Group, qui appartient au package javafx.scene, comme suit.

Group root = new Group();

Étape 3: création d'un objet de scène

Créez une scène en instanciant la classe nommée Scene qui appartient au package javafx.scene. À cette classe, transmettez l'objet Group(root), créé à l'étape précédente.

En plus de l'objet racine, vous pouvez également transmettre deux doubles paramètres représentant la hauteur et la largeur de l'écran avec l'objet de la classe Group comme suit.

Scene scene = new Scene(root,600, 300);

Étape 4: Définition du titre de la scène

Vous pouvez définir le titre de la scène à l'aide du setTitle() méthode de la Stageclasse. leprimaryStage est un objet Stage qui est passé à la méthode start de la classe Scene, en tant que paramètre.

En utilisant le primaryStage objet, définissez le titre de la scène comme Sample Application comme indiqué ci-dessous.

primaryStage.setTitle("Sample Application");

Étape 5: Ajouter une scène à la scène

Vous pouvez ajouter un objet Scene à la scène en utilisant la méthode setScene() de la classe nommée Stage. Ajoutez l'objet Scene préparé aux étapes précédentes à l'aide de cette méthode comme indiqué ci-dessous.

primaryStage.setScene(scene);

Étape 6: Affichage du contenu de la scène

Affichez le contenu de la scène en utilisant la méthode nommée show() du Stage classe comme suit.

primaryStage.show();

Étape 7: Lancement de l'application

Lancez l'application JavaFX en appelant la méthode statique launch() du Application classe de la méthode principale comme suit.

public static void main(String args[]){   
   launch(args);      
}

Exemple

Le programme suivant génère une fenêtre JavaFX vide. Enregistrez ce code dans un fichier avec le nomJavafxSample.java

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.paint.Color; 
import javafx.stage.Stage;  

public class JavafxSample extends Application { 
   @Override     
   public void start(Stage primaryStage) throws Exception {            
      //creating a Group object 
      Group group = new Group(); 
       
      //Creating a Scene by passing the group object, height and width   
      Scene scene = new Scene(group ,600, 300); 
      
      //setting color to the scene 
      scene.setFill(Color.BROWN);  
      
      //Setting the title to Stage. 
      primaryStage.setTitle("Sample Application"); 
   
      //Adding the scene to Stage 
      primaryStage.setScene(scene); 
       
      //Displaying the contents of the stage 
      primaryStage.show(); 
   }    
   public static void main(String args[]){          
      launch(args);     
   }         
}

Compilez et exécutez le fichier java enregistré à partir de l'invite de commande à l'aide des commandes suivantes.

javac JavafxSample.java 
java JavafxSample

Lors de l'exécution, le programme ci-dessus génère une fenêtre JavaFX comme indiqué ci-dessous.

Exemple 2 - Tracer une ligne droite

Dans l'exemple précédent, nous avons vu comment créer une scène vide, maintenant dans cet exemple essayons de tracer une ligne droite en utilisant la bibliothèque JavaFX.

Voici les étapes -

Étape 1: Créer une classe

Créez une classe Java et héritez du Application classe du package javafx.application et mettre en œuvre le start() méthode de cette classe comme suit.

public class DrawingLine extends Application {
   @Override     
   public void start(Stage primaryStage) throws Exception {     
   }    
}

Étape 2: création d'une ligne

Vous pouvez créer une ligne dans JavaFX en instanciant la classe nommée Line qui appartient à un package javafx.scene.shape, instanciez cette classe comme suit.

//Creating a line object         
Line line = new Line();

Étape 3: Définition des propriétés de la ligne

Spécifiez les coordonnées pour tracer la ligne sur un plan XY en définissant les propriétés startX, startY, endX et endY, en utilisant leurs méthodes de définition respectives, comme indiqué dans le bloc de code suivant.

line.setStartX(100.0); 
line.setStartY(150.0); 
line.setEndX(500.0); 
line.setEndY(150.0);

Étape 4: Création d'un objet de groupe

Dans la méthode start (), créez un objet groupe en instanciant la classe nommée Group, qui appartient au package javafx.scene.

Passez l'objet Line (node), créé à l'étape précédente, comme paramètre au constructeur de la classe Group, afin de l'ajouter au groupe comme suit -

Group root = new Group(line);

Étape 5: Création d'un objet de scène

Créez une scène en instanciant la classe nommée Scene qui appartient au package javafx.scene. À cette classe, transmettez l'objet Group(root) qui a été créé à l'étape précédente.

En plus de l'objet racine, vous pouvez également transmettre deux doubles paramètres représentant la hauteur et la largeur de l'écran avec l'objet de la classe Group comme suit.

Scene scene = new Scene(group ,600, 300);

Étape 6: Définition du titre de la scène

Vous pouvez définir le titre de la scène à l'aide du setTitle() méthode de la Stageclasse. leprimaryStage est un objet Stage qui est passé à la méthode start de la classe Scene, en tant que paramètre.

En utilisant le primaryStage objet, définissez le titre de la scène comme Sample Application comme suit.

primaryStage.setTitle("Sample Application");

Étape 7: Ajouter une scène à la scène

Vous pouvez ajouter un objet Scene à la scène en utilisant la méthode setScene() de la classe nommée Stage. Ajoutez l'objet Scene préparé aux étapes précédentes à l'aide de cette méthode comme suit.

primaryStage.setScene(scene);

Étape 8: Affichage du contenu de la scène

Affichez le contenu de la scène en utilisant la méthode nommée show() du Stage classe comme suit.

primaryStage.show();

Étape 9: Lancement de l'application

Lancez l'application JavaFX en appelant la méthode statique launch() du Application classe de la méthode principale comme suit.

public static void main(String args[]){   
   launch(args);      
}

Exemple

Le programme suivant montre comment générer une ligne droite à l'aide de JavaFX. Enregistrez ce code dans un fichier avec le nomJavafxSample.java.

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.shape.Line; 
import javafx.stage.Stage;  

public class DrawingLine extends Application{ 
   @Override 
   public void start(Stage stage) { 
      //Creating a line object 
      Line line = new Line(); 
         
      //Setting the properties to a line 
      line.setStartX(100.0); 
      line.setStartY(150.0); 
      line.setEndX(500.0); 
      line.setEndY(150.0); 
         
      //Creating a Group 
      Group root = new Group(line); 
         
      //Creating a Scene 
      Scene scene = new Scene(root, 600, 300); 
         
      //Setting title to the scene 
      stage.setTitle("Sample application"); 
         
      //Adding the scene to the stage 
      stage.setScene(scene); 
         
      //Displaying the contents of a scene 
      stage.show(); 
   }      
   public static void main(String args[]){ 
      launch(args); 
   } 
}

Compilez et exécutez le fichier java enregistré à partir de l'invite de commande à l'aide des commandes suivantes.

javac DrawingLine.java 
java DrawingLine

Lors de l'exécution, le programme ci-dessus génère une fenêtre JavaFX affichant une ligne droite comme illustré ci-dessous.

Exemple 3 - Affichage de texte

Nous pouvons également incorporer du texte dans la scène JavaFX. Cet exemple montre comment incorporer du texte dans JavaFX.

Voici les étapes -

Étape 1: Créer une classe

Créez une classe Java et héritez du Application classe du package javafx.application et mettre en œuvre le start() méthode de cette classe comme suit.

public class DrawingLine extends Application {  
   @Override     
   public void start(Stage primaryStage) throws Exception {     
   } 
}

Étape 2: Intégration de texte

Vous pouvez incorporer du texte dans une scène JavaFX en instanciant la classe nommée Text qui appartient à un package javafx.scene.shape, instanciez cette classe.

Vous pouvez instancier cette classe en passant le texte à incorporer, au format String Ou, vous pouvez créer un objet texte en utilisant le constructeur par défaut comme indiqué ci-dessous.

//Creating a Text object 
Text text = new Text();

Étape 3: Définition de la police

Vous pouvez définir la police du texte à l'aide du setFont() méthode de la Textclasse. Cette méthode accepte un objet de police comme paramètres. Définissez la police du texte donné sur 45 comme indiqué ci-dessous.

//Setting font to the text 
text.setFont(new Font(45));

Étape 4: Définition de la position du texte

Vous pouvez définir la position du texte sur le plan XY en définissant les coordonnées X, Y à l'aide des méthodes de réglage respectives setX() et setY() comme suit.

//setting the position of the text 
text.setX(50); 
text.setY(150);

Étape 5: Définition du texte à ajouter

Vous pouvez définir le texte à ajouter à l'aide de la méthode setText () de la classe Text. Cette méthode accepte un paramètre de chaîne représentant le texte à ajouter.

text.setText("Welcome to Tutorialspoint");

Étape 6: Création d'un objet de groupe

dans le start() méthode, créez un objet de groupe en instanciant la classe nommée Group, qui appartient au package javafx.scene.

Passez l'objet Text (node), créé à l'étape précédente, comme paramètre au constructeur de la classe Group, afin de l'ajouter au groupe comme suit -

Group root = new Group(text)

Étape 7: Création d'un objet de scène

Créez une scène en instanciant la classe nommée Scene qui appartient au package javafx.scene. À cette classe, transmettez l'objet Group(root), créé à l'étape précédente.

En plus de l'objet racine, vous pouvez également transmettre deux doubles paramètres représentant la hauteur et la largeur de l'écran avec l'objet de la classe Group comme suit.

Scene scene = new Scene(group ,600, 300);

Étape 8: Définition du titre de la scène

Vous pouvez définir le titre de la scène à l'aide du setTitle() méthode de la Stageclasse. leprimaryStage est un objet Stage qui est passé à la méthode start de la classe Scene, en tant que paramètre.

En utilisant le primaryStage objet, définissez le titre de la scène comme Sample Application comme indiqué ci-dessous.

primaryStage.setTitle("Sample Application");

Étape 9: Ajouter une scène à la scène

Vous pouvez ajouter un objet Scene à la scène en utilisant la méthode setScene() de la classe nommée Stage. Ajoutez l'objet Scene préparé aux étapes précédentes à l'aide de cette méthode comme suit.

primaryStage.setScene(scene);

Étape 10: Affichage du contenu de la scène

Affichez le contenu de la scène en utilisant la méthode nommée show() du Stage classe comme suit.

primaryStage.show();

Étape 11: Lancement de l'application

Lancez l'application JavaFX en appelant la méthode statique launch() du Application classe de la méthode principale comme suit.

public static void main(String args[]){ 
   launch(args);      
}

Exemple

Voici le programme pour afficher du texte à l'aide de JavaFX. Enregistrez ce code dans un fichier avec un nomDisplayingText.java.

import javafx.application.Application; 
import javafx.collections.ObservableList; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 
import javafx.scene.text.Font; 
import javafx.scene.text.Text; 
         
public class DisplayingText extends Application { 
   @Override 
   public void start(Stage stage) {       
      //Creating a Text object 
      Text text = new Text(); 
       
      //Setting font to the text 
      text.setFont(new Font(45)); 
       
      //setting the position of the text 
      text.setX(50); 
      text.setY(150);          
      
      //Setting the text to be added. 
      text.setText("Welcome to Tutorialspoint"); 
         
      //Creating a Group object  
      Group root = new Group(); 
       
      //Retrieving the observable list object 
      ObservableList list = root.getChildren(); 
       
      //Setting the text object as a node to the group object 
      list.add(text);       
               
      //Creating a scene object 
      Scene scene = new Scene(root, 600, 300); 
       
      //Setting title to the Stage 
      stage.setTitle("Sample Application"); 
         
      //Adding scene to the stage 
      stage.setScene(scene); 
         
      //Displaying the contents of the stage 
      stage.show(); 
   }   
   public static void main(String args[]){ 
      launch(args); 
   } 
}

Compilez et exécutez le fichier java enregistré à partir de l'invite de commande à l'aide des commandes suivantes.

javac DisplayingText.java 
java DisplayingText

Lors de l'exécution, le programme ci-dessus génère une fenêtre JavaFX affichant le texte comme indiqué ci-dessous.