Software">
[Go to site: main page, start]

0% ont trouvé ce document utile (0 vote)
2 vues5 pages

Introduction à JavaFX et IHM

Le document présente JavaFX, un framework pour créer des interfaces graphiques modernes en Java, en détaillant ses composants, son architecture MVC, et ses méthodes de cycle de vie. Il explique également la configuration des scènes avec les classes Stage et Scene, ainsi que l'utilisation de CSS et FXML pour le design. Enfin, il aborde les différences entre JavaFX et d'autres frameworks comme AWT et Swing, soulignant la portabilité et la flexibilité de JavaFX.

Transféré par

hanane aissaoui
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
2 vues5 pages

Introduction à JavaFX et IHM

Le document présente JavaFX, un framework pour créer des interfaces graphiques modernes en Java, en détaillant ses composants, son architecture MVC, et ses méthodes de cycle de vie. Il explique également la configuration des scènes avec les classes Stage et Scene, ainsi que l'utilisation de CSS et FXML pour le design. Enfin, il aborde les différences entre JavaFX et d'autres frameworks comme AWT et Swing, soulignant la portabilité et la flexibilité de JavaFX.

Transféré par

hanane aissaoui
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

IHM ;interface homm_machine *Dessin en Java :ils utilisent le moteur de rendu ce qui permet Le Cadre GUI de Nouvelle Généra

i permet Le Cadre GUI de Nouvelle Généra on Configurer la Scène avec les Classes Stage et Scene : La Classe Applica on et les Méthodes du Cycle de Vie :
Interface: signifie la surface de contact, ou la frontière, entre une personnalisation facile (boutons, champs de texte, labels,etc *Caractéris ques de JavaFX : Stage : Définit un espace, servant de conteneur pour les Sous-classe de Applica on :
deux corps ou deux régions d’espace. *Portabilité :Grâce à cette approche, les applications Java sont  Contrôles Modernes : Offre un ensemble de contrôles GUI scènes. Une applica on JavaFX doit être une sous-classe de la classe Applica on,
IHM signifie : plus portables et se comportent de façon cohérente sur modernes. Scene : Définit le contenu à afficher dans cet espace, qui est contenue dans le package [Link] on.
-Interface Homme – Machine Windows, macOS, Linux, etc.  Graphique de Scène : U lise une architecture basée sur un servant de conteneur pour les éléments de l'interface. Méthodes du Cycle de Vie :
La classe Applica on définit trois méthodes de cycle de vie que vous
-Interactions Homme – Machine *Swing propose des "look and feel" permettant de changer graphique de scène, simplifiant la ges on des fenêtres. Éléments Essen els : pouvez redéfinir:
-Dialogue Homme – Machine l’apparence de l’interface (Windows, Mac, ou styles  Architecture MVC : Adopte une architecture inspirée du modèle Chaque applica on JavaFX doit avoir au minimum un Stage  void init( )
**L’interface homme machine - est un ensemble de dispositifs personnalisés) sans modifier le code. MVC, comme Swing. et une Scene.  abstract void start(Stage primaryStage)
matériels et logiciels permettant de contrôler et de **Les composants légers offrent donc flexibilité, portabilité et  Déploiement Simplifié : Les applica ons JavaFX peuvent être Classe Stage :  void stop( )
communiquer avec une machine. personnalisation visuelle, ce qui permet de concevoir des exécutées dans divers environnements sans nécessiter de Le Stage est un conteneur de niveau supérieur.//Chaque applica on Méthode init( ) :
**L’interaction homme machine - est une action qui provoque interfaces élégantes et homogènes. recodage. JavaFX a accès à un Stage principal, fourni par le système au démarrage. Appelée au début de l'exécu on de l'applica on.
Bien que d'autres stages puissent être créés, le stage principal est U lisée pour effectuer des ini alisa ons diverses.
une réaction perceptible. Elle regroupe des notions telles que les MVC : légèrement différente et plus flexible.  Support CSS et FXML : Permet de styliser et de construire souvent suffisant pour de nombreuses applica ons.
clics souris, la frappe de touches, les pressions sur un écran L’architecture de type MVC (Modèle-Vue-Contrôleur) est une l'interface u lisateur via CSS et FXML. Ne peut pas être u lisée pour créer un stage ou construire
Classe Scene :
tactile, etc. architecture qui sépare le stockage des données, leur *Remplacement de Swing par JavaFX : La Scene est un conteneur pour divers éléments de l'interface
une scène.
**Le dialogue Homme Machine - est l'ensemble des échanges représentation et les interactions possibles avec les données,  JavaFX est conçu comme un remplaçant de Swing, mais ce u lisateur (GUI) tels que des contrôles, du texte et des graphiques. Si aucune ini alisa on n'est nécessaire, ce e méthode n'a
entre un utilisateur et une machine. Ces échanges regroupent les les composants sont associés à différentes interfaces de dernier con nuera d'exister en raison de l'héritage de code et **Pour créer une scène, il faut ajouter des éléments à une instance de pas besoin d'être surchargée(une version par défaut vide est
manipulations avec un écran tactile, l’utilisation d'un modèles de base. des compétences des développeurs. Scene puis définir ce e scène sur un Stage. fournie).
microphone, d'un scanner, d'une table à digitaliser, etc *Le Modèle, chargé de stocker les données, permet à la vue de  Prévision que JavaFX supplantera Swing pour les nouveaux Noeuds et Graphes de Scène: Méthode start( ) :
Les 3 participants dans la conception des interfaces homme- lire son contenu et informe la vue d'éventuelles modifications. projets dans les années à venir. Éléments de la Scène :Les éléments d'une scène sont appelés nodes Appelée après init( ).
(nœuds). C'est ici que l'applica on commence et où vous construisez
machine sont: *La Vue, permet une représentation des données.  Possibilité d'u liser à la fois JavaFX et Swing dans une même Groupes de Noeuds :Les noeuds peuvent également former des
*l'utilisateur: participant avec choix *Le Contrôleur, chargé de gérer les interactions de l'utilisateur applica on, facilitant ainsi la transi on. groupes, perme ant la hiérarchisa on et l'organisa on des éléments.
et définissez la scène.
*la machine: participant avec programme et de propager des modifications vers la vue et le modèle. *Sa riche librairie graphique 2D et 3D lui donne également un Rela on Parent-Enfant : Reçoit une référence à un objet Stage, qui est le stage
*le concepteur: participant qui anticipe les choix possibles de AWT : (Abstract Window Toolkit) intéressant poten el dans des domaines variés : Un noeud parent (ou noeud de branche) peut avoir un ou plusieurs principal fourni par le système d'exécu on.
l'utilisateur et les code dans un programme est le premier framework graphique de Java pour créer des -Représenta ons graphiques noeuds enfants. Ce e méthode est abstraite et doit donc être remplacée par
Les noeuds sans enfants sont appelés noeuds terminaux ou feuilles. votre applica on.
Interfaces graphiques (GUI) : interfaces u lisateur. -Anima ons graphiques Graphique de Scène :
**Les interfaces graphiques utilisent différents éléments visuels * Il offre un support basique pour la programma on GUI, avec -Modélisa on La collec on de tous les noeuds dans une scène cons tue un graphe de
Méthode stop( ) :
appelés Composants graphiques ou Widgets ou Controls et qui, un ensemble limité de composants. -Applica ons mul média scène, qui prend la forme d'un arbre. Appelée lorsque l'applica on est terminée.
en combinaison avec l'utilisation de la souris rendent les choses **Tous les composants d’AWT sont des composants lourds, -Réalité virtuelle et augmentée Noeud Racine : Permet de gérer les tâches de ne oyage ou d'arrêt.
plus simples et plus intuitives pour l'utilisateur. dépendants du système d’exploita on. -Jeux Il existe un type spécial de noeud, le noeud racine, qui est le noeud de Si aucune ac on n'est nécessaire, une version par défaut
niveau supérieur. vide est fournie.
**Parmi ces éléments visuels on peut citer : ** AWT permet de développer des interfaces mul - *Différents composants complexes sont disponibles et perme ent, Le noeud racine n'a pas de parent, tandis que tous les autres noeuds
Boutons (cases à cocher, boutons radio) plateformes(indépendantes de la plate-forme), fonc onnant sur avec un minimum d'effort, de créer des applica ons riches : ont un parent.
Lancement d'une Applica on JavaFX :
Menus (déroulants, contextuels) Windows, macOS ou Linux. **-Effets visuels (ombrages, transi ons, anima ons,.. Tous les noeuds descendent, directement ou indirectement, du noeud Créa on d'Instance :
racine. **Lorsqu'une applica on JavaFX commence son exécu on, une instance
Listes à choix (simples ou déroulantes) ** Il u lise les capacités graphiques na ves du système pour **Graphiques 2D (charts) de la sous-classe de Applica on définie par l'applica on est créée.
Champs de texte (simples, multilignes, éditeurs) afficher les éléments (boutons, fenêtres, etc.). **Navigateur web (WebKit) Classe de Base des Noeuds :
**Les méthodes init( ) et start( ) sont ensuite exécutées dans cet ordre.
La classe de base pour tous les noeuds est Node.
Barres de défilement (ascenseurs) **AWT inclut aussi des classes pour gérer les polices, couleurs **Images, audio, vidéo (media player) Plusieurs autres classes sont des sous-classes de Node, notamment Méthode launch en JavaFX
et images. *La possibilité de découpler le design graphique(grâce à l'ou l Parent, Group, Region, et Control. **Rôle de launch( ) :
Les interfaces graphiques (GUI) utilisant des composants ** Les deux classes principales sont : SceneBuilder et à FXML) permet de déléguer la concep on graphique de définir le style visuel du nœud, par exemple son opacité, *****La méthode launch( ) est u lisée pour démarrer une applica on
JavaFX. Elle prépare l'applica on et gère le cycle de vie de l'applica on
visuels sont souvent désignées par l’acronyme WIMP, qui l'interface à un spécialiste (UIdesigner)qui n'a pas l'obliga on de a acher des ges onnaires d'événements,
signifie :  Component : classe de base pour tout élément
connaître et maîtriser le langage Java et ses librairies (API). Disposi ons (Layouts) en JavaFX :
en appelant les méthodes init( ) et start( ).
**Forme de launch( ) :
*Window : fenêtre, zone d’interaction indépendante ; graphique.(bouton.. Ges on des Éléments :JavaFX propose plusieurs panneaux de
*L'applica on possible de feuilles de style CSS renforce encore ce e La version couramment u lisée est :
*Icon : élément graphique (image, bouton, champ de texte,…  Container : sous-classe de Component qui peut sépara on entre le design graphique et les traitements qui seront
disposi on qui gèrent le placement des éléments dans une scène.
Héritage :Tous les panneaux de disposi on héritent de la classe Node.
*Menu : liste d’actions proposées (barres de menu, menus contenir d'autres composants, comme fenêtre effectués à l'aide de code Java. Emballage :Les panneaux de disposi on sont regroupés dans le package Ici, args est une liste d'arguments (souvent u lisés pour des paramètres
déroulants, contextuels, etc.) ; principale ou un panneau de contrôle Deux techniques complémentaires pour créer les interfaces graphiques [Link].
de ligne de commande).
*Pointer : pointeur contrôlé par la souris pour interagir avec les Un conteneur (container) est un élément graphique capable de JavaFX : Processus de Démarrage : Lorsque vous appelez launch( ) :
éléments (sélection, déplacement, etc.). contenir d'autres composants graphiques (comme des boutons, Manière déclara ve Créa on de l'applica on : Une instance de votre sous-classe de
Ce modèle résume les principaux composants des GUI des zones de texte, des é que es, ou même d'autres  En décrivant l'interface dans un fichier FXML (syntaxe XML) Applica on est créée.
Plate-forme Java :  L'u litaire graphique SceneBuilder facilite la créa on et la ges on des fichiers Appels des méthodes :
conteneurs). FXML D'abord, init( ) est appelée pour les ini alisa ons nécessaires.
*La plate-forme Java fournit un ensemble de librairies de base
Conteneur Rôle  L'interface peut être créée par un designer (sans connaissance Java, ou Ensuite, start( ) est appelée avec un objet Stage (la fenêtre principale de
(Core Libraries) communes à toutes les machines virtuelles Java, presque...) l'applica on), où vous construisez et affichez l'interface u lisateur.
quel que soit le système. Conteneur sans fenêtre propre. Utile pour  Sépara on entre présenta on et logique de l'applica on (MVC) La méthode launch( ) ne retourne pas tant que l'applica on n'est pas
Panel
*Parmi elles, certaines sont dédiées à la création d'interfaces organiser les contrôles. Manière procédurale terminée.
graphiques (GUI), aux graphiques 2D, à l'impression et à des  U lisa on d'API pour construire l'interface avec du code Java U lisa on dans main( ) :
Fenêtre principale sans cadre ni menu.  Créa on et manipula on dynamique des interfaces launch( ) est généralement appelé depuis la méthode main( ) de
fonctions associées (copier-coller, accessibilité, etc.). Window
Peut servir à créer des menus.  Créa on d'extensions et variantes (par héritage) l’applica on :
*Elles permettent de développer des applications interactives Non obligatoire :
 Homogénéité des sources de l'applica on
côté client (desktop). Dialog (hérite de Sert à créer des boîtes de dialogue Bien que main( ) et launch( ) soient courants, il est possible d'écrire des
*Trois principales librairies sont utilisées pour les interfaces Window) simples. Méthodes de déploiement d’une applica on JavaFX : programmes JavaFX sans eux, surtout pour des applica ons simples.
graphiques en Java : AWT, Swing et JavaFX. Cependant, les inclure rend le code plus flexible et compa ble avec
Frame (hérite de Fenêtre complète avec menu et Installée localement: comme une applica on autonome différentes situa ons.
JavaFX :
Window) décorations. (standalone/desktop applica on)(Semblable à une applica on na ve. Résumé
**JavaFX est une collection de classes et d'interfaces qui définit launch( ) démarre l’applica on JavaFX en orchestrant les ini alisa ons et
La machine virtuelle Java peut être intégrée ou non dans
l'interface graphique utilisateur (GUI) moderne pour les Applet (hérite de Ne possède pas de menu ni boîte de le démarrage de l'interface.
l'exécutable(.exe ou .jar)
applications clientes. Panel) dialogue sans une Frame. Il doit être appelé pour que votre applica on fonc onne correctement,
**Elle offre de nombreux contrôles, tels que des boutons, des Installée sur un serveur et intégrée dans une page web généralement à par r de main( ).
L'inser on de composant dans un conteneur se fait grâce à la Lancée depuis un navigateur, en cliquant sur un lien ou sur un autre Toutes les applica ons JavaFX partagent le même squele e de base.
champs de texte, des cases à cocher, des tableaux et des
méthode add(Component) [Link](bouton); élément ac f de la page/Lancée automa quement dès qu'une page est Le squele e illustre comment lancer une applica on JavaFX.
arborescences. Événements en JavaFX :
Swing : chargée
**JavaFX permet d’enrichir l’interface avec des effets visuels, un événement est une ac on déclenchée par l'u lisateur ou
a été introduit en 1997 comme une bibliothèque d’interface /U lise la technique Java Web Start(fichier JNLP + descripteur de JavaFX : Le Graphe de Scène :
des transformations et des animations. le système, comme un clic de souris, une pression sur une
graphique pour Java. déploiement XML)/ Une fois téléchargée, l'applica on peut également Les nœuds peuvent être:Formes géométriques (cercles, lignes, etc)
**Elle simplifie le développement en facilitant la gestion des touche, un changement de focus, etc. JavaFX u lise un
* Ini alement externe à Java, il est devenu par e intégrante du être lancée hors-connexion (mise en cache local) Composants d’interface u lisateur (boutons, menus, etc.)
éléments graphiques et le déploiement de l’application. Conteneurs pour organiser les autres nœuds modèle de ges on des événements qui repose sur trois
langage dès Java 1.2. Les Paquets JavaFX : Plus de 30 paquets sont disponibles dans la
Composants lourds : dépendant du système hôte Organisa on en Graphe de Scène : éléments principaux.
*Swing a résolu les limita ons associées aux composants de
sont liés à la plate-forme locale, car ils sont implémentés en bibliothèque API de JavaFX. Les nœuds sont organisés en une hiérarchie appelée graphe de scène
l'AWT grâce à l'u lisa on de deux fonc onnalités clés : des Une source d'événement (ex. : un bouton) génère un
code natif du système d’exploitation.
composants légers et le pluggable look and feel.
Le framework JavaFX est organisé en paquets qui (scene graph).
événement.
chaque composant lourd est associé à un "peer", c’est-à-dire Ce graphe est en réalité un arbre (structure sans cycles).
*Swing est une extension de AWT qui propose des composants commencent par le préfixe javafx. Chaque nœud a au plus un parent. L’événement est transmis à un ges onnaire qui exécute une
une version native du composant dans le système hôte. *[Link] on : Con ent des classes pour gérer le cycle de vie des ac on spécifique.
plus riches, flexibles et modernes. Structure du Graphe de Scène :
Ce peer est la version native du composant, adaptée à applica ons JavaFX. Le ges onnaire d’événements traite l’événement et libère la
Swing ne dépend pas du système graphique na f de la L’arbre reflète l’organisa on des nœuds à l’écran.
l'apparence et au comportement de l'interface utilisateur de *[Link] : Gère les fenêtres et les dialogues de l'applica on. Un nœud enfant est affiché imbriqué dans son nœud parent. main.
plateforme. Les composants Swing sont dessinés par le moteur
cette plateforme *[Link] : Représente la scène graphique, qui con ent les éléments Exemple : Un VBox contenant des Bu on affiche ces boutons Pour recevoir l'événement, le ges onnaire doit être d’abord lié à la
graphique Java, ce qui leur permet d'être plus personnalisables
Composants légers : rend indépendants du système visibles de l'interface. ver calement. source. Une fois l’événement déclenché, le ges onnaire est ac vé pour
et cohérents sur toutes les plateformes.
*Indépendance des Peers :ils sont dessinés et gérés *[Link] : Fournit des classes pour organiser et gérer la mise Représenta on Graphique :Un schéma peut illustrer : traiter cet événement
*Swing présente des limita ons face aux exigences modernes La rela on parent-enfant entre les nœuds.
entièrement par Java. Cela signifie que leur apparence et leur en page des composants.
en ma ère d'effets visuels et d'interac ons u lisateur. L'imbrica on visuelle sur l’interface u lisateur.
comportement sont uniformes
Avantages du système d'événements en JavaFX : Présenta on des contrôles UI JavaFX : package model;
Flexibilité : Un même ges onnaire peut être lié à plusieurs Construc on des contrôles avec des nœuds : Compila on et exécu on sous Windows (exemple) import [Link];
Compila on javac --module-path "C:\javafx-sdk-23.0.1\lib" import [Link].*;
éléments UI. Les contrôles JavaFX UI sont créés en u lisant des nœuds dans import java.u [Link];
Modularité : Sépara on entre l’interface graphique et la ges on le graphe de scène (scene graph). – import java.u [Link];
des événements. Intégra on avec les applica ons Java : public class productDAO {
Réu lisa on : Un ges onnaire peut être réu lisé dans plusieurs Les API JavaFX sont en èrement implémentées en Java. getClass().getResource("[Link]") : recherche le fichier [Link] dans le -add-modules [Link] [Link] private sta c final String URL =
par es de l’applica on. Cela facilite l'intégra on des contrôles JavaFX UI dans des même package que la classe courante. --module-path : chemin vers le dossier lib du SDK JavaFX. "jdbc:mysql://localhost:3308/product_db";
--add-modules [Link] : ajoute le module contrôles private sta c final String USER = "root"; // Remplaces par votre
Étapes du Processus : applica ons Java existantes. .toExternalForm() : conver t l'URL du fichier en une chaîne de caractères u lisateur
Créa on d'un Contrôle Source : Par exemple créa on d’un u lisable par JavaFX. (boutons, labels, etc.). private sta c final String PASSWORD = ""; // Bemplaces par votre mot
bouton (source de l’événement). Exécu on java --module-path "C:\javafx-sdk-23.0.1\lib" – de passe
Créa on d'un Ges onnaire d'Événements : Nous définissons un private Connec on connec on;
ges onnaire d'événements qui spécifie l'ac on à effectuer add-modules [Link] JavaFXSkeleton
Charge le module [Link] et lance l’applica on. // Constructeur pour etablir la connexion a la base de donnees
lorsqu'un clic sur le bouton est détecté (ce qui doit se passer public productDAO() {
après un clic). try {
Enregistrement du Ges onnaire avec le Bouton : Associer le ààCe e méthode est u le pour des modifica ons ponctuelles, mais un connec on = [Link] on(URL, USER,
ges onnaire au bouton. fichier CSS est préférable pour une meilleure organisa on. PASSWORD);
Réponse à l’Événement : Quand l’u lisateur clique sur le MVC : } catch (SQLExcep on e) {
[Link]();
bouton, le ges onnaire d'événements est appelé et exécute Interface non graphique:Ex: Ligne de commande, tableau de }
l'ac on définie (affichage d’un message, changement de commandes et indicateurs, … }
couleur, etc.). Interface graphique (GUI):Ex: Applica on standard Windows, page web,
La Classe Event en JavaFX … // Methode pour recuperer tous les produits
La vue(View)est chargée de la représenta on visuelle des public List<product> getAllProducts() {
Classe de Base : La classe de base des événements JavaFX est Model -View-Controller : Dans ce e architecture on divise le code des informa ons en faisant appel à des écrans, des fenêtres, List<product> products = new ArrayList<>();
Event, située dans le package [Link]. Elle hérite des applica ons en en tés dis nctes (modèles, vues et contrôleurs) qui des composants, des conteneurs (layout), des boîtes de try {
caractéris ques des événements Java standards. communiquent entre elles au moyen de divers mécanismes (invoca on dialogue, etc. String query = "SELECT * FROM product"; // Requete SQL pour
Encapsula on : Quand un événement se produit, JavaFX le met Contrôle de Bouton en JavaFX : de méthodes, généra on et récep on d'événements, liaisons entre *Plusieurs vues différentes peuvent être basées sur le recuperer tous les produits
dans un objet Event qui con ent les informa ons En JavaFX, les boutons sont des contrôles courants qui génèrent propriétés,…). Statement stmt = connec [Link]();
même modèle ResultSet rs = [Link](query);
nécessaires(comme la source et le type de l’événement). des événements lorsqu'on clique dessus, ce qui déclenche un a été (plusieurs représenta ons possibles d'un même jeu de while ([Link]()) {
Méthodes U les : La classe Event propose des méthodes pour Ac onEvent. introduite avec le langage Smalltalk-80 dans le but de simplifier le données). // Creer un objet Product pour chaque ligne de resultat
obtenir des détails sur l'événement, comme sa source et son Classe Bu on : Elle permet de créer des boutons avec du texte, développement ainsi que la maintenance des applica ons, en *La vue intercepte certaines ac ons de l'u lisateur et les [Link](new product([Link]("id"),
type. des graphiques, ou les deux. Le constructeur peut être simple répar ssant et en découplant les ac vités dans différents sous-systèmes transmet au [Link]("name"), [Link]("price")));
Sous-classes : Il existe plusieurs sous-classes de Event, chacune (sans texte) ou afficher un texte donné. (plus ou moins) indépendants. contrôleur pour qu'il les traite (souris, clavier, gestes, …).
pour un type d'événement spécifique. Par exemple, Constructeurs de Bu on : }
*La mise à jour de la vue peut être déclenchée par un } catch (SQLExcep on e) {
 Ac onEvent : Pour les événements d’ac on (clics de Constructeur par défaut : crée un bouton sans texte ni image. Le ou les modèles(Models)qui se chargent de la ges on des données (accès,
boutons). transforma ons, calculs, etc.). Le modèle enregistre (directement ou indirectement)
contrôleur ou par un [Link]();
Constructeur avec texte : Bu on(String str) – Affiche le texte str événement signalant un changement intervenu dans les }
 MouseEvent : Pour les ac ons liées à la souris. l'état du système et le ent à jour.
 KeyEvent : Pour les ac ons liées au clavier.
sur le bouton. Les vues(Views)qui comprennent tout ce qui touche à l'interface données du modèle par exemple (mode asynchrone). return products;
setOnKeyPressed() capture la touche enfoncée et affiche Constructeur avec image : permet d’ajouter une image au btn. u lisateur (composants, fenêtres, boîtes de dialogue) et qui a pour }
*La représenta on visuelle des informa ons affichées peut
son code dans la console. Ges on des Événements : Lorsqu'on clique sur le bouton, un tâche de présenter les informa ons (visualisa on). Les vues dépendre du // Methode pour ajouter un produit dans la base de donnees
Interface EventHandler en JavaFX Ac onEvent est créé. Pour traiter cet événement, on u lise la par cipent aussi à la détec on de certaines ac ons de l'u lisateur
(clic sur un bouton, déplacement d'un curseur, geste swipe, saisie
Look-and-Feelad opté (ou imposé) et peut varier d'une public void addProduct(product product) {
un EventHandler est une interface qui sert à gérer des méthode setOnAc on() pour enregistrer un ges onnaire (ou try {
d'un texte, …). plateforme à l'autre. L'u lisateur peut parfois modifier lui
événements (comme un clic sur un bouton). Quand un handler) qui définira l’ac on à exécuter. String query = "INSERT INTO product (name, price) VALUES (?, ?)
Les contrôleurs(Controllers)qui sont chargés de réagir aux ac ons même le thème de présenta on des informa ons.
événement se produit, JavaFX u lise le EventHandler pour dire Contrôle de CheckBox en JavaFX : de l'u lisateur (clavier, souris, gestes) et à d'autres événements
"; // Requete d'inser on
au programme quoi faire. La CheckBox encapsule la fonc onnalité d'une case à cocher. internes (ac vités en tâches de fond, mer) ou externes (réseau, PreparedStatement pstmt =
Le contrôleur(Controller)est chargé de réagir aux connec [Link](query);
Comment fonc onne l’interface EventHandler ? Héritage : Sa superclasse immédiate est Bu onBase, ce qui en serveur).
différentes ac ons de l'u lisateur ou à d'autres [Link](1, [Link]());
EventHandler est une interface du package [Link]. fait un type de bouton. [Link](2, [Link]());
Les données et leurs traitements:
événements qui peuvent survenir.
L’interface EventHandler demande juste une méthode principale, États de la CheckBox : [Link](); // Execute la requete
Le Modèle *Le contrôleur définit le comportement de l'applica on et
appelée void handle(T event). Checked (coché) } catch (SQLExcep on e) {
La représenta on des données sa logique [Link]();
La méthode handle(T eventObj) est celle que JavaFX appelle Unchecked (décoché) La Vue (comment elle réagit aux sollicita ons, business logic).
automa quement quand un événement (comme un clic) se Indeterminate (indéterminé) : Indique que l'état d'une op on Le comportement de l’applica on *Dans les applica ons simples, le contrôleur gère la }
produit. n'est pas défini ou n'est pas per nent. Cet état nécessite une Le Contrôleur
}
synchronisa on
Comment créer un EventHandler pour gérer les événements ? ac va on explicite. Modèle : est responsable de la ges on des données qui caractérisent }
entre la vue et le modèle (rôle de chef d'orchestre).
Il y a plusieurs façons d’implémenter un EventHandler : Constructeurs de CheckBox : l'état du système et son évolu on
*Le contrôleur est informé des événements qui doivent être package controller;
Classe Anonyme : On peut créer le EventHandler directement Constructeur par défaut *Dans certaines situa ons (simples) le modèle peut contenir
traités
dans le code, sans faire de classe séparée. Cela rend le code plus Constructeur avec texte :CheckBox(String str) : Crée une case à lui-même les données mais, la plupart du temps, il agit comme un
et sait d'où ils proviennent. import [Link];
court mais peut être moins clair. cocher avec le texte spécifié par str comme é que e. intermédiaire (proxy)et gère l'accès aux données qui sont stockées dans import model. product;
*La plupart des ac ons étant interceptées (ou en lien) avec
Ges on des Événements : une base de données, un serveur d'informa ons, le cloud, … import javafx. collec ons. FXCollec ons;
la vue, il
*Les CheckBoxes génèrent un événement d'ac on lorsqu'elles *Le modèle est souvent défini par une ou plusieurs interfaces Java qui import [Link] [Link];
existe un couplage assez fort entre la vue et le contrôleur. import javafx. fxml. FXML;
sont cliquées. perme ent de s'abstraire de la façon dont les données (les objets
*Le contrôleur communique généralement avec le modèle import [Link] .*;
*Pour définir le ges onnaire d'événements, il faut u liser la mé er) sont réellement stockées (no on de DAOData Access Object).
et avec la
méthode setOnAc on(). *Il offre également les méthodes et fonc ons perme ant de gérer, // Classe pour gerer les interac ons u lisateur
vue. C'est le sens des transferts et le mode de
Obtenir l'État de la CheckBox : transformer et manipuler ces données. public class productController {
communica on qui
isSelected() permet de vérifier si la case est cochée. :final *Les informa ons gérées par le modèle doivent être indépendantes de
caractérisent différentes variantes de l'architecture MVC. @FXML
Expression Lambda : En Java, une expression lambda est une boolean isSelected(): Retourne true si la case est sélec onnée, la manière dont elles seront affichées. Le modèle doit pouvoir exister
Avantages de MVC private TableView<product> productTable; // TableView pour afficher
façon rapide de créer des méthodes. Elle rend le code très concis, sinon false. indépendamment de la représenta on visuelle des données
Le modèle:
Structure ‘propre’ de l’applica on les produits
surtout pour de petits EventHandler. Il est possible d'ignorer les événements et d'obtenir simplement Indépendance ‘données’ – ‘représenta on’ – @FXML
Représente les données/Fournit les accès aux données/Fournit les traitements
l'état si nécessaire. applicables aux données/Expose les fonc onnalités de l’appl ‘comportements’ : private TableColumn<product, String> nameColumn; // Colonne du
Chaque clic sur une CheckBox génère un événement d'ac on. Noyau Fonc onnel de l’applica on nom
Adapté aux concepts de la programma on 0-0 @FXML
*Les ges onnaires d'événements affichent le nouvel état de la La vue: Modulaire et réu lisable :Vues private TableColumn<product, Double> priceColumn; // Colonne du
lorsque l'on utilise des expressions lambda, on simplifie le code CheckBox (sélec onné ou effacé) et présentent également une Représente la (ou une) représenta on des données du modèle/Assure la consistance
entre la représenta on qu’elle donne et l’état du modèle/le contexte de l’applica on
interchangeables/Contrôleurs prix
en écrivant directement le comportement voulu sans créer une liste de toutes les op ons sélec onnées. @FXML
Sor es de l’applica on interchangeables/Changement de ‘Look & Feel’
classe EventHandler séparée et sans implémenter Nouvelles Fonc onnalités de Mise en Page : private TextField nameField; // Champ texte pour le nom
Le contrôleur: Facilite les vues et contrôleurs mul ples
explicitement la méthode handle(). *U lisa on de l'alignement ver cal pour améliorer l'apparence. Représente le comportement de l’applica on face aux ac ons
@FXML
Synchronisa on ‘quasi-implicite private TextField priceField; // Champ texte pour le prix
Classe Séparée : Si le gestionnaire d’événements est complexe, *Applica on de padding pour espacer les éléments de manière de l’u lisateur/Fournit la traduc on des ac ons de l’u lisateur en ac ons sur
@FXML
on peut le définir dans une classe séparée. C’est pratique si le esthé que. le modèle/Fournit la vue appropriée par rapport aux ac ons de
l’u lisateur et des réac ons du modèle
Inconvénients de MVC private Bu on addBu on; // Bouton pour ajouter un produit
même code doit gérer plusieurs événements provenant de CSS (Cascading Style Sheets) permet de styliser les éléments
Comportement et ges on des entrées de l’applica on Mise en place complexe dans le cas d’applica ons
différentes sources (comme plusieurs boutons). d'interface u lisateur (UI) avantages : private productDAO productDAO; // Objet DAO pour acceder aux
importantes
Sépara on claire entre la logique et la présenta on: Permet de séparer le donnees
code mé er et l'apparence visuelle.
Mises à jour poten ellement trop nombreuses private ObservableList<product> productList; // Liste observable --
Réu lisa on des styles : Un fichier CSS peut être appliqué à plusieurs Temps d’exécu on pour la TableView
[Link]é : Les styles peuvent être modifiés sans toucher au code Contrôleur et Vue restent souvent fortement liés au
Java. Modifica on centralisée : Un changement dans le fichier CSS affecte Modèle
toute l'applica on. Adapter la réalisa on au problème
// Méthode appelée automa quement a l'ini alisa on la méthode compareTo(String, File ou les classes enveloppes) Les vecteurs dynamiques- classe ArrayList public sta c void trierParAge(LinkedList<Personne> liste) { 1. Classe Object
@FXML fournit un résultat qui conduit à un ordre qu’on peut qualifier de Collec [Link](liste,
public void ini alize() {
Méthode Description
[Link](Personne::getAge)); Méthode Description
productDAO = new productDAO(); // Ini aliser le DAO
naturel: add(E e) }
Ajoute un élément à la fin de la liste Retourne une chaîne représentant
productList = Ordre lexicographique pour les chaînes, le noms de fichier ou la public sta c Personne rechercherParNom(LinkedList<Personne> liste, toString() l'objet (par défaut :
FXCollec [Link]([Link]()); //Charger classe Character, Insère un élément à la position spécifiée+ le nouvel String nom) {
data add(int index, E for (Personne p : liste) {
nomClasse@adresse)
Ordre numérique pour les classes enveloppes numériques. element) élément prend la place du nième, ce dernier et tous ses
// Configurer les colonnes de la TableView suivants étant décalés d’une position. if ([Link]().equalsIgnoreCase(nom)) { Compare les adresses par défaut,
[Link](data -> new return p; boolean
mais peut être redéfinie pour
[Link]([Link]().getName())); } equals(Object)
La leur méthode equals :héritée de la classe Object. remove(int index) Supprime l'élément à l'index donné comparer les contenus
[Link](data -> new }
[Link]<>([Link]().getPrice())); remove(Object o) Supprime la première occurrence de l’objet donné
return null; 2. Classes et méthodes final
}
// Charger les produits dans la TableView import java.u l.*;
Élément Effet
clear() Supprime tous les éléments de la liste
[Link](productList); public class TP3 { final Empêche de modifier la valeur de la
get(int index) Retourne l'élément à l'index spécifié public sta c void main(String[] args) { variable variable après affectation
// Ajouter une ac on au bouton [Link]("1er exercice:");
set(int index, E final Empêche la redéfinition (override) dans une
addBu [Link] on(event -> addProduct()); Remplace l'élément à l'index spécifié //EX1
element)
Les itérateurs :parcourir » un par un les différents éléments Scanner sc=new Scanner([Link]); méthode classe dérivée
} d’une collec on. contains(Object o) Vérifie si l’élément est présent dans la liste ArrayList<String> Pays=new ArrayList<String>();
//2
final
Monodirec onnels: le parcours de la collec on se fait d’un Empêche toute dérivation (héritage)
// Methode pour ajouter un produit indexOf(Object o) Donne l’indice de la première occurrence de l’élément [Link]("donner cinq noms de pays"); classe
private void addProduct() { début vers une fin Iterator<E>. for(int i=0;i<5;i++) 3. Classes abstraites
String name = [Link](); isEmpty() Retourne true si la liste est vide {String nom=[Link]();
String priceText = [Link](); [Link](nom); } Élément Description
Méthode Description size() Retourne le nombre d'éléments dans la liste [Link]("la liste des pays"+Pays);
Classe Ne peut pas être instanciée, sert de base pour
if ([Link]() || [Link]()) { boolean Retourne true s'il reste un élément à [Link]("le premier element="+[Link](0)+" et le
[Link]("Nom ou prix manquant."); dernier element="+[Link]([Link]()-1));
abstraite d'autres classes
hasNext() parcourir. removeRange(i,j) Supprime les elts de i à j de la liste
return; //3 Méthode Déclare une méthode sans corps → doit être
} Retourne l’élément suivant et avance [Link](1,"Maroc"); abstraite redéfinie dans une classe fille
E next()
l’itérateur. [Link](2);
try { [Link]("la liste des pays"+Pays); Forcer les classes filles à implémenter
double price = [Link](priceText); Supprime l’élément courant (celui //4
But
void remove() Les ensembles : certaines fonctionnalités
product newProduct = new product(name, price); retourné par next()), facultative. Collec [Link](Pays);//pour ordre dec
[Link](newProduct); Méthode Description Collec [Link]([Link] [Link]()); ou 4. Interfaces
[Link](newProduct); Ajoute un élément si absent (sinon Collec [Link](Pays)); Élément Description
add(E e)
[Link](); ignoré) if([Link]("Maroc"))
[Link](); { Regroupe des en-têtes de méthodes
addAll(Collection<? extends Ajoute tous les éléments d’une autre
} catch (NumberFormatExcep on e) { [Link]("Maroc existe"); Interface (sans implémentation) et des
E>) collection
[Link]("Prix invalide !"); } constantes static final int n=0 ;
} Supprime l'élément spécifié (s’il est else
remove(Object o) Mot-clé utilisé par une classe pour
} présent) {
} Bidirec onnels: le parcours peut se faire dans les deux sens [Link]("Maroc n existe pas"); implements implémenter une ou plusieurs
Supprime tous les éléments présents dans
<?xml version="1.0" encoding="UTF-8"?> removeAll(Collection<?>) } interfaces
Méthode Description une autre collection
[Link]("la liste des pays"+Pays);
<?import [Link] on?> boolean Ne garde que les éléments présents aussi [Link]("2eme exercice:");
Différences vs Pas d’implémentation, mais multiple
Y a-t-il un élément précédent ? retainAll(Collection<?>)
<?import [Link]?> hasPrevious() dans l’autre collection classe abstraite implémentation possible
<?import [Link]?> clear() Supprime tous les éléments de l’ensemble [Link]();
E previous() Retourne l'élément précédent.
<?import [Link]?> //EX2: 5. Énuméra ons (enum)
Vérifie si l’élément est présent dans
<?import [Link]?> int nextIndex() Index du prochain élément. contains(Object o) //1
l’ensemble Élément Description
HashSet<Integer> ens=new HashSet<Integer>();
int Vérifie si tous les éléments d’une autre [Link](10);
previousIndex() Index du précédent élément. containsAll(Collection<?>) Définit un type énuméré avec des valeurs
<AnchorPane fx:controller="[Link]" maxHeight="- collection sont présents [Link](20); enum
fixes
Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" isEmpty() Retourne true si l’ensemble est vide [Link](30);
Ajoute un élément à la position
prefHeight="400.0" prefWidth="600.0" [Link](40); Par ==, equals(), compareTo(),
xmlns="h p://[Link]/javafx/23.0.1"
void add(E e) actuelle+Si l’itérateur est en size() Retourne le nombre d’éléments [Link](10); Comparaison
ordinal()
xmlns:fx="h p://[Link]/fxml/1"> finl’ajout se fait en fin Retourne un Iterator pour parcourir [Link](20);
<children> iterator() Peut être utilisé dans un switch, converti
void set(E e) Remplace le dernier élément les éléments
<TableView fx:id="productTable" layoutX="14.0" layoutY="14.0" //2 en chaîne avec toString()fournir une
if(condition) retourné par next() ou toArray() Convertit l’ensemble en tableau d’objets Utilisation
prefHeight="200.0" prefWidth="400.0"> [Link]("l ensemble="+ens);
[Link](5) previous().modifier l’elt courant chaîne correspondant simplement au libellé
<columns> Compare deux ensembles (contenu [Link]("sa taille="+[Link]());
<TableColumn fx:id="nameColumn" prefWidth="75.0" text="Name"
equals(Object o)
uniquement) de la constante.
+ les 3 fct de Iterator car ListIterator<E>(dérivée de Iterator<E>).
/> //3 enum Jour { LUNDI, MARDI, ...}
Retourne le code de hachage de
<TableColumn fx:id="priceColumn" prefWidth="75.0" text="Price" hashCode() if([Link](10))
l’ensemble (important pour les Map) Exemple courant = mercredi;
/> {
[Link]() vaut 2
</columns> [Link]("30 existe");
</TableView> }
Autorise Ordre conservé Accès par
<TextField fx:id="nameField" layoutX="14.0" layoutY="227.0" Collection Type else 6. Annota ons
promptText="Product Name" /> doublons ? ? index ? {
<TextField fx:id="priceField" layoutX="200.0" layoutY="227.0" [Link]("30 n existe pas"); Annotation Description
ArrayList Oui (ordre
promptText="Price" /> Oui Oui } Signale que la méthode redéfinit une
<Bu on fx:id="addBu on" layoutX="370.0" layoutY="262.0"
d’ajout) [Link](20); @Override
méthode d'une superclasse
mnemonicParsing="false" text="ADD Product" /> *On notera bien qu’ici, quelle que soit la posi on courante, Oui (ordre [Link]("l ensemble apres la supression de 20="+ens);
</children> LinkedList Oui Oui Indique qu’un élément est obsolète
l’ajout par add est toujours possible. d’ajout) @Deprecated
</AnchorPane> [Link]("3eme exercice:"); et ne doit plus être utilisé
*De plus, contrairement à remove, cet ajout ne nécessite pas //EX3
HashSet Non Non Non
que l’élément courant soit défini. //1 Annotations Possibilité de créer ses propres
import javafx. applica [Link] on; *Par ailleurs, add déplace la posi on courant après l’élément Oui (ordre TreeSet<String> animals=new TreeSet<String>(); personnalisées annotations
LinkedHashSet Non Non
import javafx. fxml. FXMLLoader; qu’on vient d’ajouter. d’ajout) [Link]("dog");
import javafx. scene. Parent; Les listes chaînées-classe LinkedList(doublement chaînées) [Link]("lion");
import javafx. scene. Scene; TreeSet Oui (ordre [Link]("cat");
Méthode Description Non Non
import [Link]; trié) [Link]("elephant");
add(E e) Ajoute un élément à la fin du list
//2
public class Main extends Applica on { remove()+bool Supprime et retourne le premier [Link]("l arbre="+animals);
remove(elt) élément
@Override removeFirst()
@Override //3
Supprime le premier élément
public void start(Stage primaryStage) throws Excep on { public boolean equals(Object obj) { [Link]("Le premier animal = " + animals.first() + " et le
removeLast() Supprime le dernier élément
// Charge le fichier FXML et configure la scene if (this == obj) return true; dernier animal = " + [Link]());
Parent root = clear() Supprime tous les éléments if (!(obj instanceof Document)) return false; [Link]("l ensemble jusqu a
[Link](getClass().getResource("/view/[Link]")); dog="+[Link]("dog"));
contains(Objecto) Vérifie si l’élément est présent Document document = (Document) obj;
[Link]("Product Manager"); // Titre de la fenêtre for(String ch:animals)
[Link](new Scene(root)); Retourne la position de la première return [Link]( tre, document. tre); {
indexOf(Object o)
[Link](); occurrence } if ([Link]("dog")) {[Link]("."); break;}
} public sta c void main(String[] args) { launch(args); }} [Link](ch+",");
}}}

Vous aimerez peut-être aussi