Cours IHM-1 JavaFX 7 - FXML SceneBuilder Jacques BAPST



Documents pareils
ECLIPSE ET PDT (Php development tools)

Java 7 Les fondamentaux du langage Java

Langage HTML (2 partie) <HyperText Markup Language> <tv>lt La Salle Avignon BTS IRIS</tv>

TP SIN Programmation sur androïde Support : eclipse

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

Générer du code à partir d une description de haut niveau

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Freeway 7. Nouvelles fonctionnalités

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Webmaster / Webdesigner / Wordpress

MEDIAplus elearning. version 6.6

TP 5 Les CMS, la forme et le fond Internet et Outils (IO2)

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

1. Considérations sur le développement rapide d'application et les méthodes agiles

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation

GOL-502 Industrie de services. Travaux Pratique / Devoir #7

Sql Server 2005 Reporting Services

Formation HTML / CSS. ar dionoea

Formation : WEbMaster

Formation Webmaster : Création de site Web Initiation + Approfondissement

Compte Rendu d intégration d application

1. Installation d'un serveur d'application JBoss:

Outils, langage et approche Android Une introduction. Nicolas Stouls lyon.fr

Développement d'applications Web HTML5 L'art et la manière avec Visual Studio 2015 et TFS

Programmer en JAVA. par Tama

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

4. SERVICES WEB REST 46

.. CSS. Damien Nouvel. Damien Nouvel (Inalco) CSS 1 / 15

Silfid : Agence de création de site internet, formations et Conseils Retour sommaire

Tutoriel : Feuille de style externe

Introduction aux services Active Directory

CRÉER, ROUTER ET GÉRER UNE NEWSLETTER, UN ING

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB Olivier Augereau Formation UML

Chapitre 2. Classes et objets

Guide utilisateur Archivage intermédiaire Messagerie. Enterprise Connect pour Outlook 2010 EC V 1.0

Déployer les Fonts, Icones, et Images avec Forms Services 11G

ACTIVITÉ DE PROGRAMMATION

Ingénierie Dirigée par les Modèles. Editeurs de modèles. (Eclipse Modeling Tools) Jean-Philippe Babau

Maîtriser le menu contextuel dans un OfficeBean

Les fondamentaux du développement d applications Java

PHP 5.4 Développez un site web dynamique et interactif

Manuel Utilisateur. Boticely

Parcours FOAD Formation EXCEL 2010

Le stockage local de données en HTML5

Application web de gestion de comptes en banques

RMI le langage Java XII-1 JMF

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Outils logiciels pour l'ingénierie documentaire

Tutorial pour une application simple

Trier les ventes (sales order) avec Vtiger CRM

Prise en main du BusinessObjects XI R2 Service Pack 2/ Productivity Pack

Malgré son aspect spartiate, Freeplane offre de nombreuses fonctionnalités en particulier dans le domaine de la diffusion des cartes sur le Web.

Celui qui vous parle. Yann Vigara

Construction d un Site Internet Dynamique avec Joomla René-Yves Hervé, Ph.D.

Table des matières. 1 À propos de ce manuel Icônes utilisées dans ce manuel Public visé Commentaires...

Guide de l'utilisateur de SAP BusinessObjects Web Intelligence Rich Client

Le serveur web Windows Home Server 2011

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

Module ebay pour PrestaShop Guide du vendeur

Cours de Génie Logiciel

Le hub d entreprise est une application de déploiement des applications mais aussi un outil de communication

Annexe : La Programmation Informatique

Dévéloppement de Sites Web

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Guide d'utilisation. OpenOffice Calc. AUTEUR INITIAL : VINCENT MEUNIER Publié sous licence Creative Commons

Université de Bangui. Modélisons en UML

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Climat Scolaire - Manuel utilisateur - Chapitre 2 : «Créer, Editer et suivi d un texte»

Compte-rendu de projet de Système de gestion de base de données

GANTTPROJECT. Julien TENDERO

BIRT (Business Intelligence and Reporting Tools)

Cours IHM-1 Conception des interfaces 5 - Agencement de l'interface Disposition des éléments Jacques BAPST

XML par la pratique Bases indispensables, concepts et cas pratiques (3ième édition)

Dossier. Développer en Java sur téléphone mobile. Benjamin Damécourt UFR SITEC Master 2 EESC 11 janvier 2012

Flex. Lire les données de manière contrôlée. Programmation Flex 4 Aurélien VANNIEUWENHUYZE

MEGA Web Front-End Installation Guide MEGA HOPEX V1R1 FR. Révisé le : 5 novembre 2013 Créé le : 31 octobre Auteur : Noé LAVALLEE

FreePlane 1.1 Kris Bostoen Drève des Soupirs Bierghes (Rebecq) Juin 2010

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

MODE OPÉRATOIRE : CIEL COMPTA

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Centre de formation: Collège IBN BASSAM - TEMARA. Ce cours est proposé par le professeur d informatique:

Alfresco Guide Utilisateur

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

1. Cliquez sur dans le coin supérieur gauche de l'écran 2. Sélectionnez la Langue de l'interface désirée 3. Cliquez sur

Dans nos locaux au 98 Route de Sauve NÎMES. Un ordinateur PC par stagiaire, scanner, imprimante/copieur laser couleur

Les outils de création de sites web

OOo4Kids, la suite OpenOffice adaptée aux enfants

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

Q-Checker pour V6 Release 2.1

Magento. Magento. Réussir son site e-commerce. Réussir son site e-commerce BLANCHARD. Préface de Sébastien L e p e r s

FreeAnalysis. Schema Designer. Cubes

Initiation à html et à la création d'un site web

Architectures Web Services RESTful

Ateliers Python+Qt : Premiers pas : Comment développez ses propres interfaces graphiques sur le RaspberryPi?

Didacticiel de mise à jour Web

L informatique et la formation en direction des élus

Description des pratiques à adopter pour la mise à jour du layout en utilisant le gestionnaire de conception de Sharepoint 2013

SPECIFICITES TECHNIQUES DES FORMATS PUBLICITAIRES

Transcription:

Cours IHM-1 JavaFX 7 - FXML SceneBuilder Jacques BAPST jacques.bapst@hefr.ch

I/F procédurales déclaratives Avec JavaFX, les interfaces peuvent être créées de deux manières : Procédurale : en écrivant du code Java qui fait appel aux API de la plateforme et qui utilise les composants/conteneurs à disposition (classes et interfaces) Déclarative : en décrivant l'interface dans un fichier au format FXML qui sera ensuite chargé dynamiquement dans l'application Les premiers chapitres du cours ont décrit les bases de la technique procédurale (programmatique) permettant de créer des interfaces. Le présent chapitre abordera la deuxième possibilité de créer les interfaces (les vues) en utilisant notamment l'outil SceneBuilder qui permet, de manière interactive, de créer les fichiers FXML. SceneBuilder est une application qui doit être installée et, pour une utilisation avec Eclipse, le plugin e(fx)clipe est recommandé. IHM-1 FX07 Jacques BAPST 2

Fichiers FXML [1] Au centre de l'approche déclarative, se trouve les fichiers FXML. Un fichier FXML est un fichier au format XML dont la syntaxe est conçue pour décrire l'interface (la vue) avec ses composants, ses conteneurs, sa disposition, Le fichier FXML décrit le "quoi" mais pas le "comment" A l'exécution, le fichier FXML sera chargé par l'application (classe FXMLLoader) et un objet Java sera créé (généralement la racine est un conteneur) avec les éléments que le fichier décrit (les composants, conteneurs, graphiques, ). Un fichier FXML constitue une forme particulière de sérialisation d'objets, utilisée spécifiquement pour décrire les interfaces Il est possible de créer les fichiers FXML avec un éditeur de texte mais, plus généralement, on utilise un outil graphique (SceneBuilder) qui permet de concevoir l'interface de manière conviviale et de générer automatiquement le fichier FXML correspondant. IHM-1 FX07 Jacques BAPST 3

Fichiers FXML [2] Les objets créés par le chargement de fichiers FXML peuvent être assignés à la racine d'un graphe de scène ou représenter un des nœuds dans un graphe de scène créé de manière procédurale. Une fois chargés, les nœuds issus de fichiers FXML sont totalement équivalents à ceux créés de manière procédurale. Les mêmes opérations et manipulations peuvent leur être appliquées. Le langage FXML n'est pas associé à un schéma XML mais la structure de sa syntaxe correspond à celle des API JavaFX : Les classes JavaFX (conteneurs, composants) peuvent être utilisées comme éléments dans la syntaxe XML Les propriétés des composants correspondent à leurs attributs Même si certaines possibilités existent (en lien notamment avec du code JavaScript) on conseille généralement d'utiliser les fichiers FXML exclusivement pour décrire les interfaces, et d'effectuer tous les traitements (activité des contrôleurs) dans le code Java. IHM-1 FX07 Jacques BAPST 4

SceneBuilder [1] L'outil graphique SceneBuilder permet de concevoir l'interface de manière interactive (WYSIWYG) en assemblant les conteneurs et les composants et en définissant leurs propriétés. Le mode de fonctionnement de cet utilitaire est assez classique avec une zone d'édition centrale, entourée d'un certain nombre d'outils : palettes de conteneurs, de composants, de menus, de graphiques, vue de la structure hiérarchique de l'interface, inspecteurs de propriétés, de layout, etc. L'utilisation de cet outil n'est pas décrit en détail dans ce support de cours, il faut se référer à la documentation disponible. Son utilisation est cependant assez intuitive, pour autant que les éléments affichés soient connus (conteneurs, composants avec leurs propriétés principales notamment). Malgré l'outil graphique, on n'échappe donc pas à une compréhension minimale des API (composants, conteneurs, propriétés, ). IHM-1 FX07 Jacques BAPST 5

SceneBuilder [2] Aperçu de l'écran principal : IHM-1 FX07 Jacques BAPST 6

Say Hello [1] Un exemple d'application très simple : Un conteneur BorderPane Deux composants : Label et Button Quelques adaptations de propriétés (taille, couleur, marge, ) Graphe de scène et apparence finale de l'application Stage Scene BorderPane TOP Label BOTTOM Button IHM-1 FX07 Jacques BAPST 7

Say Hello [2] Variante procédurale avec les API JavaFX : BorderPane root = new BorderPane(); root.setprefwidth(250); root.setprefheight(80); root.setstyle("-fx-background-color: #FFFCAA"); root.setpadding(new Insets(10, 5, 10, 5)); Label lbltitle = new Label(); lbltitle.settext("titre"); lbltitle.settextfill(color.web("#0022cc")); lbltitle.setfont(font.font("sansserif", FontWeight.BOLD, 20)); BorderPane.setAlignment(lblTitle, Pos.CENTER); root.settop(lbltitle); Button btnsayhello = new Button(); btnsayhello.settext("say Hello"); BorderPane.setAlignment(btnSayHello, Pos.CENTER); root.setbottom(btnsayhello); btnsayhello.setonaction(event -> { lbltitle.settext("h e l l o!"); lbltitle.settextfill(color.fuchsia); }); IHM-1 FX07 Jacques BAPST 8

Say Hello [3] La même application a été créée de manière déclarative et la vue est donc décrite dans un fichier FXML qui a été créé avec SceneBuilder. Le fichier XML comporte tout d'abord une partie déclarative (en-tête et importations nécessaires à la création dynamique de l'objet Java). Ensuite on trouve la description de la structure de l'interface (graphe de scène avec conteneurs, composants et propriétés). <?xml version="1.0" encoding="utf-8"?> <?import javafx.geometry.*?> <?import javafx.scene.text.*?> <?import javafx.scene.control.*?> <?import java.lang.*?> <?import javafx.scene.layout.*?> <BorderPane... > Racine du graphe de scène.... Conteneurs et composants du graphe de scène. </BorderPane> IHM-1 FX07 Jacques BAPST 9

Say Hello [4] Partie principale du fichier FXML créé avec SceneBuilder <BorderPane prefheight="80.0" prefwidth="250.0" style="-fx-background-color: #FFFCAA;" xmlns=http://javafx.com/javafx/8 xmlns:fx=http://javafx.com/fxml/1 fx:controller="supp_cours.chap07.sayhellocontroller"> <top> <Label id="title" fx:id="title" text="titre" textfill="#0022cc" BorderPane.alignment="CENTER"> <font> <Font name="sansserif Bold" size="20.0" /> </font> </Label> </top> <bottom> <Button fx:id="btnhello" onaction="#handlebuttonaction" text="say Hello" BorderPane.alignment="CENTER" /> </bottom> <padding> <Insets bottom="10.0" left="5.0" right="5.0" top="10.0" /> </padding> </BorderPane> IHM-1 FX07 Jacques BAPST 10

Say Hello [5] 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 (par le classloader) 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") (attention: le caractère '/' est aussi utilisé même s'il s'agit de packages et sous-packages) public void start(stage primarystage) throws Exception { } //--- Chargement du fichier FXML BorderPane root = FXMLLoader.load(getClass().getResource("SayHello.fxml")); Scene scene = new Scene(root); primarystage.setscene(scene); primarystage.settitle("sayhello FXML"); primarystage.show(); IHM-1 FX07 Jacques BAPST 11

Say Hello [6] Dans la variante déclarative, une classe séparée joue le rôle de contrôleur pour traiter l'action du clic sur le bouton. Le principe de fonctionnement et le rôle des annotations seront expliqués dans les pages qui suivent. public class SayHelloController { @FXML private Button btnhello; // Object injected by FXMLLoader (fx:id="btnhello") @FXML private Label title; // Object injected by FXMLLoader (fx:id="title") } @FXML private void handlebuttonaction(actionevent event) { title.settext("h e l l o!"); title.settextfill(color.fuchsia); } IHM-1 FX07 Jacques BAPST 12

Say Hello [7] Les deux variantes de l'application (avec interface créée de manière procédurale et déclarative) fonctionnent de manière strictement identique. Un clic sur le bouton modifie le texte et la couleur du composant Label. Variante procédurale Variante déclarative IHM-1 FX07 Jacques BAPST 13

Interprétation des fichiers FXML [1] Lors du chargement du fichier FXML, son contenu est interprété et des objets Java correspondants sont créés. Par exemple, l'élément <BorderPane prefheight="80.0" prefwidth="250.0"... sera interprété comme BorderPane rootpane = new BorderPane(); rootpane.setprefheight(80.0); rootpane.setprefwidth(250.0);... Quand un attribut commence par le nom d'une classe suivi d'un point et d'un identificateur, par exemple <TexField GridPane.columnIndex="3"... l'attribut sera interprété comme une invocation de méthode statique TextField tfd = new TextField(); GridPane.setColumnIndex(tfd, 3);... IHM-1 FX07 Jacques BAPST 14

Interprétation des fichiers FXML [2] 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é (plutôt que de déclarer des attributs). Par exemple, si l'on considère l'élément <Label id="title" fx:id="title" text="titre" textfill="#0022cc" BorderPane.alignment="CENTER"> <font> <Font name="sansserif Bold" size="20.0" /> </font> </Label> 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 (par exemple children), les éléments de la liste sont simplement imbriqués et répétés dans l'élément représentant la liste (par exemple, les composants enfants seront listés entre les balises <children> et </children>). IHM-1 FX07 Jacques BAPST 15

Liens FXML programme [1] Le lien entre les composants décrits dans le fichier FXML et le programme est établi par les attributs fx:id : <Label id="title" fx:id="title" text="titre" textfill="#0022cc"... 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. public class SayHelloController { @FXML private Button btnhello; @FXML private Label title; // fx:id="title" // Object injected by FXMLLoader IHM-1 FX07 Jacques BAPST 16

Liens FXML programme [2] 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 : <BorderPane prefheight="80.0" prefwidth="250.0" style="-fx-background-color: #FFFCAA;" xmlns=http://javafx.com/javafx/8 xmlns:fx=http://javafx.com/fxml/1 fx:controller="supp_cours.chap07.sayhellocontroller">... Attention : Les attributs qui définissent les namespaces xmlns= ainsi que xmlns:fx= sont utilisés par l'environnement JavaFX (FXMLLoader, SceneBuilder, etc.). Ils ne doivent donc pas être modifiés! IHM-1 FX07 Jacques BAPST 17

Liens FXML programme [3] 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" : <Button fx:id="btnhello" onaction="#handlebuttonaction" text="say Hello" BorderPane.alignment="CENTER" />... Dans la classe contrôleur, ces méthodes devront (comme les composants associés) être annotées avec @FXML.... @FXML private void handlebuttonaction(actionevent event) { title.settext("h e l l o!"); title.settextfill(color.fuchsia); } IHM-1 FX07 Jacques BAPST 18

Liens FXML programme [4] 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.... @FXML private void initialize() { cbbcountry.getitems().addall("allemagne", "Angleterre", "Belgique", "Espagne", "France", "Italie", "Pays-Bas", "Portugal", "Suisse"); } lstproducts.getitems().addall(model.getproducts());... IHM-1 FX07 Jacques BAPST 19

Liens FXML programme [5] Dans l'éditeur SceneBuilder, ces différents attributs de liaison avec le programme doivent être indiqués dans les champs prévus. Attribut fx:id et attribut fx:controller Attribut fx:on Le bloc Controller est situé en bas, à gauche de l'écran principal. IHM-1 FX07 Jacques BAPST 20

Liens FXML programme [6] L'attribut id ne doit pas être confondu avec l'attribut fx:id. <Label id="title" fx:id="title" text="titre" textfill="#0022cc"... 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 : #title { -fx-font-size: 24pt; } Dans le fichier FXML, une feuille de style (fichier CSS) peut être associé à un composant avec l'attribut stylesheets="@css_file" <BorderPane stylesheets="@sayhello.css"... > L'éditeur SceneBuilder permet (dans l'inspecteur de propriétés) de créer l'attribut id et de définir le fichier CSS associé (Stylesheets). IHM-1 FX07 Jacques BAPST 21

Liens FXML programme [7] 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 la référence du modèle de l'application : public void start(stage primarystage) throws Exception { //--- Chargement du fichier FXML et recherche du contrôleur associé FXMLLoader loader = new FXMLLoader(getClass().getResource("SayHello.fxml")); BorderPane root = loader.load(); SayHelloController ctrl = loader.getcontroller(); ctrl.setmodel(model); Scene scene = new Scene(root);... Dans ce cas, on utilisera la méthode d'instance load() pour charger le fichier FXML et obtenir la référence de la racine du graphe de scène. IHM-1 FX07 Jacques BAPST 22

Liens FXML programme [8] Si le contrôleur d'une interface déclarée avec FXML ne possède pas de constructeur par défaut, il faut créer le contrôleur et l'associer dans le code du programme, avant le chargement du fichier FXML. Le code suivant illustre la manière de le faire : public void start(stage primarystage) throws Exception { //--- Chargement du fichier FXML et association du contrôleur FXMLLoader loader = new FXMLLoader(getClass().getResource("SayHello.fxml")); loader.setcontroller(new SayHelloController("a param")); BorderPane root = loader.load();... Dans ce cas, il n'est pas nécessaire de déclarer le contrôleur dans le fichier FXML (fx:controller="..."). IHM-1 FX07 Jacques BAPST 23