JAVAFX (AQA) Past Paper 2021-2022 PDF
Document Details
Uploaded by AffableFantasy3841
École Supérieure de Technologie – Safi
2021
El Abdellaoui Saïd
Tags
Summary
This document is a set of lecture notes on JavaFX. It covers topics like object-oriented programming in Java, focusing on the Java programming language and the JavaFX graphical user interface, along with the history, features, and structure of JavaFX.
Full Transcript
Université Cadi Ayyad Ecole Supérieure de Technologie Ŕ Safi Cours 1 Cours de la programmation orientée objet (JAVA) Pr. EL ABDELLAOUI SAID [email protected]...
Université Cadi Ayyad Ecole Supérieure de Technologie Ŕ Safi Cours 1 Cours de la programmation orientée objet (JAVA) Pr. EL ABDELLAOUI SAID [email protected] Interfaces graphiques El Abdellaoui Saïd Programmation Orientée Objet : Java 2021 / 2022 PLANIFICATION 2 S1 Interfaces Graphiques JavaFX JAVA JAVA distribué S4 S2 JAVA S3 Avancé SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 PLANIFICATION 3 Former un groupe hétérogène de 5 étudiants : Choix d’un sujet : SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 RAPPEL INTRODUCTION 5 Modes de programmation Procédurale O.O Procédurale : Les notions de variables/types de données et de traitement de ces données étaient séparées : Orienté Objet : Opèrent sur O.O Traitement Données Influencent SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 HISTORIQUE DE JAVA 6 C : 1975-2000 JAVA : 2001-2018 Python : 2019-2021 Evolution de différentes langage de programmation SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 HISTORIQUE DE JAVA 7 The Green Project 1991 Lancement Langage portable = 1995 SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 HISTORIQUE DE JAVA 8 Nom ??? OAK SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 HISTORIQUE DE JAVA 9 SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 HISTORIQUE DE JAVA 10 2010 SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 PRÉSENTATION DE JAVA 11 permettre d'accéder aux Pas de pointeur fichiers à partir de n'importe Simple Pas d’héritage multiple quelle machine sur Internet. Distribué Robuste être modifiées sans avoir concept de Garbage Collector à modifier le programme puissante allocation de mémoire qui les utilise Vérification des exceptions Dynamique Sur systèmes sans virus Multi-thread Portable décomposée en unités d’exécution fonctionnant simultanément s'exécuter dans différentes plateformes. SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 PRÉSENTATION DE JAVA 12 Il est basé sur une architecture logicielle nécessitant une machine virtuelle java (JVM). JAVAC JVM Fichier.java (Compilateur) Fichier.class (machine virtuelle) (Code source) (bytecode) - ------ < =>,)‘& 1001000101 %$#!^]\[ ------ < =>,)‘& %$#!^]\[ ------ < =>,)‘& Architecture du langage JAVA Compilation à la volée SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 PLATEFORME JAVA - OUTILS - 13 ? ? ? ? SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 PLATEFORME JAVA 14 JRE JVM + JDT + API JDK JVM signifie Java Virtual Machine permet de traduire Byte Code en code de la machine hôte (host machine). JRE signifie Java Runtime Environment, il comprend JVM et un certain nombre de bibliothèques Java qui aident à exécuter des programmes écrits en langage Java. API : est l'abréviation Application Programming Interface c'est une large collection de software composants groupés en bibliothèques appelés packages. JDK est l'abréviation de Java Development Kit, il se compose de 2 composants JRE et JDT. JDT est l'abréviation de Java Development Tools fournissent des outils pour le développement d'applications Java, tels que Javac aide à compiler le code source des programmeurs en Byte Code. SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 PLATE-FORMES JAVA 15 Installation : Le JDK peut être téléchargé gratuitement à partir du site de Oracle (www.oracle.com) Exécuter jdk-8u13-windows-i586-p.exe. Le JDK sera installé dans le répertoire c:program files\java et installe également jre1.8 dans le même dossier. Les programmes nécessaire au développement java sont placés dans le répertoire c:\jdk1.5\bin a savoir: javac.exe Compilateur java. java.exe: Interpréteur du bytecode java. appletviewer.exe Pour tester les applets java. Jdb.exe : Débogueur java. Javap.exe désassembleur du bytecode. Javadoc.exe : Générer la documentation de vos programmes java. ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 Introduction 16 Class Guerrier Class Voleur - String nom - Int energie - String nom - Int duree_vie - Int energie - Arme arme - Int duree_vie - Rencontrer (Personnage) -Rencontrer (Personnage) -a -Voler (Personnage) En commun Class Magicien Class Sorcier - String nom - String nom - Int energie - Int energie - Int duree_vie - Int duree_vie - Baguette bag - Baguette bag - Baton baton Il faut s’assurer qu’il existe un -Rencontrer (Personnage) -Rencontrer (Personnage) lien sémantique et un lien physique. SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 Héritage 17 Class Personnage - String nom - Int energie - Int duree_vie +Void rencontrer (personne) Class voleur Class Magicien Class Guerrier Void voler (personne&) - Baguette baguette - Arme arme +Void rencontrer (personne) Class Sorcier - Baton baton Masquage : un identificateur qui en cache un autre -- > pour les variables (« shadowing ») Redéfinition : une méthode déjà définie dans une super-classe a une nouvelle définition dans une sous-classe -- > pour les méthodes (« shadowing ») en utilise le mot @override SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 POLYMORPHISME 18 class Personnage{ class Guerrier extends Personnage{ //... //... public void rencontrer(Personnage p) { public void rencontrer(Personnage p) { System.out.print(" Saluer!"); } } System.out.print("Frapper!"); } } Class Personnage class Rencontre { - String nom public static void main(String [] args) { - Int energie Personnage v =new Personnage(...); - Int duree_vie Guerrier g =new Guerrier(...); Void rencontrer (personnage) g.rencontrer(v); } } Class Guerrier - Arme arme Exécution : Frapper! A JAVA met en œuvre le principe de « résolution dynamique des liens » retenir SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 POLYMORPHISME 19 Personnages :.rencontrer(P).rencontrer(P).rencontrer(P).rencontrer(P).rencontrer(P).rencontrer(P) Exécution : Voler ! Frapper! sourciller! Voler! sourciller! ….! public static void main (String [] args) { Personnage P = new Personnage(...); Personnage [] personnages = new Personnage; personnages = new Voleur(...); personnages = new Guerrier(...); personnages = new Sorcier(...); //… for (Personnage element : personnages) {element.rencontrer (P); } } SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 POLYMORPHISME 20 Résumé Les deux ingrédients : héritage du type dans une hiérarchie de classes, et résolution dynamique des liens Permettent de mettre en œuvre ce que l’on appelle le polymorphisme. Le polymorphisme est peut être vu comme la capacité de choisir dynamiquement la méthode qui correspond au type effectif (de création) de l’objet Le polymorphisme ! Un même code s’exécute de façon différente selon la donnée à laquelle il s’applique. SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 Final & Héritage 21 Pour éviter qu’une classe soit héritable, ou méthode non-redéfinissable, on utilise ‘final’ Classe mère final class A Sous classe class B Une méthode finale ne peut être redéfinie dans les sous classes : Définir le comportement une fois pour toute de tous les objets dérivant de la classe A. Classe mère final [type] fct(){ …} Redéfinission Spécialisation impossible Généralisation Sous classe Un attribut déclarée ‘final’ ne peut être modifié par les sous classes : on fixe une fois pour toute la valeur d’attribut. Classe mère final [type] attribut=val; Réinitialisation Spécialisation impossible Généralisation Sous classe attribut = val; SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 CONCEPTION IMPOSSIBLE (JEU DE RAQUETTE) 22 Idéalement, il nous faudrait mettre en place une hiérarchie de classes telle que celle-ci : class Entite Class Interactif + Void evolue(…) + Void gestionClic (…) class Balle class Raquette class Filet class joueur Class Graphique + Void dessiner(…) Mais ….Java ne permet que l’héritage simple : chaque sous-classe ne peut avoir qu’une seule classe parente directe ! Imposer un contenu commun à des sous-classes en dehors d’une relation d’héritage est le rôle joué par la notion d’interface en Java. SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 ALTERNATIVE POSSIBLE DE JEU VIDÉO 23 Class Entite interface Interactif +void evolue(…) +Void gestionClic (…) class Balle class Raquette class Filet class joueur interface Graphique +Void dessiner(…) Interface ≠ Classe Objectifs d’utilisation des interfaces : Une interface permet de remédier le problème de limitation de l’héritage multiple Une interface permet d’imposer à certaines classes d’avoir un contenu particulier et unifier sans que ce contenu ne fasse partie d’une classe. SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 PLAN 24 Partie I : Introduction Définition du JAVAFX Configuration du JAVAFX Structure d’une application JAVAFX Section I Composantes de base du JAVAFX Programmation évènementielle Nœud graphique en JAVAFX Animation sur JAVAFX Partie II : Méthodes basées sur FXML Logiciel Scene Builder JDBC et JAVFX Partie III : Réalisation d’un jeu SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 Partie I : INTRODUCTION EVOLUTION DU JAVA 26 1995 1996 2007 2011 2014 2020 AWT Swing Annonce JAVAFX JAVAFX 2 JAVAFX 8 JAVAFX 15 A l'origine du Rapidement, la JavaFX 1 a tenté, Une refonte importante Avec la sortie de Devient un langage Java, les librairie Swing sans grand du toolkit a pris en Java 8, une nouvelle module à part interfaces (javax.swing) est succès, de compte les critiques version baptisée entière du JDK graphiques venu compléter remplacer Swing formulées et a conduit à JavaFX 8 a été depuis 2018 étaient créées en (et partiellement une nouvelle mouture: développée utilisant la remplacer) la JavaFX 2 (intégré) librairie AWT librairie AWT (java.awt) SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 DÉFINITION DU JAVAFX 27 JavaFX est un Framework Java permettant de construire des : RIA (Rich Internet Application) des interfaces graphiques Ce Framework est venue pour remplacer AWT/Swing en tant que bibliothèque graphique de Java SE (Standard Edition - la version client de la JVM pour ordinateurs de bureau). JavaFX est également disponible sur les versions récentes de la JVM pour plateformes embarquées telles que le Raspberry Pi. JavaFX est fourni séparément du JDK (le kit de développement Java) et du JRE (l'environnement d’exécution). e(fx)clipse est un plugin pour Eclipse destiné à faciliter le développement et l’intégration de JavaFX et de SceneBuilder dans l'IDE. Il est développé par Tom Schindl. C’est un ensemble des outils et des bibliothèques nécessaires que vous en avez besoin pour installer JavaFX. SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 CONFIGURATION CONFIGURATION DU JAVAFX 29 SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 CONFIGURATION DU JAVAFX 30 SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 CONFIGURATION DU JAVAFX 31 SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 CONFIGURATION DU JAVAFX 32 https://gluonhq.com/products/javafx/ SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 CONFIGURATION DU JAVAFX 33 SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 CONFIGURATION DU JAVAFX 34 SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 CONFIGURATION DU JAVAFX 35 SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 STRUCTURE D’UNE APPLICATION JAVAFX STRUCTURATION DU JAVAFX 37 SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 MODÉLISATION 38 Application AppliJavaFx1 +start(Stage stage) : void{abstract} +main() +launch(String[]) : void {static} Window +setTitle(String) Stage +setWidth(double) +setHeight(double) +show() 1 1 Scene Group (Pane) La modélisation d’un programme en javafx est comme suit : Hériter de la classe javafx,application,application Implémenter la méthode : star(Stage stage) Créer le conteneur (pane) principal : root Créer une scène Scene (scene) ayant comme parent root SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 FENÊTRE & SCÈNE EN JAVAFX STRUCTURATION DU JAVAFX 40 Stage Scene (Group) SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 STRUCTURATION DU JAVAFX 41 Niveau 1 : Stage: Représente la fenêtre principale de l’application, à un instant donné , le composant Stage affiche une scène. public class AppliJavaFx extends Application { public static void main(String[] args) { launch(args);} @Override public void start(Stage primaryStage) throws Exception{ // Définir le Titre de l’application primaryStage.setTitle("Dite bonjour !"); // Afficher primaryStage primaryStage.show(); } } Explication : Méthode launch() est la seule instruction que doit contenir la fonction main() et appellera la méthode start(). Classe Application est une classe qui étend la classe javafx.application.Application et qui surcharge la méthode abstraite start(). Il s'agit du point d’entrée d'un programme en JavaFX. SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 STRUCTURATION DU JAVAFX 42 Niveau 2 : Scene: Permet d’afficher tout ce qui devrait apparaitre dans l’application. L’objet Scene contient des composants graphiques organisés d’une manière hiérarchique public void start(Stage primaryStage) throws Exception{ // Définir le Titre de l’application primaryStage.setTitle("Bonjour !"); // Créer un Group un la troup d’acteurs Group Root=new Group (); // Créer le composant Scene Scene scene=new Scene(Root,600,500, Color.YELLOW); // Attacher la Scene au Stage primaryStage.setScene(scene); // Afficher primaryStage primaryStage.show(); } SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 LES COMPOSANTES DE BASE DU JAVAFX STRUCTURATION DU JAVAFX 44 Stage Scene Composants graphiques SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 STRUCTURATION DU JAVAFX 45 Les composants graphiques sont des objets qui peuvent être de différents types: Des formes graphiques : Cercle, Rectangle, Line,… Des médias: ImageView, MediaView, etc… Des éléments de contrôles utilisateur : Label, TextField, listView… Des graphiques : PieChart, LineChart, BarChart, … Les Layouts pour grouper les éléments : BorderPane, Hbox, Vbox, GridPane, … Node Shape2D Canvas Parent ImageView Shape3D Group Region WebView Chart Pane Control SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 STRUCTURATION DU JAVAFX 46 Affichage du premier bouton : // … /* Créer le BorderPane Root Group pane=new Group(); //Créer le bouton Bonjour: Button btn1=new Button(" Mon bouton "); // Ajouter le composant Button dans le pane pane.getChildren().add(btn1); // Creer la composant Scene et Afficher primaryStage //…. Autres manipulations sur les boutons : Déterminer le style du bouton : btn1.setStyle("-fx-font: 50 arial; -fx-base: #b6e7c9;"); Déterminer la couleur de l’arriere plan du bouton : btn1.setStyle("-fx-background-color: blue"); Déterminer le style d’écriture : btn1.setFont(Font.font("Times New Roman", FontWeight.BOLD, FontPosture.REGULAR, 12)); Determiner la taille du button : btn1.setPrefSize(100, 100); SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 STRUCTURATION DU JAVAFX 47 Affichage des deux boutons : // … /* Créer le Groupe Root Group root = new Group(); //Créer deux boutons : Button button1 = new Button("Mon bouton 1"); root.getChildren().add(button1); Button button2 = new Button("Mon bouton 2"); root.getChildren().add(button2); // Creer la composant Scene et Afficher primaryStage //…. Il est ou l’autre bouton ? ! Comment organiser tout cela ?!! SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 STRUCTURATION DU JAVAFX 48 Les composants graphiques sont des objets qui peuvent être de différents types: Des formes graphiques : Cercle, Rectangle, Line,… Des médias: ImageView, MediaView, etc… Des éléments de contrôles utilisateur : Label, TextField, listView… Des graphiques : PieChart, LineChart, BarChart, … Les Layouts pour grouper les éléments : BorderPane, Hbox, Vbox, GridPane, … Node Shape2D Canvas Parent ImageView Shape3D Group Region WebView Chart Pane Control SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 STRUCTURATION DU JAVAFX 49 Stage Scene BorderPane Top Right Left Centre Bottom Si une certaine zone ne contient pas de sous-composants, la zone sera occupée par d'autres zones. Exemple : BorderPane p= new BorderPane(); p.setTop(b1); b2.setPadding(new Insets(30,30,27,30)); SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 STRUCTURATION DU JAVAFX 50 Vbox est un conteneur qui arrange les sous-composants sur une seule colonne. Label TextField Button Hbox est un conteneur qui arrange les sous-composants sur une seule ligne Label TextField Button GridPane est un conteneur qui divise sa surface en une grille, y compris des lignes et des colonnes. Un composant enfant peut se trouver sur une cellule de grille ou cellule fusionnée Label TextField TextField (0,0) Label CheckBox CheckBox (2,2) Label CheckBox Button SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 STRUCTURATION DU JAVAFX 51 Exemple avec HBox Layout : // … /* Créer le pane Root HBox root = new HBox(); //Créer deux boutons : Button button1 = new Button("Mon bouton 1"); Button button2 = new Button("Mon bouton 2"); root.getChildren().addAll(button1,button2); // Creer la composant Scene et Afficher primaryStage //…. Autres manipulations sur les boutons : Définir la marge entre le contenu et les bords du conteneur hbox root.setPadding(new Insets(80)); Définir l’ espace entre les composantes de hbox: root.setSpacing(40); SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 STRUCTURATION DU JAVAFX 52 Exemple avec VBox Layout avec différentes composantes : public class Main extends Application { @Override public void start(Stage primaryStage) throws Exception { primaryStage.setTitle("Bonjour !"); VBox root = new VBox(); root.setSpacing(10); root.setPadding(new Insets(15,20, 10,10)); // Buttons Button button1= new Button("Button1"); Button button2 = new Button("Button2"); button2.setPrefSize(100, 100); root.getChildren().addAll(button1,button2); // TextField TextField textField = new TextField("Text Field"); textField.setPrefWidth(110); root.getChildren().add(textField); // CheckBox CheckBox checkBox = new CheckBox("Check Box"); root.getChildren().add(checkBox); // RadioButton RadioButton radioButton = new RadioButton("Radio Button"); root.getChildren().add(radioButton); Scene s = new Scene(root, 300, 300); primaryStage.setScene(s); primaryStage.show(); } public static void main(String[] args) { launch(args);} } SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 STRUCTURATION DU JAVAFX 53 Exemple avec VBox Layout avec différentes composantes : public void start(Stage primaryStage) throws Exception { GridPane root = new GridPane(); root.setPadding(new Insets(20)); root.setHgap(25); root.setVgap(15); Label labelTitle = new Label("Enter ur user name & password!"); // Put on cell (0,0), span 2 column, 1 row. root.add(labelTitle, 0, 0, 2, 1); Label labelUserName = new Label("User Name"); TextField fieldUserName = new TextField(); Label labelPassword = new Label("Password"); asswordField fieldPassword = new PasswordField(); Button loginButton = new Button("Login"); GridPane.setHalignment(labelUserName, HPos.RIGHT); // Put on cell (0,1) root.add(labelUserName, 0, 1); x GridPane.setHalignment(labelPassword, HPos.RIGHT); root.add(labelPassword, 0, 2); // Horizontal alignment for User Name field. GridPane.setHalignment(fieldUserName, HPos.LEFT); root.add(fieldUserName, 1, 1); // Horizontal alignment for Password field. GridPane.setHalignment(fieldPassword, HPos.LEFT); root.add(fieldPassword, 1, 2); // Horizontal alignment for Login button. GridPane.setHalignment(loginButton, HPos.RIGHT); root.add(loginButton, 1, 3); y Scene scene = new Scene(root, 300, 300); //……… } SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 PROGRAMMATION ÉVÉNEMENTIELLE AVEC JAVAFX (callback) PROGRAMMATION ÉVÉNEMENTIELLE 55 Un événement : Une petite structure de données(la classe javafx.event.Event) qui contient le moment du déclenchement de l’événement, son type, sa source (souris, clavier,...), sa destination (target), et des données qui en dépendent comme la position (x,y) de la souris au moment d’un clic. La cible (target) d’un événementest l’élément (Node) sur lequel l’événements est produit (un bouton par exemple) C’est JavaFX qui reçoit les événements et les fait passer au composant en focus grâce à un gestionnaire d’événements. Exemples de classes d'événement (sous classes de Event) : clicks boutons : ActionEvent mouvement de la sourie : MouseEvent clavier: 0 Le composant où a eu lieu l'action de l'utilisateur est appelé source de l'événement, Réalisation de la tâche grâce à un handler ( un handler est une instance de javafx.event.EventHandler). SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 PROGRAMMATION ÉVÉNEMENTIELLE 56 Détecter des événements souris sur un nœud onMouseClicked est appelé si un clic de souris a eu lieu alors qu'elle se trouvait sur la surface du nœud ; onMouseDragged est appelé si la souris est cliquée-tirée sur la surface du nœud (et au-delà s'il se poursuit). Il peut servir également à initialiser les événements de drag'n drop ; onMouseEntered est appelé si la souris est entrée sur la surface du nœud ; onMouseExited est appelé si la souris est sortie de la surface du nœud ; onMouseMoved est appelé si la souris est déplacée sur la surface du nœud ; onMousePressed est appelé si un bouton de la souris est enfoncé alors qu'elle se trouvait sur la surface du nœud ; onMouseReleased est appelé si un bouton de la souris est relâché alors qu'elle se trouvait sur la surface du nœud. SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 PROGRAMMATION ÉVÉNEMENTIELLE 57 Action : comment réagir à un clic sur un bouton ( affichage sur le console ) button1.setOnAction(new EventHandler() { @Override public void handle(ActionEvent actionEvent) { System.out.println("Salut le monde !"); } }); button2.setOnAction(actionEvent -> System.out.println("Salut !")); SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 PROGRAMMATION ÉVÉNEMENTIELLE 58 Action : comment réagir à un clic sur un bouton ( affichage sur la scene) Label lab1=new Label(); root.getChildren().add(lab1); // 1ere méthode button1.setOnAction((evt)->{ // Afficher le contenu du Label ‘lblresult’ lab1.setText("Salut les enfants");}); // 2éme méthode button1.setOnAction(new EventHandler(){ // Appel a la méthode handle qui prendre au paramètre un variable de type ActionEvent @Override public void handle(ActionEvent event){ // Afficher le contenu du Label ‘lblresult’ lab1.setText("Bonjour les amis"); } }); SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 PROGRAMMATION ÉVÉNEMENTIELLE 59 Action : comment réagir à un clic sur un bouton ( affichage sur le console ) button1.setOnAction(new EventHandler() { @Override public void handle(ActionEvent actionEvent) { System.out.println("Salut le monde !"); } }); button2.setOnAction(actionEvent -> System.out.println("Salut !")); SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 PROGRAMMATION ÉVÉNEMENTIELLE 60 Action : comment réagir à un clic sur un bouton : Détecter des événements clavier sur un nœud onKeyPressed - ce callback est appelé quand une touche est enfoncée. Il permet de manipuler le code de la touche ; onKeyReleased - ce callback est appelé quand une touche est relâchée. Il permet de manipuler le code de la touche ; onKeyTyped - ce callback est appelé quand une touche a été saisie. Il permet de connaitre le caractère qui a été saisi. SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 NŒUD GRAPHIQUE EN JAVAFX 61 Sene.setOnkeyPressed(new EventHandler(){ @Override public void handle(KeyEvent event){ if (event.getCode()==Keycode.X) System.out.println("Salut X!"); if (event.getCode()==Keycode.SPACE) System.out.println("Salut Space!"); } }); Salut X! Salut Space ! SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 PROGRAMMATION ÉVÉNEMENTIELLE 62 Les composants graphiques sont des objets qui peuvent être de différents types: Des éléments de contrôles utilisateur : Label, TextField, listView… Des formes graphiques : Cercle, Rectangle, Line,… Des médias: ImageView, MediaView, etc… Des graphiques : PieChart, LineChart, BarChart, … Les Layouts pour grouper les éléments pour assurer les mises en page : BorderPane, Hbox, Vbox, GridPane,… SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 NŒUD GRAPHIQUE EN JAVAFX 63 SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 NŒUD GRAPHIQUE EN JAVAFX 64 Action : comment réagir à un clic sur un bouton ( affichage sur la scene) @Override public void start(Stage primaryStage) { Rectangle rectangle = new Rectangle(100, 100, 150, 100); rectangle.setFill(Color.RED); final Pane root = new Pane(); root.getChildren().setAll(rectangle); final Scene scene = new Scene(root, 600, 600); primaryStage.setTitle("Affichage d'un rectangle"); primaryStage.setScene(scene); primaryStage.show(); } Autres manipulations: Mettre le nœud transparent Agrandir ou rétrécir un nœud rectangle.setOpacity(0.5); rectangle.setScaleX(0.5); Faire déplacer un nœud : rectangle.setScaleY(0.5); rectangle.setTranslateX(6); Changer l'apparence du curseur de souris rectangle.setTranslateX(10); sur un nœud, Effectuer une rotation sur un nœud rectangle.setCursor(Cursor.HAND); rectangle.setRotate(45); SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 NŒUD GRAPHIQUE EN JAVAFX 65 Action : comment réagir à un clic sur un bouton ( affichage sur la scene) Sene.setOnkeyPressed(new EventHandler(){ @Override public void handle(KeyEvent event){ if (event.getCode()==Keycode.X) rectangle.setRotate(rectangle.getRotate(10)); } }); Autres manipulations: Mettre le nœud transparent Agrandir ou rétrécir un nœud rectangle.setOpacity(0.5); rectangle.setScaleX(0.5); Faire déplacer un nœud : rectangle.setScaleY(0.5); rectangle.setTranslateX(6); Changer l'apparence du curseur de souris rectangle.setTranslateX(10); sur un nœud, Effectuer une rotation sur un nœud rectangle.setCursor(Cursor.HAND); rectangle.setRotate(45); SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022 ANIMATION