Cours Java - JavaFX - Introduction PDF
Document Details
Uploaded by Deleted User
Département de Génie Informatique
A. Mazoul
Tags
Summary
This document provides an introduction to JavaFX, a user interface (UI) framework for Java. It discusses the structure and fundamental elements of JavaFX applications, and explains how to create and handle user interactions. The document also briefly describes the fundamental components of JavaFx.
Full Transcript
Interfaces graphiques avec JavaFx 8- Introduction Module: Programmation Objet Avancée A.Mazoul Département Génie informatique Interfaces graphiques avec JavaFx...
Interfaces graphiques avec JavaFx 8- Introduction Module: Programmation Objet Avancée A.Mazoul Département Génie informatique Interfaces graphiques avec JavaFx JavaFx Qu’est-ce que JavaFx JavaFX est un framework et une bibliothèque d'interface utilisateur issue du projet OpenJFX, qui permet aux développeurs Java de créer une interface. En mars 2014, JavaFX devient la bibliothèque de création d'interface graphique officielle du langage Java. Le développement de son prédécesseur Swing étant abandonné, excepté pour les corrections de bogues. Cette bibliothèque a été conçue pour remplacer Swing et AWT, qui ont été développés à partir de la fin des années 90 A.Mazoul Programmation orienté objet Java 2 Interfaces graphiques avec JavaFx JavaFx Structure d’une application JavaFx Une application JavaFx se compose d’une hiérarchie de composants. L'application est codée en créant une sous-classe de Application. La fenêtre principale d'une application est représentée par un objet de type Stage qui est fourni par le système au lancement de l'application. L'interface est représentée par un objet de type Scene qu'il faut créer et associer à la fenêtre (Stage). La scène est composée des différents éléments de l'interface graphique (composants de l'interface graphique) qui peuvent être de différents types: Des élément de contrôles utilisateur: Label, TextField, ListView… Des formes graphiques: Circle, rectangle, Line… Des médias: ImageView, MediaView… Les layouts pour grouper les éléments pour assurer la mise en page: BorderPane, Hbox, Vbox , GridPane…. La méthode start() construit le tout. A.Mazoul Programmation orienté objet Java 3 Interfaces graphiques avec JavaFx JavaFx Structure d’une application JavaFx Structure d’une fenêtre JavaFx: Stage Scene BorderPane HBox VBox GridPane Label TextField Button Label TextField Label CheckBox Label ComboBox Button A.Mazoul Programmation orienté objet Java 4 Interfaces graphiques avec JavaFx JavaFx Première Application JavaFx Une première application, le traditionnel Hello World !: A.Mazoul Programmation orienté objet Java 5 Interfaces graphiques avec JavaFx JavaFx Cycle de vie d'une application Lors du lancement d'une application par la méthode statique Application.launch() le runtime JavaFX effectue les opérations suivantes : Crée une instance de la classe qui hérite de Application Appelle la méthode init() Appelle la méthode start() et lui passe en paramètre une instance de Stage (qui représente la fenêtre principale [primary stage]) Attend ensuite que l'application se termine, L'application appelle par exemple Platform.exit() (ne pas utiliser System.Exit()) Appelle la méthode stop() launch() init() start() stop() Les méthodes init() et stop() ne doivent pas obligatoirement être redéfinies (par défaut elle ne font rien). A.Mazoul Programmation orienté objet Java 6 Interfaces graphiques avec JavaFx JavaFx Cycle de vie d'une application A.Mazoul Programmation orienté objet Java 7 Interfaces graphiques avec JavaFx JavaFx Traiter une action de l'utilisateur La méthode setOnAction() permet d'enregistrer un EventHandler< ActionEvent > EventHandler est une interface fonctionnelle possédant la méthode handle(event) qui définit l'action à effectuer). On utilisant l’expression Lambda: A.Mazoul Programmation orienté objet Java 8 Interfaces graphiques avec JavaFx JavaFx Style La notion de style, skin ou thème caractérise l'ensemble des aspects visuels de l'interface graphique (forme, couleur, texture, ombre, police de caractères, …). En JavaFX, le style des composants est défini par des feuilles de style de type CSS. La méthode setUserAgentStylesheet() de la classe Application permet d'indiquer l'URL de la feuille de style qui est à appliquer globalement. Deux styles, nommés Modena et Caspian, sont prédéfinis et sont associés aux constantes Si l'on veut fixer ou changer le look and feel des interfaces, on peut le faire au démarrage de l'application : A.Mazoul Programmation orienté objet Java 9 Interfaces graphiques avec JavaFx JavaFx Fenêtre principale Par défaut, au lancement d'une application, la fenêtre principale (stage) est centrée sur l'écran. Différentes méthodes peuvent être invoquées sur l'objet Stage pour influencer la position et la taille de cette fenêtre : setX() : Position en x du coin supérieur gauche setY() : Position en y du coin supérieur gauche centerOnScreen() : Centrage sur l'écran (par défaut) setMinWidth() : Fixe la largeur minimale de la fenêtre setMinHeight() : Fixe la hauteur minimale de la fenêtre setMaxWidth() : Fixe la largeur maximale de la fenêtre setMaxHeight() : Fixe la hauteur maximale de la fenêtre setResizable() : Détermine si la fenêtre est redimensionnable sizeToScene() : Adapte la taille de la fenêtre à la taille de la scène liée à cette fenêtre A.Mazoul Programmation orienté objet Java 10 Interfaces graphiques avec JavaFx JavaFx Fenêtre principale Autres méthodes de l'objet Stage : setTitle() : Définit le titre de la fenêtre (affiché selon OS) setFullScreen() : Place la fenêtre en mode plein-écran ou en mode standard (si paramètre false) (selon OS) getIcons().add() : Définit l'icône dans la barre de titre setAlwaysOnTop() : Place la fenêtre toujours au dessus des autres (généralement à éviter) setScene() : Définit la scène (sa racine) qui est associée à la fenêtre show() : Affiche la fenêtre à l'écran (et la scène qu'elle contient) A.Mazoul Programmation orienté objet Java 11 Interfaces graphiques avec JavaFx JavaFx Fenêtre principale La fenêtre principale, appelée « primary stage » est celle qui est passée en paramètre (par le système) à la méthode start(). Dans une application JavaFX, il est possible de créer d'autres fenêtres indépendantes (d'autres objets Stage) et de les gérer A.Mazoul Programmation orienté objet Java 12 Interfaces graphiques avec JavaFx JavaFx Les Bordures Les classes Border et BorderStroke permettent de créer des bordures et de les assigner à la propriété border. A.Mazoul Programmation orienté objet Java 13 Interfaces graphiques avec JavaFx JavaFx Les Bordures Les classes Background, BackgroundFill et BackgroundImage permettent de créer des arrière-plans qui peuvent être composés d'une superposition de remplissage (fill) et/ou d'images. A.Mazoul Programmation orienté objet Java 14 Interfaces graphiques avec JavaFx JavaFx Méthode basée sur FXML Java Fx offre la possibilité de déclarer la structure des composants de l’interface graphique dans un fichier XML. Le fichier FXML représente la vue de l’application. Au démarrage de l’application, le fichier XML est lu, les composants sont instanciés. Pour programmer les réponses aux évènements, on crée un contrôleur associé à la vue FXML La classe principale Contrôleur Vue Fichier css A.Mazoul Programmation orienté objet Java 15 Interfaces graphiques avec JavaFx JavaFx Méthode basée sur FXML Exemple de fichier Fxml Style.css Taille du layout Fichier style.css Version Java La classe Java Version API JavaFx « contrôleur » bg est la classe css La méthode qui sera invoquée après le click A.Mazoul Programmation orienté objet Java 16 Interfaces graphiques avec JavaFx JavaFx Méthode basée sur FXML Contrôleur pour gérer les évènements des éléments du fichier FXML A.Mazoul Programmation orienté objet Java 17 Interfaces graphiques avec JavaFx JavaFx les Conteneurs (Layouts) Les conteneurs jouent donc un rôle important dans la structuration et la disposition des composants qui seront placés dans les interfaces. Les layouts de JavaFX fonctionnent donc de manière similaire aux layouts de AWT/Swing JavaFX fournit plusieurs mises en page prédéfinies telles que: Hbox Vbox BorderPane StackPane TextFlow AnchorPane TitlePane GridPane FlowPanel etc… A.Mazoul Programmation orienté objet Java 18 Interfaces graphiques avec JavaFx JavaFx les Conteneurs (Layouts) A.Mazoul Programmation orienté objet Java 19 Interfaces graphiques avec JavaFx JavaFx les Conteneurs (Layouts) A.Mazoul Programmation orienté objet Java 20 Interfaces graphiques avec JavaFx JavaFx: les Conteneurs HBox HBox est un conteneur (container), qui arrange les sous-composants sur une seule ligne. Il place les composants sur une ligne horizontale. Les composants sont ajoutés à la suite les uns des autres (de gauche à droite). L'ajout des composants enfants dans le conteneur s'effectue en invoquant d'abord la méthode générale getChildren(). A.Mazoul Programmation orienté objet Java 21 Interfaces graphiques avec JavaFx JavaFx: les Conteneurs HBox A.Mazoul Programmation orienté objet Java 22 Interfaces graphiques avec JavaFx JavaFx: les Conteneurs VBox HBox est un conteneur (container), qui arrange les sous-composants sur une seule colonne. Il place les composants verticalement. Les composants sont ajoutés à la suite les uns des autres (de haut en bas). L'ajout des composants enfants dans le conteneur s'effectue en invoquant d'abord la méthode générale getChildren(). A.Mazoul Programmation orienté objet Java 23 Interfaces graphiques avec JavaFx JavaFx: les Conteneurs VBox A.Mazoul Programmation orienté objet Java 24 Interfaces graphiques avec JavaFx JavaFx: les Conteneurs FlowPane Le layout FlowPane place les composants sur une ligne horizontale ou verticale et passe à la ligne ou à la colonne suivante lorsqu'il n'y a plus assez de place disponible. L’option Orientation détermine s'il s'agit d'un FlowPane horizontal (par défaut) ou vertical. A.Mazoul Programmation orienté objet Java 25 Interfaces graphiques avec JavaFx JavaFx: les Conteneurs FlowPane L'ajout des composants enfants dans un conteneur FlowPanes'effectue en invoquant getChildren().add(…) ou addAll(n,...) Quelques propriétés importantes du conteneur FlowPane: hgap: Espacement horizontal entre les composants ou colonnes vgap: Espacement vertical entre les composants ou lignes padding: Espacement autour du conteneur alignment: Alignement global des composants dans le conteneur rowValignment: Alignement vertical dans les lignes columnHalignment: Alignement horizontal dans les colonnes prefWrapLength: Détermine la largeur préférée ou la hauteur préférée orientation: Orientation du FlowPane A.Mazoul Programmation orienté objet Java 26 Interfaces graphiques avec JavaFx JavaFx: les Conteneurs FlowPane A.Mazoul Programmation orienté objet Java 27 Interfaces graphiques avec JavaFx JavaFx: les Conteneurs TilePane Le layout TilePane place les composants dans une grille alimentée soit horizontalement (par ligne, de gauche à droite) soit verticalement (par colonne, de haut en bas). Toutes les cellules de cette grille ont la même taille. ce qui n'est pas le cas pour FlowPane. La largeur des composants correspond à la plus grande largeur et la hauteur à celle la plus grande parmi les composants placés dans le conteneur. Quelques propriétés importantes: getChildren().add(node) : L'ajout d’un composant dans un conteneur. getChildren().addAll(node1,node2,node3,...) : L'ajout de plusieurs composants dans un conteneur. A.Mazoul Programmation orienté objet Java 28 Interfaces graphiques avec JavaFx JavaFx: les Conteneurs TilePane TilePane FlowPane A.Mazoul Programmation orienté objet Java 29 Interfaces graphiques avec JavaFx JavaFx: les Conteneurs BorderPane Le conteneur BorderPane permet de placer les composants enfants dans cinq zones : Top, Bottom, Left, Rightet Center. Un seul objet Node (composant, conteneur,...) peut être placé dans chacun de ces emplacements. A.Mazoul Programmation orienté objet Java 30 Interfaces graphiques avec JavaFx JavaFx: les Conteneurs BorderPane A.Mazoul Programmation orienté objet Java 31 Interfaces graphiques avec JavaFx JavaFx: les Conteneurs AnchorPane Le conteneur AnchorPane permet de positionner les composants enfants à une certaine distance des côtés du conteneur (Top, Bottom, Left et Right). Un composant peut être ancré à plusieurs bords et même à des bords opposés (left et right par exemple). Dans ce cas, le composant pourra être étiré ou comprimé pour respecter les contraintes d'ancrage. Par défaut, les composants sont ancrés en haut et à gauche. A.Mazoul Programmation orienté objet Java 32 Interfaces graphiques avec JavaFx JavaFx: les Conteneurs AnchorPane L'ajout des composants dans un conteneur AnchorPane s'effectue en invoquant l'une des deux méthodes : getChildren().add(node) getChildren().addAll(node1,node2,node3,...) Pour définir les contraintes d'ancrage, il faut invoquer des méthodes statiques de AnchorPane: topAnchor() : définit la distance par rapport au haut rightAnchor() : définit la distance par rapport au côté droit bottomAnchor() : définit la distance par rapport au bas leftAnchor() : définit la distance par rapport au côté gauche Exemple AnchorPane.setTopAnchor(btnOk, 10.0); AnchorPane.setRightAnchor(btnOk, 0.0); AnchorPane.setBottomAnchor(btnQuit, 15.0); A.Mazoul Programmation orienté objet Java 33 Interfaces graphiques avec JavaFx JavaFx: les Conteneurs AnchorPane A.Mazoul Programmation orienté objet Java 34 Interfaces graphiques avec JavaFx JavaFx: les Conteneurs StackPane Le conteneur StackPane empile les composants les uns au dessus des autres dans l'ordre d'insertion : les premiers "au fond", les derniers "au-dessus". L'ajout des composants dans un conteneur de type StackPane s'effectue en invoquant l'une des deux méthodes : getChildren().add(node) getChildren().addAll(node1,node2,node3,...) Le conteneur StackPane peut être utile pour créer un composant complexe à partir d'éléments existants en les superposant (placer du texte au dessus d'une forme ou d'une image, combiner des éléments graphiques, etc.). Des méthodes statiques de StackPane peuvent être invoquées pour appliquer des contraintes de positionnement aux composants : alignment() : permet de modifier l'alignement par défaut (CENTER par défaut) du composant passé en paramètre. margin() : fixe une marge (objet de type Insets) autour du composant passé en paramètre (par défaut Insets.EMPTY) A.Mazoul Programmation orienté objet Java 35 Interfaces graphiques avec JavaFx JavaFx: les Conteneurs StackPane A.Mazoul Programmation orienté objet Java 36 Interfaces graphiques avec JavaFx JavaFx: les Conteneurs GridPane Le conteneur GridPane permet de disposer les composants dans une grille flexible (arrangement en lignes et en colonnes), un peu à la manière d'une table HTML. Le nombre de lignes et de colonnes de la grille est déterminé automatiquement par les endroits où sont placés les composants. Par défaut, la hauteur de chaque ligne est déterminée par la hauteur du composant le plus haut qui s'y trouve. Par défaut, la largeur de chaque colonne est déterminée par la largeur du composant le plus large qui s'y trouve. A.Mazoul Programmation orienté objet Java 37 Interfaces graphiques avec JavaFx JavaFx: les Conteneurs GridPane Les contraintes globales sont associées aux lignes/colonnes du GridPane en les ajoutant dans une liste, avec les méthodes : getRowConstraints.add(row_constraint) getColumnConstraints.add(column_constraint) L'ordre des ajouts correspond à l'ordre des lignes/colonnes A.Mazoul Programmation orienté objet Java 38 Interfaces graphiques avec JavaFx JavaFx: les Conteneurs GridPane On peut également appliquer des contraintes individuelles aux composants placés dans un GridPane. Ces contraintes sont prioritaires sur les contraintes de lignes et colonnes. Les contraintes sont appliquées en invoquant des méthodes statiques de GridPane qui permettent de gérer les propriétés suivantes : A.Mazoul Programmation orienté objet Java 39 Interfaces graphiques avec JavaFx JavaFx: les Conteneurs GridPane A.Mazoul Programmation orienté objet Java 40 Interfaces graphiques avec JavaFx JavaFx: les Conteneurs GridPane A.Mazoul Programmation orienté objet Java 41 A.Mazoul Réseaux informatiques Téléinformatique 42 Interfaces graphiques avec JavaFx 9- Composants de base Module: Programmation Objet Avancée A.Mazoul Département Génie informatique Interfaces graphiques avec JavaFx JavaFx Composants de JavaFX JavaFX offre un ensemble de composants (kit de développement) pour créer les interfaces utilisateurs graphiques. le terme composant sera utilisé pour parler des éléments qui servent à afficher des informations ou permettre à l'utilisateur d'interagir avec l'application: Libellés, icônes, boutons, champs-texte, menus, cases à cocher, etc. Les composants ont tous pour classe parente Control qui est une sous-classe de Node. A.Mazoul Programmation orienté objet Java 2 Interfaces graphiques avec JavaFx JavaFx Composants avec libellés De nombreux composants affichent et gèrent des textes (libellés, boutons, cases à cocher, etc.) Les textes de ces composants peuvent être accompagnés d'un autre composant, généralement un graphique, une image ou une icône. A.Mazoul Programmation orienté objet Java 3 Interfaces graphiques avec JavaFx JavaFx Composants avec libellés A.Mazoul Programmation orienté objet Java 4 Interfaces graphiques avec JavaFx JavaFx Label Label est un composant de l'interface(UI Component), il peut afficher le texte, des icônes, ou les deux. Les constructeurs permettent de définir le contenu du texte et de l'éventuel composant additionnel (graphic). new Label("Hello"); new Label("Warning", warningIcon); Le Label peut afficher l'icône ou texte et tous les deux. A.Mazoul Programmation orienté objet Java 5 Interfaces graphiques avec JavaFx JavaFx Label Vous pouvez définir Font (inclure le nom de Font et la taille) pour le Label par des méthodes setFont Utilisez la méthode setTextFill pour définir la couleur de police pour Label. WarpText définit si le texte passe à la ligne suivante lorsqu'il atteint la limite de la zone. Par défaut A.Mazoul Programmation orienté objet Java 6 Interfaces graphiques avec JavaFx JavaFx Button JavaFX Button permet aux dévellopeurs de traiter une action lorsqu'un utilisateur clique sur un bouton. La classe Button est une extension de la classe Labeled. Il peut afficher un texte, une image, ou les deux. Les constructeurs permettent de définir le contenu du texte et de l'éventuel composant additionnel (graphic). new Button("Ok"); new Button("Save", saveIcon); Par héritage, toutes les propriétés qui ont été mentionnées pour les composants avec libellés (sous-classes de Labeled) sont naturellement applicables pour le composant Button. onAction: Détermine l'événement à générer lorsque l'action du bouton est déclenchée. cancelButton: Booléen qui indique si le bouton est un bouton Cancel qui peut déclencher une action lorsqu'on presse sur la touche Escape (VK_ESC). defaultButton: Booléen qui indique si le bouton est un bouton par défaut, l’action doit être déclenchée lorsque l'utilisateur presse sur la touche Enter (VK_ENTER). A.Mazoul Programmation orienté objet Java 7 Interfaces graphiques avec JavaFx JavaFx Button A.Mazoul Programmation orienté objet Java 8 Interfaces graphiques avec JavaFx JavaFx TextField - binding Une liaison (binding) est effectuée entre la propriété text (contenu du champ texte) et la propriété disable en utilisant des opérations intermédiaires (isEmpty() et or()). A.Mazoul Programmation orienté objet Java 9 Interfaces graphiques avec JavaFx JavaFx TextField Le composant TextField représente un champ texte d'une seule ligne qui est éditable par défaut. prefColumnCount : permet de déterminer la largeur préférée du composant. promptText : Texte affiché si aucun texte n'a été défini ou saisi par l'utilisateur Alignment : Alignement du texte dans le champ (Pos). clear() : Supprime le texte sur TextField. copy()/ cut() : Copier/couper le texte sélectionné d’un TextField. paste() : Coller du texte depuis le clipboard.. A.Mazoul Programmation orienté objet Java 10 Interfaces graphiques avec JavaFx JavaFx TextArea Le composant TextArea permet d'afficher et de saisir du texte dans un champ multiligne (une zone de texte). Le texte peut être renvoyé à la ligne automatiquement et des barres de défilement (scrollbar) horizontales et/ou verticales sont ajoutées automatiquement si la taille du composant ne permet pas d'afficher l'entier du texte. prefColumnCount: Nombre de colonnes de la zone de texte; permet de déterminer la largeur préférée du composant. prefRowCount: Nombre de lignes de la zone de texte; permet de déterminer la hauteur préférée du composant. A.Mazoul Programmation orienté objet Java 11 Interfaces graphiques avec JavaFx JavaFx ToggleButton Le composant ToggleButton représente un bouton bistable. Il comporte donc deux états : un clic le met à l'état sélectionné (on), un nouveau clic le remet à l'état désélectionné (off). new ToggleButton("Sound"); new ToggleButton("Sound", graphic); On peut former des groupes de ToggleButton en associant les boutons concernés à un ToggleGroup. un seul bouton peut être sélectionné: ToggleGroup grp= new ToggleGroup(); btn.setToggleGroup(grp); A.Mazoul Programmation orienté objet Java 12 Interfaces graphiques avec JavaFx JavaFx RadioButton Le composant RadioButton est utilisé pour choisir une seule option parmi plusieurs. new RadioButton("text"); new RadioButton("text", graphic); Nous devons donc placer tous les RadioButton dans des groupes de type ToggleGroup afin d'obtenir sélection unique. ToggleGroup grp= new ToggleGroup(); radioBtn.setToggleGroup(grp); A.Mazoul Programmation orienté objet Java 13 Interfaces graphiques avec JavaFx JavaFx CheckBox Le composant CheckBox représente une case à cocher que l'utilisateur peut sélectionner ou désélectionner. La case à cocher peut potentiellement se trouver dans trois états différents. Dans ce cas, chaque clic fera passer le composant à l'état suivant : Désélectionné Sélectionné Indéterminé / non-défini Autorise l'état indéterminé A.Mazoul Programmation orienté objet Java 14 Interfaces graphiques avec JavaFx JavaFx Hyperlink Le composant Hyperlink se présente comme un lien hypertexte HTML dans une page web. Il agit comme un bouton lorsqu'on clique sur le texte associé et peut déclencher n'importe quelle action. Les constructeurs: new Hyperlink("text"); new Hyperlink("text", graphic); Visited : Indique si le lien a déjà été visité, c'est-à-dire cliqué. Si l'on souhaite que le lien hypertexte affiche le contenu d'une page web, on peut utiliser le composant WebView. A.Mazoul Programmation orienté objet Java 15 Interfaces graphiques avec JavaFx JavaFx TextArea A.Mazoul Programmation orienté objet Java 16 Interfaces graphiques avec JavaFx JavaFx TextArea A.Mazoul Programmation orienté objet Java 17 A.Mazoul Réseaux informatiques Téléinformatique 18 Interfaces graphiques avec JavaFx Installation & Configuration Module: Programmation Objet Avancée A.Mazoul Département Génie informatique Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation de JDK Étape 1: Installation de JDK Accédez aux téléchargements Oracle Java SE: https://www.oracle.com/java/technologies/downloads/ A.Mazoul Programmation orienté objet Java 2 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation de l’Eclipse Étape 2: Installation de l’eclipse Accédez aux téléchargements de l’eclipse: https://www.eclipse.org/downloads/packages/ A.Mazoul Programmation orienté objet Java 3 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation de l’Eclipse Étape 3: lancement de l’eclipse Il suffit d' extraire l'archive dans un répertoire (par exemple c:\eclipse) et d‘exécuter le programme eclipse.exe situé dans le répertoire eclipse décompressé. : A.Mazoul Programmation orienté objet Java 4 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation de l’Eclipse Étape 4: lancement de l’eclipse Durant la phase de lancement, Eclipse propose de sélectionner l'espace de travail à utiliser. Par défaut, c'est celui présent dans le répertoire workspace du répertoire d'Eclipse qui est proposé. : Vous pouvez choisir un autre dossier puis cocher la case « Utiliser par défaut et ne plus poser la question » avant de cliquer sur le bouton « OK ». L'espace précisé deviendra alors celui par défaut qui sera toujours utilisé par Eclipse. A.Mazoul Programmation orienté objet Java 5 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation de JavaFx avac Eclipse Étape 5: Téléchargement du SDK JavaFx Téléchargez le SDK JavaFX approprié pour votre système d'exploitation et décompressez-le à l'emplacement souhaité, (par exemple C:\javafx-sdk-17). Lien : https://gluonhq.com/products/javafx/ Window 64 bits Window 32 bits A.Mazoul Programmation orienté objet Java 6 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation de JavaFx avac Eclipse Étape 7: Configuration et importation du SDK JavaFx Créez une nouvelle bibliothèque utilisateur sous: Eclipse -> Window -> Preferences -> Java -> Build Path -> User Libraries -> New Nommez-le JavaFX17 A.Mazoul Programmation orienté objet Java 7 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation de JavaFx avac Eclipse Étape 7: Configuration et importation du SDK JavaFx Ajouter les jars depuis le dossier lib de SDK Java (téléchargé dans l’étape 5) A.Mazoul Programmation orienté objet Java 8 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation de JavaFx avac Eclipse Étape 7: Configuration et importation du SDK JavaFx Confirmer les modifications A.Mazoul Programmation orienté objet Java 9 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation de JavaFx avac Eclipse Étape 7: Créer un projet Java Sélectionnez File -> New -> Java Project fournissez un nom au projet, exemple HelloFX. Assurez-vous que JDK 11 ou supérieur est sélectionné. Vous n'avez pas besoin d'ajouter un fichier Choisir Next pour module-info.java passer à la fenêtre suivante A.Mazoul Programmation orienté objet Java 10 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation de JavaFx avac Eclipse Étape 8: Inclure le SDK JavaFx dans le projet Vous pouvez inclure la bibliothèque JavaFX17 dans le classpath A.Mazoul Programmation orienté objet Java 11 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation de JavaFx avac Eclipse Étape 8: Ajouter les Classes dans le projet Ajouter fichier suivant: MainClass.java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.BorderPane; import javafx.stage.Stage; public class MainClass extends Application { @Override public void start(Stage primaryStage) throws Exception{ BorderPane bPane=new BorderPane(); Label lab=new Label("Hello JavaFX"); bPane.setCenter(lab); primaryStage.setTitle("Hello World"); primaryStage.setScene(new Scene(bPane,300,150)); primaryStage.show(); } public static void main(String[] args) { launch(args); } } A.Mazoul Programmation orienté objet Java 12 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation de JavaFx avac Eclipse Étape 9: Correction de l’erreur VM (variable d'environnement) Si vous exécutez maintenant le projet, il sera compilé mais vous obtiendrez cette erreur : Cette erreur s'affiche car depuis Java 16 le compilateur essaye vérifier si la classe principale (MainClass.java) étend javafx.application.Application. Si c'est le cas, il est nécessaire d'avoir le module javafx.graphics sur le module-path. A.Mazoul Programmation orienté objet Java 13 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation de JavaFx avac Eclipse Étape 9: Correction de l’erreur VM (variable d'environnement) Pour résoudre le problème, cliquez sur : Run -> Run Configurations... -> Java Application Java créez une nouvelle configuration de lancement pour votre projet nommée `hellofx` et ajoutez ces arguments VM : --module-path "C:\javafx-sdk-17.0.1\lib" --add-modules javafx.controls,javafx.fxml Chemin de lib SDK javaFx A.Mazoul Programmation orienté objet Java 14 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation de JavaFx avac Eclipse Étape 10: Exécution et résultat A.Mazoul Programmation orienté objet Java 15 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation de JavaFx IDE Étape 11: installation de JavaFX IDE A.Mazoul Programmation orienté objet Java 16 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation de JavaFx IDE Étape 11: installation de e(fx)clipse 1.Rechercher e(fx)clipse 2. Rechercher 3. Installer A.Mazoul Programmation orienté objet Java 17 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation de JavaFx IDE Étape 11: installation de e(fx)clipse A.Mazoul Programmation orienté objet Java 18 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation de JavaFx IDE Étape 11: installation de e(fx)clipse A.Mazoul Programmation orienté objet Java 19 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation de JavaFx IDE Étape 11: installation de e(fx)clipse Vérifier si vous avez maintenant JavaFx dans: File -> New -> Other… -> JavaFX A.Mazoul Programmation orienté objet Java 20 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation Scene Builder Étape 12: Téléchargement de Scene Builder Essayer télécharger puis installer sur votre ordinateur Le site téléchargement: https://gluonhq.com/products/scene-builder/ A.Mazoul Programmation orienté objet Java 21 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation Scene Builder Étape 12: Ajouter Scene builder à l’Eclipse L’ajout se fait en indiquant le chemin d’installation de Scene builder (SceneBuilder.exe) à l’Eclipse, pour le faire allez dans: Eclipse -> Window -> Preferences -> JavaFX A.Mazoul Programmation orienté objet Java 22 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation Scene Builder Étape 12: lecture des fichiers fxml avec Scene builder Vous pouvez maintenant ouvrir les fichiers.fxml avec Scene Builder depuis eclipse public class MainClass extends Application { @Override public void start(Stage primaryStage) throws Exception{ Parent root = FXMLLoader.load(getClass().getResource("hellofx.fxml")); primaryStage.setTitle("Hello World"); primaryStage.setScene(new Scene(root)); primaryStage.show(); } public static void main(String[] args) { launch(args); } } Cliquer bouton droit A.Mazoul Programmation orienté objet Java 23 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Installation Scene Builder A.Mazoul Programmation orienté objet Java 24 Interfaces graphiques avec JavaFx JavaFx avec Eclipse Référence https://openjfx.io/openjfx-docs/#IDE-Eclipse A.Mazoul Programmation orienté objet Java 25 A.Mazoul Réseaux informatiques Téléinformatique 26 Interfaces graphiques avec JavaFx 11- FXML & SceneBuilder Module: Programmation Objet Avancée A.Mazoul Département Génie informatique Interfaces graphiques avec JavaFx JavaFx - FXML Programmation des interfaces graphiques en JavaFx Avec JavaFX, les interfaces peuvent être créées de deux manières : Native ou Procédurale: en écrivant du code Java natif (Classes et Interface). Déclarative: en décrivant l'interface dans un fichier au format FXML. Le présent chapitre abordera la création des interfaces (les vues) en utilisant l'outil SceneBuilde. Un fichier FXML est donc un fichier au format XML dont la syntaxe est conçue pour décrire l'interface (la vue). C’est-à-dire le "quoi" mais pas le "comment". A l'exécution, le fichier FXML sera chargé par l'application (classe FXMLLoader). A.Mazoul Programmation orienté objet Java 2 Interfaces graphiques avec JavaFx JavaFx - FXML SceneBuilder SceneBuilder permet de concevoir l'interface de manière interactive en assemblant les conteneurs et les composants et en définissant leurs propriétés. A.Mazoul Programmation orienté objet Java 3 Interfaces graphiques avec JavaFx JavaFx - FXML Chargement du fichier FXML La méthode start() de la classe principale peut charger le fichier FXML en invoquant la méthode statique FXMLLoader.load(url) qui prend en paramètre l'URL de la ressource à charger. La méthode getResource(name) de la classe Class permet de trouver l'URL d'une ressource à partir de son nom. Référence relative au package courant par défaut ("views/Login.fxml") Référence absolue si '/' initial dans le nom ("/resources/log/Error.fxml") A.Mazoul Programmation orienté objet Java 4 Interfaces graphiques avec JavaFx JavaFx - FXML Interprétation des fichiers FXML Lors du chargement du fichier FXML, son contenu est interprété et des objets Java correspondants sont créés. Par exemple, l'élément: sera interprété comme: Quand un attribut commence par le nom d'une classe suivi d'un point et d'un identificateur, par exemple l'attribut sera interprété comme une invocation de méthode statique A.Mazoul Programmation orienté objet Java 5 Interfaces graphiques avec JavaFx JavaFx - FXML Interprétation des fichiers FXML Pour les propriétés qui ne peuvent pas facilement être représentées par une chaîne de caractères, un élément est imbriqué on constate que la propriété Font est codée comme un élément imbriqué dans l'élément Label. Pour les propriétés de type liste , les composants enfants seront listés entre les balises et A.Mazoul Programmation orienté objet Java 6 Interfaces graphiques avec JavaFx JavaFx - FXML Lien entre FXML et le programme Java Le lien entre les composants décrits dans le fichier FXML et le programme est établi par les attributs fx:id : L'attribut fx:id fonctionne en lien avec l'annotation @FXML que l'on peut utiliser dans les contrôleurs, et qui va indiquer au système que le composant avec le nom fx:id pourra être injecté dans l'objet correspondant de la classe contrôleur. La classe qui joue le rôle de contrôleur pour une interface déclarée en FXML doit être annoncée dans l'élément racine, en utilisant l'attribut fx:controller : A.Mazoul Programmation orienté objet Java 7 Interfaces graphiques avec JavaFx JavaFx - FXML Lien entre FXML et le programme Java Pour les composants actifs déclarés dans une interface en FXML, on peut indiquer la méthode du contrôleur qui doit être invoquée en utilisant l'attribut fx:onEvent="#methodName" : Dans la classe contrôleur, ces méthodes devront (comme les composants associés) être annotées avec @FXML: A.Mazoul Programmation orienté objet Java 8 Interfaces graphiques avec JavaFx JavaFx - FXML Lien entre FXML et le programme Java Dans les classes qui agissent comme "contrôleurs", on peut définir une méthode initialize() (qui doit être annotée avec @FXML) pour effectuer certaines initialisations. Cette méthode est automatiquement invoquée après le chargement du fichier FXML. Elle peut être utile pour initialiser certains composants, en faisant par exemple appel au modèle. A.Mazoul Programmation orienté objet Java 9 Interfaces graphiques avec JavaFx JavaFx - FXML Lien entre FXML et le programme Java Dans l'éditeur SceneBuilder, ces différents attributs de liaison avec le programme doivent être indiqués dans les champs prévus. A.Mazoul Programmation orienté objet Java 10 Interfaces graphiques avec JavaFx JavaFx - FXML FXML et Css L'attribut id ne doit pas être confondu avec l'attribut fx:id. L'attribut id définit un sélecteur CSS de type Id qui permet d'associer un style aux composants portant cet Id. Exemple dans un fichier CSS : Dans le fichier FXML, une feuille de style (fichier CSS) peut être associé à un composant avec l'attribut stylesheets="@CSS_File" A.Mazoul Programmation orienté objet Java 11 Interfaces graphiques avec JavaFx JavaFx - FXML FXML Loader Il est possible d'accéder au contrôleur associé au fichier FXML en créant un chargeur (loader) pour ce fichier (plutôt que d'utiliser la méthode statique FXMLLoader.load()). Cela peut être utile pour avoir accès au contrôleur, par exemple pour lui communiquer des arguments: Dans ce cas, il n'est pas nécessaire de déclarer le contrôleur dans le fichier FXML (fx:controller="..."). le contrôleur d'une interface déclarée avec FXML fait appelle à constructeur par défaut du contrôleur. A.Mazoul Programmation orienté objet Java 12 A.Mazoul Réseaux informatiques Téléinformatique 13 Interfaces graphiques avec JavaFx 12- Menus Module: Programmation Objet Avancée A.Mazoul Département Génie informatique Interfaces graphiques avec JavaFx JavaFx - Menus Menus Les menus sont des éléments de l'interface permettant à l'utilisateur de choisir des options qui pourront déclencher des actions et/ou changer l'état de certaines propriétés de l'application. Le principe du menu est (comme au restaurant) que l'utilisateur puisse voir et parcourir la liste des options avant de se décider. Dans les applications, les menus peuvent prendre différentes formes. Les menu déroulants (drop-down menu) Les menu contextuels (popup menu): clic-droit de la souris, l’affichage dépend de l'endroit où l'on a cliqué (contexte). On parle également des sous-menus qui peuvent s'ouvrir en cascade (on peut avoir plusieurs niveaux de sous-menus). Dans la librairie JavaFX, un certain nombre de composants sont dédiés aux menus et sont utilisés pour les construire : MenuBar CheckMenuItem SeparatorMenuItem Menu RadioMenuItem Contextmenu MenuItem CustomMenuItem A.Mazoul Programmation orienté objet Java 2 Interfaces graphiques avec JavaFx JavaFx - Menus Menus Les différents composants qui interviennent dans la gestion des menus déroulants sont illustrés dans l'exemple suivant : A.Mazoul Programmation orienté objet Java 3 Interfaces graphiques avec JavaFx JavaFx - Menus Menus Pour les menus contextuels, ce sont pratiquement les mêmes composants qui sont utilisés à la simple différence que : Le composant MenuBar n'est plus nécessaire. A la place, c'est le composant ContextMenu qui est utilisé pour rassembler les différentes options du menu contextuel. L'affichage du composant sera déclenché par une action de l'utilisateur (en général un clic-droit sur un conteneur ou composant). Un menu contextuel peut également contenir des sousmenus en cascade. A.Mazoul Programmation orienté objet Java 4 Interfaces graphiques avec JavaFx JavaFx - Menus Barre de menu La barre de menus, représentée par le composant MenuBar, est un conteneur permettant de rassembler les en-têtes des menus. Le composant MenuBar doit être placé dans un conteneur de l'interface (par exemple en haut d'un BorderPane). Le composant Menu représente un conteneur d'éléments de menu (options) et peut se présenter "enroulé" (en-tête) ou "déroulé" (fenêtre popup) lorsqu'on clique dessus. Le composant Menu peut être ajouté à une barre de menus (MenuBar) ou être inséré comme sous-menu dans un autre composant de type Menu. A.Mazoul Programmation orienté objet Java 5 Interfaces graphiques avec JavaFx JavaFx - Menus RadioMenuItem Le composant RadioMenuItem qui est une sous-classe de MenuItem peut également être utilisé comme option dans un menu. Il agit comme un bouton radio placé dans un menu déroulant et permet la sélection d'une option parmi plusieurs. Pour avoir ce comportement de sélection mutuellement exclusive, le composant doit être placé dans un ToggleGroup (comme c'est le cas pour le RadioButton). La propriété selected indique si l'option est sélectionnée ou non. RadioMenuItem A.Mazoul Programmation orienté objet Java 6 Interfaces graphiques avec JavaFx JavaFx - Menus Options de menu Le composant CustomMenuItem permet de traiter n'importe quel nœud (Node) d'un graphe de scène comme un élément de menu. Le composant SeparatorMenuItem (sous-classe de CustomMenuItem) permet de un séparateur permettant de séparer les différents groupes d'options par une ligne horizontale. SeparatorMenuItem A.Mazoul Programmation orienté objet Java 7 Interfaces graphiques avec JavaFx JavaFx - Menus Raccourcis clavier Il est souvent souhaitable que certaines actions que l'on peut déclencher avec la souris puissent être également déclenchées à l'aide du clavier (raccourcis clavier) qui peut prendre deux formes principales : Les mnémoniques : Activation du composant en pressant sur une touche spécifique qui dépend de la plateforme (touche Alt sur Windows) associée à un autre caractère (généralement alphanumérique), le caractère associé au mnémonique est généralement souligné. Les accélérateurs: Activation de l'action associée à une option de menu par une combinaison unique de touches du clavier. Accélérateur A.Mazoul Programmation orienté objet Java 8 Interfaces graphiques avec JavaFx JavaFx - Menus Raccourcis clavier: Mnémonique Des mnémoniques peuvent être associés à tous les composants possédant un libellé (sous-classes de Labeled) ainsi qu'aux menus et aux différentes options de menus. Pour ces composants, la propriété booléenne mnemonicParsing indique si le caractère souligné '_' dans le libellé du composant doit être considéré comme l'annonce d'un mnémonique pour le caractère suivant. A.Mazoul Programmation orienté objet Java 9 Interfaces graphiques avec JavaFx JavaFx - Menus MenuButton Le composant MenuButton est un bouton qui affiche un menu popup lorsqu'il est cliqué (à la manière d'un menu contextuel). La propriété popupSide permet de définir de quel côté doit s'ouvrir le menu popup. A.Mazoul Programmation orienté objet Java 10 Interfaces graphiques avec JavaFx JavaFx - Menus SplitMenuButton Le composant SplitMenuButton est une sorte de combinaison du composant Button et du composant MenuButton. La zone du bouton est divisée en 2 parties : un bouton qui peut déclencher une action avec setOnAction(…). Une zone de menu qui fonctionne comme le composant MenuButton. La propriété popupSide permet de définir de quel côté doit s'ouvrir le menu popup. A.Mazoul Programmation orienté objet Java 11 Interfaces graphiques avec JavaFx JavaFx - Menus ChoiceBox Le composant ChoiceBox permet de présenter à l'utilisateur une liste d'éléments dans laquelle il peut en sélectionner un. Le composant se présente au départ sous la forme d'un bouton et, lorsqu'on clique dessus, les éléments sont affichés sous la forme d'une liste déroulante. A.Mazoul Programmation orienté objet Java 12 Interfaces graphiques avec JavaFx JavaFx - Menus ChoiceBox Si l'on souhaite effectuer une action lors d'un changement de sélection, il faut enregistrer un gestionnaire d'événement sur le modèle de sélection. Identique mais avec une expression lambda : A.Mazoul Programmation orienté objet Java 13 Interfaces graphiques avec JavaFx JavaFx - Menus ComboBox Le composant ComboBox est assez similaire au composant ChoiceBox et permet de présenter à l'utilisateur une liste d'éléments (de type T) dans laquelle il pourra en sélectionner un. Une des différences réside dans le fait que ComboBox permet de limiter le nombre de choix affichés et offre automatiquement une barre de défilement pour naviguer dans la liste. Une autre différence est qu'un ComboBox peut être éditable (l'utilisateur peut saisir une valeur qui ne figure pas dans la liste). A.Mazoul Programmation orienté objet Java 14 Interfaces graphiques avec JavaFx JavaFx - Menus ListView Le composant ListView permet d'afficher un ensemble d'éléments (de type T) sous la forme d'une liste scrollable. Les éléments de la liste peuvent être affichés verticalement (par défaut) ou horizontalement. L'utilisateur peut sélectionner les éléments (sélection simple par défaut, mais sélection multiple possible). A.Mazoul Programmation orienté objet Java 15 Interfaces graphiques avec JavaFx JavaFx - Menus Spinner Le composant Spinner permet à l'utilisateur de sélectionner une valeur dans une liste d'éléments ordonnés (de type T). Les valeurs sélectionnables sont définies dans le modèle du composant qui est de type SpinnerValueFactory qui accepte: IntegerSpinnerValueFactory DoubleSpinnerValueFactory ListSpinnerValueFactory Il est possible de rendre la zone de texte éditable. A.Mazoul Programmation orienté objet Java 16 Interfaces graphiques avec JavaFx JavaFx - Menus Spinner IntegerSpinnerValueFactory(int min, int max) IntegerSpinnerValueFactory(int min, int max, int initialValue) IntegerSpinnerValueFactory(int min, int max, int initialValue, int amountToStepBy) A.Mazoul Programmation orienté objet Java 17 A.Mazoul Réseaux informatiques Téléinformatique 18 Interfaces graphiques avec JavaFx 13- Panneaux spécialisés Module: Programmation Objet Avancée A.Mazoul Département Génie informatique Interfaces graphiques avec JavaFx JavaFx - Panneaux spécialisés Panneaux spécialisés Un certain nombre de composants ne font pas partie de la famille des Layout- Panes, mais peuvent jouer un rôle de conteneur. Parmi ces panneaux spécialisés, nous pouvons citer les suivants: ScrollPane SplitPane TabPane Pagination TitledPane Accordion ToolBar A.Mazoul Programmation orienté objet Java 2 Interfaces graphiques avec JavaFx JavaFx - Panneaux spécialisés ScrollPane Le composant ScrollPane permet d'afficher tout ou partie d'un autre composant et en offrant la possibilité d'afficher des barres de défilement pour déplacer la partie visible (scrolling) du composant 'observé'. Il est également possible de permettre à l'utilisateur de se déplacer avec la souris ou autre dispositif de pointage (panning). Pannable : indique si l'utilisateur peut déplacer le contenu de scrollPane avec la souris. A.Mazoul Programmation orienté objet Java 3 Interfaces graphiques avec JavaFx JavaFx - Panneaux spécialisés SplitPane Le composant SplitPane est un panneau divisé horizontalement ou verticalement en sous-panneaux contenant chacun un composant. Les barres de division entre les sous-panneaux peuvent être déplacées par l'utilisateur afin de redimensionner des deux panneaux voisins. indiquer si le sous-panneau garde sa taille actuelle lors du redimensionnement du SplitPane A.Mazoul Programmation orienté objet Java 4 Interfaces graphiques avec JavaFx JavaFx - Panneaux spécialisés TabPane Le composant TabPane est un panneau avec des onglets (tabs) associés à des sous-panneaux contenant chacun un composant. Seul un des onglets est visible à un moment donné, mais l'utilisateur peut basculer entre ces différents sous-panneaux en cliquant sur l'onglet associé. Les onglets peuvent être positionnés sur un des quatre bords du composant (ils sont placés en haut par défaut). Si la taille du composant ne permet pas d'afficher tous les onglets, un bouton (MenuButton) est automatiquement ajouté pour permettre à l'utilisateur d'accéder aux onglets masqués. Par défaut, les onglets peuvent être supprimés par l'utilisateur en cliquant sur une croix affichée à côté de l'onglet actuellement sélectionné (à la manière des onglets des navigateurs web). Dans un TabPane on ne peut ajouter que des objets de type Tab. A.Mazoul Programmation orienté objet Java 5 Interfaces graphiques avec JavaFx JavaFx - Panneaux spécialisés TabPane Le A.Mazoul Programmation orienté objet Java 6 Interfaces graphiques avec JavaFx JavaFx - Panneaux spécialisés Pagination Le composant Pagination permet de présenter des informations ou des éléments d'interaction sous forme de 'pages'. Un liste de boutons permettent à l'utilisateur d'accéder aux pages individuelles. Pour créer les pages, il faut définir la propriété pageFactory qui est de type Callback possédant une unique méthode chargée de créer la page dont l'indice est passé en paramètre pagination.setPageFactory(index->{... return pane; }); A.Mazoul Programmation orienté objet Java 7 Interfaces graphiques avec JavaFx JavaFx - Panneaux spécialisés TitledPane Le composant TitledPane est un panneau avec un titre. Le panneau peut être ouvert ou fermé en cliquant sur le titre qui agit comme un bouton à deux états. Le panneau peut contenir n'importe quel objet de type Node. La propriété collapsible détermine si le panneau peut être fermé. Sinon, il reste toujours ouvert et le composant est un panneau avec un titre. La propriété expanded indique si le panneau est ouvert ou fermé. A.Mazoul Programmation orienté objet Java 8 Interfaces graphiques avec JavaFx JavaFx - Panneaux spécialisés Accordion Le composant Accordion rassemble un groupe de TitledPane dont un seul peut être ouvert à la fois. A.Mazoul Programmation orienté objet Java 9 Interfaces graphiques avec JavaFx JavaFx - Panneaux spécialisés ToolBar Le composant ToolBar permet de rassembler (horizontalement ou verticalement) des éléments d'interaction (c'est une barre d'outils). Dans une barre d'outils on y trouve généralement des boutons, des boutons à deux états, des séparateurs mais on peut y placer n'importe quel composant. Une des caractéristiques du composant ToolBar est que si tous les composants qu'il contient ne peuvent pas être affichés, un bouton-menu apparaît automatiquement pour permettre à l'utilisateur d'accéder aux outils non visibles. La propriété orientation détermine si la barre d'outils est disposée horizontalement ou verticalement. Le composant Separator peut être inséré entre les éléments de la barre d'outils. Son orientation sera automatiquement adaptée en fonction de l'orientation de la barre d'outils. A.Mazoul Programmation orienté objet Java 10 Interfaces graphiques avec JavaFx JavaFx - Panneaux spécialisés TreeView Le TreeView vous permet de créer un structure arborescente, avec un élément racine. Le TreeView fournit une vue des structures hiérarchiques. Dans chaque arbre, l'objet le plus élevé dans la hiérarchie est appelé la « racine ». La racine contient plusieurs éléments enfants, qui peuvent également avoir des enfants. Un élément sans enfants est appelé "feuille". A.Mazoul Programmation orienté objet Java 11 A.Mazoul Réseaux informatiques Téléinformatique 12 Interfaces graphiques avec JavaFx 14- Boîtes de dialogue Module: Programmation Objet Avancée A.Mazoul Département Génie informatique Interfaces graphiques avec JavaFx JavaFx - Boîtes de dialogue Boîtes de dialogue Les boîtes de dialogue sont des éléments d'une interface graphique qui se présentent généralement sous la forme d'une fenêtre affichée par une application dans le but : D'informer l'utilisateur. D'obtenir une information de l'utilisateur une combinaison des deux à confirmer En général, Une boîte de dialogue dépend d'une autre fenêtre. Une boîte de dialogue peut être: Modale: L'utilisateur ne peut pas interagir avec la fenêtre principale. Non-modale: L'utilisateur peut interagir avec la boîte de dialogue mais avec la fenêtre principale. A.Mazoul Programmation orienté objet Java 2 Interfaces graphiques avec JavaFx JavaFx - Boîtes de dialogue Boîtes de dialogue - Information Boîte de dialogue Alert de type "Information" avec en-tête (header). A.Mazoul Programmation orienté objet Java 3 Interfaces graphiques avec JavaFx JavaFx - Boîtes de dialogue Boîtes de dialogue - warning Boîte de dialogue Alert de type "Warning" sans en-tête (header). A.Mazoul Programmation orienté objet Java 4 Interfaces graphiques avec JavaFx JavaFx - Boîtes de dialogue Boîtes de dialogue - error Boîte de dialogue Alert de type "Error". A.Mazoul Programmation orienté objet Java 5 Interfaces graphiques avec JavaFx JavaFx - Boîtes de dialogue Boîtes de dialogue - confirmation Boîte de dialogue Alert de type "Confirmation". A.Mazoul Programmation orienté objet Java 6 Interfaces graphiques avec JavaFx JavaFx - Boîtes de dialogue Boîtes de dialogue –confirmation 2 Boîte de dialogue Alert de type "Confirmation" avec options personnalisées. A.Mazoul Programmation orienté objet Java 7 Interfaces graphiques avec JavaFx JavaFx - Boîtes de dialogue Boîtes de dialogue - TextInputDialog Boîte de dialogue TextInputDialog pour saisir une ligne de texte. Le texte saisi par l'utilisateur peut aussi être récupéré en utilisant la méthode ifPresent(). A.Mazoul Programmation orienté objet Java 8 Interfaces graphiques avec JavaFx JavaFx - Boîtes de dialogue Boîtes de dialogue - ChoiceDialog Boîte de dialogue ChoiceDialog pour saisir un choix (dans une liste). A.Mazoul Programmation orienté objet Java 9 Interfaces graphiques avec JavaFx JavaFx - Boîtes de dialogue Boîte de dialogue personnalisée Il est possible de personnaliser des boîtes de dialogue en utilisant directement la classe Dialog qui est la classe parente de Alert, TextInputDialog et ChoiceDialog. On peut définir ce contenu étendu ainsi : Pour créer une boîte de dialogue non-modale, on peut invoquer la méthode initModality() : L'icône par défaut (placée dans la barre de titre de la fenêtre popup) peut être remplacée par une icône personnalisée : Pour changer l'icône principale qui est placée à gauche du contenu, on peut utiliser la méthode setGraphic(). A.Mazoul Programmation orienté objet Java 10 Interfaces graphiques avec JavaFx JavaFx - Boîtes de dialogue Boîte de dialogue personnalisée Il est possible de personnaliser des boîtes de dialogue en utilisant directement la classe Dialog qui est la classe parente de Alert, TextInputDialog et ChoiceDialog. A.Mazoul Programmation orienté objet Java 11 Interfaces graphiques avec JavaFx JavaFx - Boîtes de dialogue FileChooser L'utilitaire FileChooser permet d'ouvrir une boîte de dialogue permettant à l'utilisateur de naviguer dans l'arborescence des fichiers de la machine cible et de sélectionner un ou plusieurs fichiers. Pour sélectionner un répertoire, il faut utiliser DirectoryChooser. Vous pouvez choisir permis ces trois type : showOpenDialog: Pour sélectionner un seul fichier. showOpenMultipleDialog: Pour sélectionner plusieurs fichiers. showSaveDialog: Pour sauvegarder un fichier. A.Mazoul Programmation orienté objet Java 12 Interfaces graphiques avec JavaFx JavaFx - Boîtes de dialogue FileChooser : showOpenDialog A.Mazoul Programmation orienté objet Java 13 Interfaces graphiques avec JavaFx JavaFx - Boîtes de dialogue FileChooser : showOpenMultipleDialog A.Mazoul Programmation orienté objet Java 14 Interfaces graphiques avec JavaFx JavaFx - Boîtes de dialogue FileChooser : showSaveDialog A.Mazoul Programmation orienté objet Java 15 Interfaces graphiques avec JavaFx JavaFx - Boîtes de dialogue FileChooser : DirectoryChooser A.Mazoul Programmation orienté objet Java 16 Interfaces graphiques avec JavaFx JavaFx - Boîtes de dialogue DatePicker La classe DatePicker représente un composant qui permet à l'utilisateur de sélectionner une date dans un calendrier qui est affiché en fenêtre popup. la date sélectionnée par l'utilisateur peut être consultée avec la méthode getValue() qui retourne un objet de type LocalDate. A.Mazoul Programmation orienté objet Java 17 Interfaces graphiques avec JavaFx JavaFx - Boîtes de dialogue ColorPicker La classe ColorPicker représente un composant qui permet à l'utilisateur de sélectionner une couleur. couleur sélectionnée par l'utilisateur peut être consultée avec la méthode getValue(). Une couleur par défaut peut être passée en paramètre au constructeur de la classe (par défaut Color.BLUE). A.Mazoul Programmation orienté objet Java 18 A.Mazoul Réseaux informatiques Téléinformatique 19