l’api graphique de java -...
TRANSCRIPT
Daniel Tschirhart : Programmation Java V1.37
2
AWTAWTJava AWT (Abstract Windows Toolkit) est un ensemble de composants graphiques permettant de réaliser une application de type graphique indépendamment de la plateforme utilisée pour le développement. AWT utilise l’API graphique sous-jacente de la plateforme d’accueil.Une application AWT possède le look de la plateforme d’accueil.
Daniel Tschirhart : Programmation Java V1.37
3
SwingSwingJava Swing est écrit entièrement en Java pour la portabilité. Contrairement à AWT, tous les éléments de l’interface graphique sont redessinés par Java.Swing possède également une fonctionnalité assez avancée, appelée le «pluggable look and feel », qui signifie que l'apparence de l'interface utilisateur peut être modifiée dynamiquement pour s'adapter aux habitudes des utilisateurs travaillant sur des plateformes et systèmes d'exploitation différents. Il est même possible (quoique difficile) d'inventer son propre «look and feel».
Daniel Tschirhart : Programmation Java V1.37
4
Classes AWTClasses AWTn Les principales
classes sont :n Canvas qui permet
de dessiner dans un cadre de fenêtre
n Frame qui permet d’afficher une fenêtre
n Graphics qui fourni l’accès aux outils de dessin.
Daniel Tschirhart : Programmation Java V1.37
5Dans l’application
Communication des actions utilisateurs à la fenêtreCommunication des actions utilisateurs à la fenêtren Les actions utilisateurs et système sont transmis à un écouteur via
un mécanisme d’abonnement.
Daniel Tschirhart : Programmation Java V1.37
6
Événements dans javaÉvénements dans java
n Java distingue deux types d’événements :n Les événements liés à la fenêtre : essentiellement
les boutons n Les événements liées à des composants placés
dans la fenêtre : contrôles (boutons, listes, cases à cocher …)
n La communication d’un événement à l’application se fait par un mécanisme d’abonnement
Daniel Tschirhart : Programmation Java V1.37
7
Création d’une fenêtreCréation d’une fenêtren Il y a deux méthodes pour dessiner une fenêtre :
1. En instanciant un objet de la classe Frame2. En dérivant une classe de la classe Frame
n Les deux possibilités seront mis en œuvre à travers une calculette Euro et un mini système graphique
n Avec la calculette nous utiliserons la méthode 1 et nous verrons comment gérer des zones d'édition,
n Dans le mini système graphique utiliserons la méthode 2 et nous verrons comment dessiner et gérer des boutons,
Daniel Tschirhart : Programmation Java V1.37
8
Création d'un fenêtre par Création d'un fenêtre par dérivation de la classe Framedérivation de la classe Frame
Exemple Calculette1
Dérive de Frame
Affiche la fenêtre
Daniel Tschirhart : Programmation Java V1.37
9
Création d'un fenêtre par dérivation de la Création d'un fenêtre par dérivation de la classe Frame : exemple calculette euroclasse Frame : exemple calculette euro
n La calculette fonction de façon suivante :n Toute frappe dans la zone Dollar provoque la conversion dans la
zone Eurosn Toute frappe dans la zone Euros provoque la conversion dans la
zone Dollar
Contrôle d’éditionContrôle label
Daniel Tschirhart : Programmation Java V1.37
10
Principaux éléments d’IHM Principaux éléments d’IHM n Les objets d’interface graphique s’appellent des contrôles. Ils génèrent des
événements aux quels on abonne des méthodes appelées gestionnaires d’événements.
Contrôle Choise
Contrôle ScrollbarContrôle List
Daniel Tschirhart : Programmation Java V1.37
11
Positionnement des contrôlesPositionnement des contrôlesn Les contrôles sont positionnés dans la fenêtre suivant l’ordre donné
par setLayout auquel on passe un objet de classe LayoutManagerpouvant prendre les valeur suivantes :n FlowLayout : aligne les contrôles de gauche à droite et de haut en basn GridLayout : aligne les contrôles suivant une grillen BorderLayout : aligne les contrôles suivant des coordonnées
géographiques (nord, sud, est, ouest)
Daniel Tschirhart : Programmation Java V1.37
12
Les labelsLes labelsn Les labels sont des zones de texte pouvant être lus ou écrits par
programmes. Les labels ne génèrent aucun événement.n Mise en place d'un label
Facultatif
Ajout du label dans la fenêtre
Daniel Tschirhart : Programmation Java V1.37
13
Les labels : Les labels : principales méthodesprincipales méthodes
Daniel Tschirhart : Programmation Java V1.37
14
Les zones d'éditionLes zones d'éditionn Les zones d'édition sont des zones permettant la saisie de données
au clavier. Ces zones constituent un mini éditeur de texte (gestion du curseur, du presse papier, ...).
n Mise en place d'une zone d'édition
Exemple Calculette2
Taille de la zone en caractères
Ajout de la zone dans la fenêtre
Daniel Tschirhart : Programmation Java V1.37
15
Les zones d'édition :Les zones d'édition :principaux constructeursprincipaux constructeurs
Daniel Tschirhart : Programmation Java V1.37
16
Les zones d'édition :Les zones d'édition :principales méthodesprincipales méthodes
Daniel Tschirhart : Programmation Java V1.37
17
Les boutonsLes boutonsn Les boutons sont des éléments d'IHM utilisés généralement pour
valider des actions.
Daniel Tschirhart : Programmation Java V1.37
18
Les boutons :Les boutons :principales méthodesprincipales méthodes
Daniel Tschirhart : Programmation Java V1.37
19
Les cases à cocherLes cases à cochern Les cases à cocher permettent de choisir de valider ou non des
éléments quelconques.
Daniel Tschirhart : Programmation Java V1.37
20
Les cases à cocher :Les cases à cocher :constructeursconstructeurs
Daniel Tschirhart : Programmation Java V1.37
21
Les cases à cocher :Les cases à cocher :principales méthodesprincipales méthodes
Daniel Tschirhart : Programmation Java V1.37
22
Les combosLes combosn Les combo permettent d'effectuer un choix parmi n éléments.
Daniel Tschirhart : Programmation Java V1.37
23
Les combos :Les combos :Méthodes et constructeurMéthodes et constructeur
Daniel Tschirhart : Programmation Java V1.37
24
Les combos :Les combos :Méthodes principalesMéthodes principales
Daniel Tschirhart : Programmation Java V1.37
25
Les boites à listesLes boites à listesn Les boites à listes permettent de mémoriser des chaines de
caractères. Cet élément est par exemple utilisé dans la calculette complexe.
Daniel Tschirhart : Programmation Java V1.37
26
Les boites à listes :Les boites à listes :constructeursconstructeurs
Daniel Tschirhart : Programmation Java V1.37
27
Les boites à listes :Les boites à listes :principales méthodes (1)principales méthodes (1)
Daniel Tschirhart : Programmation Java V1.37
28
Les boites à listes :Les boites à listes :principales méthodes (1)principales méthodes (1)
Daniel Tschirhart : Programmation Java V1.37
29
TextAreaTextArean Un TextArea une zone d'édition multi lignes.
Daniel Tschirhart : Programmation Java V1.37
31
TextArea :TextArea :principales méthodesprincipales méthodes
Daniel Tschirhart : Programmation Java V1.37
32
FileDialogFileDialogn FileDialog est un contrôle permettant l'accès aux fichiers et répertoires.
Daniel Tschirhart : Programmation Java V1.37
33
FileDialog : constructeursFileDialog : constructeurs
Daniel Tschirhart : Programmation Java V1.37
34
FileDialogFileDialog : principales méthodes: principales méthodes
Daniel Tschirhart : Programmation Java V1.37
36
Caractéristiques communes Caractéristiques communes aux contrôles : couleuraux contrôles : couleur
n Couleur avant plan et arrière plann setForegroundn setBackground
label1.setForeground(Color.RED);this.setBackground(new Color(0xE0F8FE));bouton.setBackground();bouton.setBackground(Color.PINK);bouton.setForeground(Color.BLUE);
Daniel Tschirhart : Programmation Java V1.37
37
Caractéristiques communes Caractéristiques communes aux contrôles : tailleaux contrôles : taille
n Taille du contrôle (Largeur, Hauteur)n setSize
this.setSize(763, 373);
bouton.setSize(100, 30);
Daniel Tschirhart : Programmation Java V1.37
38
Caractéristiques communes Caractéristiques communes aux contrôles : nomaux contrôles : nom
n Nom internen setName
this.setName("Ma Fenêtre");
bouton.setName("Bouton 1");
n Ces noms sont des données qui ne sont pas affichées, ils peuvent être utilisées pour identifier un contrôle de façon dynamique.
Daniel Tschirhart : Programmation Java V1.37
39
Caractéristiques communes aux Caractéristiques communes aux contrôles : position et dimensioncontrôles : position et dimension
n Permet de définir la position et la taille du contrôle dans la fenêtren setBoundsbouton.setBounds(new Rectangle(x, y, largeur, hauteur));
.
Daniel Tschirhart : Programmation Java V1.37
40
Caractéristiques communes Caractéristiques communes aux contrôles : police aux contrôles : police
n Policen setFontbouton.setFont(new Font("",Font.BOLD,20));bouton.setFont(new Font("Monospaced",
Font.PLAIN | Font.BOLD | Font.ITALIC,20));
S'applique à tous les contrôles
Daniel Tschirhart : Programmation Java V1.37
41
Gestionnaire événementsGestionnaire événements
n Les contrôles communiquent les actions effectuées par l'utilisateur à l'aide d'événements. Ces événements sont gérés par le système d'exploitation sous-jacent et par la machine Java.
n Pour que l'événement remonte vers l'application, l'objet contrôlé doit abonner une ou plusieurs fonctions à ce celui-ci.
n La fonction abonnée s'appelle un gestionnaire d'événement ou un écouteur.
Exemple CalculetteEuro!!!
Daniel Tschirhart : Programmation Java V1.37
42
Types d'événements Types d'événements (non exhaustif) (non exhaustif)
n Java propose des abonnements à une grande variété d’événements.
Daniel Tschirhart : Programmation Java V1.37
43
Syntaxe des abonnementsSyntaxe des abonnements
Exemple CalculetteEuro!!!
n Syntaxe < réf source événement>.<méthode>(<ref obj à abonner>)
n < réf source événement> : référence de l'objet générateurd'événements
n < méthode> : add<nom événement>ListenerExemple : addKeyListener
n <ref obj à abonner> : référence de l'objet abonné. n Si les gestionnaires d'événements appartiennent à la classe abonnante
la référence de l'objet à abonner est thisn Si les gestionnaires d'événements appartiennent une classe différente
de la classe abonnante la référence de l'objet est la référence d'un objet de cette classe.
Daniel Tschirhart : Programmation Java V1.37
44
Exemple d'abonnementExemple d'abonnement
Exemple Calculette1
Type d'événement
Source des événements
Référence de l'objet abonné
Daniel Tschirhart : Programmation Java V1.37
45
Exemple d'abonnementExemple d'abonnement
Exemple Calculette1
Source des événements
Classe abonnée
Référence de l'objet abonné
Type d'événement
Daniel Tschirhart : Programmation Java V1.37
46
Les écouteursLes écouteurs
Exemple CalculetteEuro!!!
n Un écouteur est une fonction appelée par la machine java en réponse à un événement. Pour qu'un écouteur soit appelé, il faut l'abonner à cet événement.
n Un écouteur possède une signature particulière qui doit être absolument respectée.
n Pour respecter cette signature celle-ci est spécifiée dans une interface.n En implémentant (définissant) toutes les fonctions de l'interface
on respecte obligatoirement cette signature.
Daniel Tschirhart : Programmation Java V1.37
47
ExempleExemple
référence de la source des événements
référence de l'objet où sont situés les écouteurs
source des événements
•• Dériver la classe comportant le contrôle, de l'interface où sontDériver la classe comportant le contrôle, de l'interface où sontsituées les signatures des écouteurs.situées les signatures des écouteurs.
•• Définir dans cette la classe les fonctions présentes dans l'interfaceDéfinir dans cette la classe les fonctions présentes dans l'interface
référence de la source des événements
référence de l'objet où sont situés les écouteurs
source des événements
•• Dans l'objet source de l'événement,Dans l'objet source de l'événement,•• abonner les écouteurs en précisant l'objet qui les contient.abonner les écouteurs en précisant l'objet qui les contient.
source des événements
Daniel Tschirhart : Programmation Java V1.37
49
Problèmes posés par cette Problèmes posés par cette méthodeméthode
Exemple CalculetteEuro!!!
n Si l'interface comporte 20 méthodes, il faut les définir toutes même si elles ne font rien.
n Le code résultant devient peut lisible.
Daniel Tschirhart : Programmation Java V1.37
50
Amélioration de la méthode Amélioration de la méthode précédenteprécédente
n Dériver d'une l'interface comportant des écouteurs et implémenter tous les écouteurs par des fonctions vides.
n Définir cette classe comme abstraite pour interdire toute instanciation directe.
n Dériver cette classe et définir uniquement les écouteurs présentant un intérêt.
Daniel Tschirhart : Programmation Java V1.37
52
ExplicationsExplications
n La classe abstraite (par exemple WindowAdapter) hérite d'une l’interface (par exemple WindowListener). n Cette classe définit toutes les fonctions de
l’interface par des fonctions vides (comme la plupart des gestionnaires définis dans l’exemple précédent).
n La classe WindowAdapter est rendue abstraite (par le préfixe abstract) pour interdire toute instanciation directe de la classe.
Daniel Tschirhart : Programmation Java V1.37
53
Mise en place de l'écouteurMise en place de l'écouteur•• Dériver la classe la classe abstraite comportant les écouteurs Dériver la classe la classe abstraite comportant les écouteurs (ici (ici WindowAdapterWindowAdapter) et surcharger un ou plusieurs écouteurs.) et surcharger un ou plusieurs écouteurs.
•• Dans l'objet source de l'événement,Dans l'objet source de l'événement,•• abonner l'écouteur en précisant l'objet où il se trouve.abonner l'écouteur en précisant l'objet où il se trouve.
référence de la source des événements
référence de l'objet où sont situés les écouteurs
source des événements
Daniel Tschirhart : Programmation Java V1.37
55
Inconvénient de cette méthodeInconvénient de cette méthode
Exemple CalculetteEuro!!!
n Lourdeur si l'interface ne comporte que très peu d'écouteurs.
n Necessité de définir la classe surchargeant la classe abstraite.
Daniel Tschirhart : Programmation Java V1.37
56
Définir un écouteur dans une Définir un écouteur dans une classe anonyme classe anonyme
La définition de ce type de classe est similaire à celle d’une classe « normale ».
Exemple X classe dérivant de Y:
class X extends Y{public void uneFonctionQuiNeFaitRien() { }
}
Classe anonyme dérivant de la classe Y :
extends Y {public void uneFonctionQuiNeFaitRien() { }
}
Daniel Tschirhart : Programmation Java V1.37
57
Instancier une classe anonymeInstancier une classe anonyme
n Instancier la classe anonyme précédente s’écrit :new Y(){
public void uneFonctionQuiNeFaitRien() { }
n Cette anonyme hérite de la classe Y et peut être utilisée pour redéfinir une ou plusieurs méthodes de la classe Y.
Daniel Tschirhart : Programmation Java V1.37
58
Abonner un écouteur dans une Abonner un écouteur dans une classe anonymeclasse anonyme
this.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){
System.exit(0);}}
);
Classe anonymeEcouteurSource de l'événement
Instanciation de la classe anonyme Classe héritée
Daniel Tschirhart : Programmation Java V1.37
59
Quels événements pour quels Quels événements pour quels contrôles ?contrôles ?n Le choix d'un événements associé à un contrôle est
une question de logique..n La lecture de la documentation associée à la classe
fournit dans le cas général le nom du gestionnaire le plus adapté.
n Les classes parentes peuvent fournir d'autres gestionnaires (naviguer dans la documentation de façon intelligente), mais le choix reste toujours une question de bon sens !
n Eclipse fournit une aide similaire en présentant tous les gestionnaires présent dans la classe et dans les classes parentes, mais le choix reste toujours une question de bon sens.
Daniel Tschirhart : Programmation Java V1.37
60
Evénements liés à la fenêtreEvénements liés à la fenêtren Un événement peut se
déclencher par :n L'activation de la fenêtren La fermeture effective de la
fenêtren La fermeture de la fenêtren La désactivation de la
fenêtren Le passage de l'état
d'icône à l'état ouvertn Le passage à l'état d'icônen L'ouverture de la fenêtre
Daniel Tschirhart : Programmation Java V1.37
61
AbonnementAbonnementn Abonnement par : addWindowListernern Méthodes à abonner définies :
n en implémentant l'interface WindowListernern oun en dérivant la classe WindowAdapter
n Méthodes abonnéesn public void windowClosing(WindowEvent e)n public void windowActivated(WindowEvent e)n public void windowClosed(WindowEvent e)n public void windowDeactivated(WindowEvent e)n public void windowDeiconified(WindowEvent e)n public void windowIconified(WindowEvent e)n public void windowOpened(WindowEvent e)
Daniel Tschirhart : Programmation Java V1.37
62
Définition des gestionnaires de Définition des gestionnaires de fenêtre à l'aide de l'interfacefenêtre à l'aide de l'interface
Exemple Calculette1
Abonner aux gestionnaires de la fenêtre
Implémente l'interfaceWindowListener(Déclare les méthodes abonnées)
Méthodes abonnées
Ferme la fenêtre
Daniel Tschirhart : Programmation Java V1.37
63
Définition des gestionnaires de Définition des gestionnaires de fenêtre à l'aide d'une classefenêtre à l'aide d'une classe
Daniel Tschirhart : Programmation Java V1.37
64
Remarque sur la syntaxe de Remarque sur la syntaxe de l'abonnementl'abonnement
Exemple Calculette1
Abonner le gestionnaires de la fenêtre
Source des événements
Classe abonnée
Référence de l'objet abonné
Daniel Tschirhart : Programmation Java V1.37
65
Événements déclenchés par Événements déclenchés par l‘appui d’un boutonl‘appui d’un bouton
n Interface à dériver ActionListenern Abonnement par addActionListenern Ecouteur
public void actionPerformed(ActionEvent arg)n Détermination du bouton actionné
Daniel Tschirhart : Programmation Java V1.37
66
Evénements déclenchés par Evénements déclenchés par l'activation du contrôlel'activation du contrôle
n Peut se déclencher par :n Le fait qu'un
contrôle soit actifn Le fait qu'un
contrôle devienne inactifs
Daniel Tschirhart : Programmation Java V1.37
67
AbonnementAbonnement
n Abonnement par : addFocusListener
n Méthodes à abonner définies :n en implémentant dans l'interface FocusListernern oun en dérivant la classe FocusAdapter
n Méthodes abonnéesn public void focusLost(FocusEvent e)n public void focusGained(FocusEvent e)
Daniel Tschirhart : Programmation Java V1.37
68
Exemple d'abonnement et de Exemple d'abonnement et de définition d'un gestionnaires de focusdéfinition d'un gestionnaires de focus
Exemple CalculetteEuro!!!
Daniel Tschirhart : Programmation Java V1.37
69
Evénements dus au claviersEvénements dus au claviers
n Peut se déclencher par :n Une touche enfoncéen Une touche relâchéen Une touche frappée
Daniel Tschirhart : Programmation Java V1.37
70
AbonnementAbonnement
n Abonnement par : addKeyListenern Méthodes à abonner définies :
n en implémentant l'interface KeyListernern oun en dérivant la classe KeyAdapter
n Méthodes abonnées
Daniel Tschirhart : Programmation Java V1.37
71
Exemple de gestionnaire d'événements Exemple de gestionnaire d'événements pour le clavierpour le clavier
Exemple CalculetteEuro!!!
Daniel Tschirhart : Programmation Java V1.37
72
Evénements dus au mulotEvénements dus au mulotn Peut se déclencher par :
n Clic boutonn Curseur entrant dans la
zone activen Curseur sortant de la la
zone activen Clic enfoncén Clic relâchén Zone de donnée déplacée
à l'aide de la sourisn Souris déplacée
Daniel Tschirhart : Programmation Java V1.37
73
Abonnement mouseAbonnement mousen Abonnement par : addMouseListenern Méthodes à abonner définies :
n en implémentant l'interface MouseListernern oun en dérivant la classe MouseAdapter
n Méthodes abonnées
Daniel Tschirhart : Programmation Java V1.37
74
Abonnement mouse motionAbonnement mouse motionn Abonnement par : addMouseMotionListenern Méthodes à abonner définies :
n en implémentant l'interface MouseMotionListernern oun dérivant la classe MouseMotionAdapter
n Méthodes abonnées
Daniel Tschirhart : Programmation Java V1.37
75
Evénements déclenchés par le Evénements déclenchés par le changement de propriété d'un changement de propriété d'un contrôlecontrôle
n Peut se déclencher par :n Le passage en arrière plann Le changement
d'orientationn L'activation du contrôlen Le changement de policen Le passage au premier plann La relocalisation du contrôlen Le passage à l'état visible ou
caché
Daniel Tschirhart : Programmation Java V1.37
76
Evénements déclenchés par le Evénements déclenchés par le changements d'aspect d'un changements d'aspect d'un contrôlecontrôle
n Peut se déclencher par :n Le passage à l'état
invisible du contrôlen Le déplacement du
contrôlen Le redimensionnement
du contrôlen Le passage à l'état
visible du contrôle.
Daniel Tschirhart : Programmation Java V1.37
77
AbonnementAbonnementn Abonnement par : addComponentListenern Méthodes à abonner définies :
n en implémentant l'interface ComponentListernern oun en dérivant la classe ComponentAdapter
n Méthodes abonnées
Daniel Tschirhart : Programmation Java V1.37
78
Evénements déclenchés par Evénements déclenchés par l'ajout d'un contrôlel'ajout d'un contrôle
n Peu se déclencher part :n Le fait qu'un
contrôle soit ajouté à la fenêtre
n Le fait qu'un contrôle soit retiré de la fenêtre
Daniel Tschirhart : Programmation Java V1.37
79
AbonnementAbonnementn Abonnement par : addContainerListenern Méthodes à abonner définies :
n en implémentant l'interface ContainerListernern oun dérivant la classe ComponentAdapter
n Méthodes abonnées
Daniel Tschirhart : Programmation Java V1.37
80
Evénements déclenchés par le Evénements déclenchés par le changement de position du changement de position du contrôle sur l'axe Zcontrôle sur l'axe Z
n Peut se déclencher par :n Le fait que l'ordre
de l'axe Z soit modifié.
n Le fait que l'élément en position Z-1 soit déplacé ou retaillé.
Daniel Tschirhart : Programmation Java V1.37
81
AbonnementAbonnementn Abonnement par : addHierarchyListenern Méthodes à abonner définies :
n en implémentant l'interface HierarchyListenern oun dérivant la classe HierarchyAdapter
n Méthode abonnée
Daniel Tschirhart : Programmation Java V1.37
82
Création d’une fenêtre par Création d’une fenêtre par instanciation de la classe frameinstanciation de la classe frame
Pour le moment on ne peut ni dessiner, ni fermer la fenêtre
Exemple Figures1
Daniel Tschirhart : Programmation Java V1.37
83
Mise en place du mécanisme de Mise en place du mécanisme de fermeture d’une fenêtrefermeture d’une fenêtre
Exemple Figures2
Daniel Tschirhart : Programmation Java V1.37
84
Dessiner dans une fenêtreDessiner dans une fenêtre
n Pour dessiner dans une fenêtre il faut sous classer Canvas.
n Cette classe fournit une méthode paint à laquelle elle transmet un objet Graphics avec lequel on peut dessiner.n La fonction paint est appelée :
n automatiquement chaque fois que le contenu de la fenêtre est altéré
n Manuellement chaque fois que l’on appelle la fonction repaint
Daniel Tschirhart : Programmation Java V1.37
85
Dessiner dans une fenêtre (2)Dessiner dans une fenêtre (2)Exemple Figures3
X, Y : centre du cercle
trace un cercle tangent au bord supérieur gauche de la fenêtre
Daniel Tschirhart : Programmation Java V1.37
86
Dessiner dans une fenêtre (3)Dessiner dans une fenêtre (3)Pour que la fenêtre utilise la classe Dessin il faut enregistrer l’objet gérant le dessin dans la classe Frame
Exemple Figures3
Daniel Tschirhart : Programmation Java V1.37
87
Ajouter des éléments IHMAjouter des éléments IHMn Les éléments IHM les plus courants sont les boutons.n Un bouton est créé en instanciant la classe Button
n Pour gérer des boutons, le plus simple est de créer une classe encapsulant les butons (classe MesBoutons).
n Pour que les boutons soient affichés dans la fenêtre il faut, comme pour le dessin enregistrer l’objet qui gère les boutons dans la classe Frame.
n L'objet contenant les boutons est positionné sur l’écran en précisant sa position cardinale dans la fenêtre (nord, sud, est, ouest, centre) lors de l’enregistrement. Cette position ne doit pas être en conflit avec d'autres positions.
n Pour qu'un bouton puisse agir sur un objet, il faut transmettre l’objet au constructeur de la classe gérant les boutons.
Daniel Tschirhart : Programmation Java V1.37
88
Ajouter des éléments IHM (2)Ajouter des éléments IHM (2)
Enregistrer l’objet Dessin au centre de la fenêtre
Créer un objet gérant les boutons et fournir au constructeur de la classe MesBoutons un objet Dessin
Enregistrer l’objet gérant les boutons au bas de la fenêtre
Exemple Figures
Daniel Tschirhart : Programmation Java V1.37
89
Ajouter des éléments IHM (3)Ajouter des éléments IHM (3)
n Un bouton est crée en instanciant la classe Buttonn Pour pouvoir utiliser un bouton il faut signaler son existence en
l’ajoutant à la classe Panel (fonction add). Il faut donc dériver la classe MesBoutons de la classe Panel pour pouvoir utiliser add.
n Un bouton produit lorsqu’il est actionné plusieurs événements (appuyé, relâché, …).n Ces événements sont transmis à une fonction de rappel
actionPerformed situé dans l’interface ActionListener (c’est sa seule fonction).
n Pour utiliser la fonction de rappel actionPerformed il faut l’implémenter dans la classe MesBoutons.
n La fonction addActionListener permet de relier la fonction de rappel à un bouton
n Dans la fonction de rappel ne pas oublier de forcer la mise à jour de la fenêtre le dessin à été modifié.
Créer des composants IHM : exemple de boutons
Daniel Tschirhart : Programmation Java V1.37
90
Ajouter des éléments IHM Ajouter des éléments IHM (4)(4)
Sous classer Panel et implémenter l’interface ActionListener
Créer les boutons et les enregistrer dans Panel
Récupérer l’objet dessin via le constructeur
Abonner à actionPerformed
Réaliser les actions associés aux boutons
Ne pas oublier de mettre à jour la fenêtre
Exemple Figures
Daniel Tschirhart : Programmation Java V1.37
92
Les appletes JavaLes appletes Javan Un applet est un programme exécuté dans un navigateur Webn Après avoir fait subir de légères modification au programme
précédent (Figures) on peut le l'incorporer dans une page Web de façon suivante : on édite un fichier texte de nom quelconque (default.htm) contenant le code HTML suivant :
n Puis il suffit de lancer default.htm avec un navigateur web.
Daniel Tschirhart : Programmation Java V1.37
93
Créations d'appletes JavaCréations d'appletes Javan Pour créer un applet il faut :
1. Dériver la classe principale de l'application de la classe Applet.
2. Ne instancier d'objets Frame, un applet utilise la fenêtre (frame) du navigateur
3. Définir une fonction init (non statique) à la place de main.
4. Préciser la mise en page de la fenêtre par SetLayoutcontrairement à une fenêtre Frame où l'appel à SetLayout est réalisé dans la classe Frame.
Daniel Tschirhart : Programmation Java V1.37
94
Créations d'applets Java (2)Créations d'applets Java (2)
importer java.applet
dériver la classe de Applet
IMPORTANT :préciser la mise en page (implicite dans un frame mais pas dans un applet)
définir une fonction init à la place de main
définir la couleur du fond (facultatif)
Exemple FigureApplet
Daniel Tschirhart : Programmation Java V1.37
95
Test de l'appleteTest de l'appleten Un applet peut être
testé :n soit dans le navigateur
en créant une page htmln soit directement avec le
programme appletviewer fourni avec le SDK
Exemple FigureApplet
Daniel Tschirhart : Programmation Java V1.37
96
Créations d'appletes Java : exemple 2Créations d'appletes Java : exemple 2
n Pour le convertisseur Euro-Dollar1. Dériver la classe principale de l'application de la
classe Applet.2. Ne instancier d'objets Frame, un applet utilise la
fenêtre (frame) du navigateur 3. Définir une fonction init (non statique) à la place
de main.4. Ne pas implémenter l'interface WindowListener et
les gestionnaires associés.
Exemple AppletCalculetteEuro
Daniel Tschirhart : Programmation Java V1.37
97
Sécurité des appletesSécurité des appletes
n Une applete ne peutn ni accéder aux périphériques de stockage
locaux, n ni au serveur dont il est l’origine.
Daniel Tschirhart : Programmation Java V1.37
98
Les applications Java Les applications Java WebStartWebStart
n Une application Java WebStart est une application chargée depuis le serveur distant mais avec les possibilités d’une application classique.
n Pour accéder aux périphériques de stockage locaux et au serveur dont il est l’origine, l’application doit être signée.
Daniel Tschirhart : Programmation Java V1.37
99
Création d’une application Création d’une application Java WebStartJava WebStart
n A partir d’une application java classique (console, ou fenêtrée) faire une archive JAR
n Créer un fichier de lancement. C’est un fichier texte d’extension jnlp. Par exemple pour le QCM de type QUIZ on définit le fichier suivant quiz.jnlpcontenant (en gras les lignes à paramétrer):
Daniel Tschirhart : Programmation Java V1.37
100
Fichier JNLPFichier JNLP<?xml version="1.0" encoding="utf-8"?><jnlp spec="1.0"
codebase="http://daniel.tschirhart.free.fr/qcmprog" href="quiz.jnlp"><information><title>Quiz</title><vendor>Daniel Tschirhart</vendor><icon href=" "/><offline-notallowed/>
</information><resources> <jar href="squiz.jar"/> <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
</resources><security> <all-permissions/>
</security><application-desc main-class="s"/>
</jnlp>
Daniel Tschirhart : Programmation Java V1.37
101
Générer une clé pour signer Générer une clé pour signer l’applicationl’application
n L’opération est réalisée avec l’utilitaire keytool fourni avec le JDK :
keytool -genkey -validity 3650 -alias signature -keystore signatureStore
n La clé possède ici une durée de validité de 10 ans (3650), elle est mémorisée dans le magasin signatureStore. Cette clé peut signer un nombre illimité d’applications
Daniel Tschirhart : Programmation Java V1.37
102
Signer l'applicationSigner l'applicationn Signer l’application avec jarsigner
fourni avec le JDKJarsigner -keystore SignatureStore
-signedjar squiz.jar quizpro.jar signaturen On précise
n le magasin où est la clé est mémorisée, n le nom du fichier une fois signé (ici squiz.jar) n le nom de l’application à signer (ici
quizpro.jar).
Daniel Tschirhart : Programmation Java V1.37
103
Mise en place de l'applicationMise en place de l'application
n Copier sur le site Web le fichier jnlp et le fichier jar signé.
n Préciser le lien du fichier jnlp dans la page Web de votre site.
Daniel Tschirhart : Programmation Java V1.37
104
Création d’une IHM avec Création d’une IHM avec Visual EditorVisual Editor
n Visual Editor est un plugin d’éclipsen VE permet de créer facilement des IHM
mais nécessite cependant de renseigner le code à la main.
Daniel Tschirhart : Programmation Java V1.37
105
Création d’une IHM avec VECréation d’une IHM avec VE1. Créer un projet de type Java2. Sélectionner le nom du projet dans l’arborescence des
projets et ajouter une classe avec VE (clic droit : Nouveau/Autre/Java/VisualClass)
3. Choisir le type de style (Swing, AWT) et la classe parente (par exemple Frame pour AWT, Applet pour une applet).
4. Cocher créer : public static void main(String[] arg) (!!! pas pour les applets). Nota : pour les applications conséquentes, il vaut mieux créer une classe à part.
5. Donner un nom à la classe et validerVE créé le code source correspondant et affiche le modèle de fenêtre que vous avez choisi.
Daniel Tschirhart : Programmation Java V1.37
106
Création d’une IHM avec VE Création d’une IHM avec VE (2)(2)6. Modifier l’instruction d’import en mettant une * à la
place du nom de la classe :Exemple :
import java.awt.Frame; -> import java.awt.*;
7. Dans public static void main, instancier la classe gérant l’IHM, et afficher la fenêtre.Exemple : si la classe s’appelle Ihm écrire :new Ihm().setVisible(true);
8. Définir éventuellement la couleur d’arrière plan de la fenêtre : Exemple :this.setBackground(Color.ORANGE);
Daniel Tschirhart : Programmation Java V1.37
107
Mise en place des Mise en place des gestionnaires de fenêtregestionnaires de fenêtre9. Sélectionner la fenêtre, puis clic droit. A ce
niveau vous pouvez :a. Définir le titre de la fenêtre,b. Définir le mode la disposition des composants sur la
fenêtre : Set Layout -> choisir null pour avoir toute liberté de disposition.
c. Définir un gestionnaire d’événement.10. Définir le gestionnaire WindowsClosing sous
peine de ne pas pouvoir arrêter l’application : remplacer System.out.println("windowClosing()");parSystem.exit(0);
11. Tester l'application.
Daniel Tschirhart : Programmation Java V1.37
108
Classe anonymeClasse anonyme
n VE utilise une possibilité de Java de créer des classes anonymes. Cette possibilité est utilisée pour l'abonnemnt d'un contrôle à un événement.
n Pour abonner une classe à une contrôle il faut préciser la classe à abonner, et une fonction de signature particulière situé cette la classe.
Daniel Tschirhart : Programmation Java V1.37
109
Abonner un écouteur dans une Abonner un écouteur dans une classe anonymeclasse anonyme
this.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){
System.exit(0);}}
);
Classe anonymeEcouteurSource de l'événement
Instanciation de la classe anonyme Classe héritée
Daniel Tschirhart : Programmation Java V1.37
110
Ajout des contrôles dans le Ajout des contrôles dans le fenêtrefenêtre
11. A droite de la fenêtre d’éclipse, cliquer sur Palette, dans le menu choisir le type de contrôle et cliquer sur la punaise pour fixer ce choix.
12. Mettre en place les contrôles de votre application, et leurs gestionnaires d’événements associés en sélectionnant le contrôle dans la palette et en dessinant le contrôle dans la fenêtre.
13. Personnaliser les contrôles ensélectionnant le contrôle puis enouvrant l'onglet de propriétés.