Abonnement

publicité
L’API Graphique de Java
Daniel Tschirhart : Programmation Java V1.37
Daniel Tschirhart : Programmation Java V1.37
AWT
Java 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.
2
Daniel Tschirhart : Programmation Java V1.37
Swing
Java 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».
3
Daniel Tschirhart : Programmation Java V1.37
Classes AWT
n
Les principales
classes sont :
n
n
n
Canvas qui permet
de dessiner dans un
cadre de fenêtre
Frame qui permet
d’afficher une fenêtre
Graphics qui fourni
l’accès aux outils de
dessin.
4
Daniel Tschirhart : Programmation Java V1.37
Communication des actions utilisateurs à la fenêtre
n
Les actions utilisateurs et système sont transmis à un écouteur via
un mécanisme d’abonnement.
Dans l’application
5
Daniel Tschirhart : Programmation Java V1.37
Événements dans java
n
Java distingue deux types d’événements :
n
n
n
Les événements liés à la fenêtre : essentiellement
les boutons
Les événements liées à des composants placés
dans la fenêtre : contrôles (boutons, listes, cases à
cocher …)
La communication d’un événement à
l’application se fait par un mécanisme
d’abonnement
6
Daniel Tschirhart : Programmation Java V1.37
Création d’une fenêtre
Il y a deux méthodes pour dessiner une fenêtre :
n
1.
2.
En instanciant un objet de la classe Frame
En dérivant une classe de la classe Frame
Les deux possibilités seront mis en œuvre à travers une
calculette Euro et un mini système graphique
n
n
n
Avec la calculette nous utiliserons la méthode 1 et nous verrons
comment gérer des zones d'édition,
Dans le mini système graphique utiliserons la méthode 2 et nous
verrons comment dessiner et gérer des boutons,
7
Daniel Tschirhart : Programmation Java V1.37
Exemple Calculette1
Création d'un fenêtre par
dérivation de la classe Frame
Dérive de Frame
Affiche la
fenêtre
8
Daniel Tschirhart : Programmation Java V1.37
Création d'un fenêtre par dérivation de la
classe Frame : exemple calculette euro
Contrôle label
n
Contrôle d’édition
La calculette fonction de façon suivante :
n
n
Toute frappe dans la zone Dollar provoque la conversion dans la
zone Euros
Toute frappe dans la zone Euros provoque la conversion dans la
zone Dollar
9
Daniel Tschirhart : Programmation Java V1.37
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 Scrollbar
Contrôle List
10
Daniel Tschirhart : Programmation Java V1.37
Positionnement des contrôles
n
Les contrôles sont positionnés dans la fenêtre suivant l’ordre donné
par setLayout auquel on passe un objet de classe LayoutManager
pouvant prendre les valeur suivantes :
n FlowLayout : aligne les contrôles de gauche à droite et de haut en bas
n GridLayout : aligne les contrôles suivant une grille
n BorderLayout : aligne les contrôles suivant des coordonnées
géographiques (nord, sud, est, ouest)
11
Daniel Tschirhart : Programmation Java V1.37
Les labels
n
n
Les labels sont des zones de texte pouvant être lus ou écrits par
programmes. Les labels ne génèrent aucun événement.
Mise en place d'un label
Facultatif
Ajout du label dans la fenêtre
12
Daniel Tschirhart : Programmation Java V1.37
Les labels :
principales méthodes
13
Daniel Tschirhart : Programmation Java V1.37
Exemple Calculette2
Les zones d'édition
n
n
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, ...).
Mise en place d'une zone d'édition
Taille de la zone en caractères
Ajout de la zone dans la fenêtre
14
Daniel Tschirhart : Programmation Java V1.37
Les zones d'édition :
principaux constructeurs
15
Daniel Tschirhart : Programmation Java V1.37
Les zones d'édition :
principales méthodes
16
Daniel Tschirhart : Programmation Java V1.37
Les boutons
n
Les boutons sont des éléments d'IHM utilisés généralement pour
valider des actions.
17
Daniel Tschirhart : Programmation Java V1.37
Les boutons :
principales méthodes
18
Daniel Tschirhart : Programmation Java V1.37
Les cases à cocher
n
Les cases à cocher permettent de choisir de valider ou non des
éléments quelconques.
19
Daniel Tschirhart : Programmation Java V1.37
Les cases à cocher :
constructeurs
20
Daniel Tschirhart : Programmation Java V1.37
Les cases à cocher :
principales méthodes
21
Daniel Tschirhart : Programmation Java V1.37
Les combos
n
Les combo permettent d'effectuer un choix parmi n éléments.
22
Daniel Tschirhart : Programmation Java V1.37
Les combos :
Méthodes et constructeur
23
Daniel Tschirhart : Programmation Java V1.37
Les combos :
Méthodes principales
24
Daniel Tschirhart : Programmation Java V1.37
Les boites à listes
n
Les boites à listes permettent de mémoriser des chaines de
caractères. Cet élément est par exemple utilisé dans la calculette
complexe.
25
Daniel Tschirhart : Programmation Java V1.37
Les boites à listes :
constructeurs
26
Daniel Tschirhart : Programmation Java V1.37
Les boites à listes :
principales méthodes (1)
27
Daniel Tschirhart : Programmation Java V1.37
Les boites à listes :
principales méthodes (1)
28
Daniel Tschirhart : Programmation Java V1.37
TextArea
n
Un TextArea une zone d'édition multi lignes.
29
Daniel Tschirhart : Programmation Java V1.37
TextArea :
constructeurs
30
Daniel Tschirhart : Programmation Java V1.37
TextArea :
principales méthodes
31
Daniel Tschirhart : Programmation Java V1.37
FileDialog
n
FileDialog est un contrôle permettant l'accès aux fichiers et répertoires.
32
Daniel Tschirhart : Programmation Java V1.37
FileDialog : constructeurs
33
Daniel Tschirhart : Programmation Java V1.37
FileDialog : principales méthodes
34
Daniel Tschirhart : Programmation Java V1.37
FileDialog : exemple
35
Daniel Tschirhart : Programmation Java V1.37
Caractéristiques communes
aux contrôles : couleur
n
Couleur avant plan et arrière plan
n
n
setForeground
setBackground
label1.setForeground(Color.RED);
this.setBackground(new Color(0xE0F8FE));
bouton.setBackground();
bouton.setBackground(Color.PINK);
bouton.setForeground(Color.BLUE);
36
Daniel Tschirhart : Programmation Java V1.37
Caractéristiques communes
aux contrôles : taille
n
Taille du contrôle (Largeur, Hauteur)
n
setSize
this.setSize(763, 373);
bouton.setSize(100, 30);
37
Daniel Tschirhart : Programmation Java V1.37
Caractéristiques communes
aux contrôles : nom
n
Nom interne
n
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.
38
Daniel Tschirhart : Programmation Java V1.37
Caractéristiques communes aux
contrôles : position et dimension
n
Permet de définir la position et la taille du
contrôle dans la fenêtre
n
setBounds
bouton.setBounds(new Rectangle(x, y, largeur, hauteur));
.
39
Daniel Tschirhart : Programmation Java V1.37
Caractéristiques communes
aux contrôles : police
n
Police
n
setFont
bouton.setFont(new Font("",Font.BOLD,20));
bouton.setFont(new Font("Monospaced",
Font.PLAIN |
Font.BOLD |
Font.ITALIC,20));
S'applique à tous les contrôles
40
Daniel Tschirhart : Programmation Java V1.37
Exemple CalculetteEuro!!!
Gestionnaire événements
n
n
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 sousjacent et par la machine Java.
Pour que l'événement remonte vers
l'application, l'objet contrôlé doit abonner
une ou plusieurs fonctions à ce celui-ci.
La fonction abonnée s'appelle un
gestionnaire d'événement ou un écouteur.
41
Daniel Tschirhart : Programmation Java V1.37
Types d'événements
(non exhaustif)
n
Java propose des
abonnements à
une grande variété
d’événements.
42
Daniel Tschirhart : Programmation Java V1.37
Exemple CalculetteEuro!!!
Syntaxe des abonnements
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érateur
d'événements
n
< méthode> : add<nom événement>Listener
Exemple : addKeyListener
n
<ref obj à abonner> : référence de l'objet abonné.
n
n
Si les gestionnaires d'événements appartiennent à la classe abonnante
la référence de l'objet à abonner est this
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.
43
Daniel Tschirhart : Programmation Java V1.37
Exemple Calculette1
Exemple d'abonnement
Source des événements
Type d'événement
Référence de l'objet abonné
44
Daniel Tschirhart : Programmation Java V1.37
Exemple Calculette1
Exemple d'abonnement
Source des événements
Type d'événement
Référence de l'objet abonné
Classe abonnée
45
Daniel Tschirhart : Programmation Java V1.37
Exemple CalculetteEuro!!!
Les écouteurs
n
n
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.
Un écouteur possède une signature particulière qui doit
être absolument respectée.
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.
46
Daniel Tschirhart : Programmation Java V1.37
Exemple
• Dériver la classe comportant le contrôle, de l'interface où sont
situées les signatures des écouteurs.
• Définir dans cette la classe les fonctions présentes dans l'interface
• Dans l'objet source de l'événement,
• abonner les écouteurs en précisant l'objet qui les contient.
source des événements
référence de l'objet où sont situés les écouteurs
référence de la source des événements
47
Daniel Tschirhart : Programmation Java V1.37
Code complet
48
Daniel Tschirhart : Programmation Java V1.37
Problèmes posés par cette
mé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.
49
Daniel Tschirhart : Programmation Java V1.37
Amélioration de la méthode
précédente
n
n
n
Dériver d'une l'interface comportant
des écouteurs et implémenter tous
les écouteurs par des fonctions vides.
Définir cette classe comme abstraite
pour interdire toute instanciation
directe.
Dériver cette classe et définir
uniquement les écouteurs présentant
un intérêt.
50
Daniel Tschirhart : Programmation Java V1.37
Illustration
51
Daniel Tschirhart : Programmation Java V1.37
Explications
n
La classe abstraite (par exemple
WindowAdapter) hérite d'une l’interface (par
exemple WindowListener).
n
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).
La classe WindowAdapter est rendue abstraite
(par le préfixe abstract) pour interdire toute
instanciation directe de la classe.
52
Daniel Tschirhart : Programmation Java V1.37
Mise en place de l'écouteur
• Dériver la classe la classe abstraite comportant les écouteurs
(ici WindowAdapter
WindowAdapter)
) et surcharger un ou plusieurs écouteurs.
• Dans l'objet source de l'événement,
• abonner l'écouteur en précisant l'objet où il se trouve.
source des événements
référence de l'objet où sont situés les écouteurs
référence de la source des événements
53
Daniel Tschirhart : Programmation Java V1.37
Exemple complet
54
Daniel Tschirhart : Programmation Java V1.37
Exemple CalculetteEuro!!!
Inconvénient de cette méthode
n
n
Lourdeur si l'interface ne comporte que très peu
d'écouteurs.
Necessité de définir la classe surchargeant la classe
abstraite.
55
Daniel Tschirhart : Programmation Java V1.37
Définir un écouteur dans une
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() { }
}
56
Daniel Tschirhart : Programmation Java V1.37
Instancier une classe anonyme
n
n
Instancier la classe anonyme précédente
s’écrit :
new Y()
{
public void uneFonctionQuiNeFaitRien() {
}
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.
57
Daniel Tschirhart : Programmation Java V1.37
Abonner un écouteur dans une
classe anonyme
Instanciation de la classe anonyme
Classe héritée
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
Source de l'événement
Ecouteur
Classe anonyme
58
Daniel Tschirhart : Programmation Java V1.37
Quels événements pour quels
contrôles ?
n
n
n
n
Le choix d'un événements associé à un contrôle est
une question de logique..
La lecture de la documentation associée à la classe
fournit dans le cas général le nom du gestionnaire le
plus adapté.
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 !
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.
59
Daniel Tschirhart : Programmation Java V1.37
Evénements liés à la fenêtre
n
Un événement peut se
déclencher par :
n
n
n
n
n
n
n
L'activation de la fenêtre
La fermeture effective de la
fenêtre
La fermeture de la fenêtre
La désactivation de la
fenêtre
Le passage de l'état
d'icône à l'état ouvert
Le passage à l'état d'icône
L'ouverture de la fenêtre
60
Daniel Tschirhart : Programmation Java V1.37
Abonnement
n
Abonnement par : addWindowListerner
n
Méthodes à abonner définies :
n
n
n
n
en implémentant l'interface WindowListerner
ou
en dérivant la classe WindowAdapter
Méthodes abonnées
n
n
n
n
n
n
n
public
public
public
public
public
public
public
void
void
void
void
void
void
void
windowClosing(WindowEvent e)
windowActivated(WindowEvent e)
windowClosed(WindowEvent e)
windowDeactivated(WindowEvent e)
windowDeiconified(WindowEvent e)
windowIconified(WindowEvent e)
windowOpened(WindowEvent e)
61
Daniel Tschirhart : Programmation Java V1.37
Exemple Calculette1
Définition des gestionnaires de
fenêtre à l'aide de l'interface
Implémente l'interfaceWindowListener
(Déclare les méthodes abonnées)
Abonner aux gestionnaires de la fenêtre
Méthodes abonnées
Ferme la fenêtre
62
Daniel Tschirhart : Programmation Java V1.37
Définition des gestionnaires de
fenêtre à l'aide d'une classe
63
Daniel Tschirhart : Programmation Java V1.37
Exemple Calculette1
Remarque sur la syntaxe de
l'abonnement
Source des événements
Abonner le gestionnaires de la fenêtre
Référence de l'objet abonné
Classe abonnée
64
Daniel Tschirhart : Programmation Java V1.37
Événements déclenchés par
l‘appui d’un bouton
n
Interface à dériver ActionListener
Abonnement par addActionListener
n
Ecouteur
n
public void actionPerformed(ActionEvent arg)
n
Détermination du bouton actionné
65
Daniel Tschirhart : Programmation Java V1.37
Evénements déclenchés par
l'activation du contrôle
n
Peut se déclencher
par :
n
n
Le fait qu'un
contrôle soit actif
Le fait qu'un
contrôle devienne
inactifs
66
Daniel Tschirhart : Programmation Java V1.37
Abonnement
n
Abonnement par : addFocusListener
n
Méthodes à abonner définies :
n
n
en implémentant dans l'interface FocusListerner
n
ou
n
en dérivant la classe FocusAdapter
Méthodes abonnées
n
n
public void focusLost(FocusEvent e)
public void focusGained(FocusEvent e)
67
Daniel Tschirhart : Programmation Java V1.37
Exemple CalculetteEuro!!!
Exemple d'abonnement et de
définition d'un gestionnaires de focus
68
Daniel Tschirhart : Programmation Java V1.37
Evénements dus au claviers
n
Peut se déclencher
par :
n
n
n
Une touche enfoncée
Une touche relâchée
Une touche frappée
69
Daniel Tschirhart : Programmation Java V1.37
Abonnement
n
Abonnement par : addKeyListener
n
Méthodes à abonner définies :
n
n
n
n
en implémentant l'interface KeyListerner
ou
en dérivant la classe KeyAdapter
Méthodes abonnées
70
Daniel Tschirhart : Programmation Java V1.37
Exemple CalculetteEuro!!!
Exemple de gestionnaire d'événements
pour le clavier
71
Daniel Tschirhart : Programmation Java V1.37
Evénements dus au mulot
n
Peut se déclencher par :
n
n
n
n
n
n
n
Clic bouton
Curseur entrant dans la
zone active
Curseur sortant de la la
zone active
Clic enfoncé
Clic relâché
Zone de donnée déplacée
à l'aide de la souris
Souris déplacée
72
Daniel Tschirhart : Programmation Java V1.37
Abonnement mouse
n
Abonnement par : addMouseListener
n
Méthodes à abonner définies :
n
n
n
n
en implémentant l'interface MouseListerner
ou
en dérivant la classe MouseAdapter
Méthodes abonnées
73
Daniel Tschirhart : Programmation Java V1.37
Abonnement mouse motion
n
Abonnement par : addMouseMotionListener
n
Méthodes à abonner définies :
n
n
n
n
en implémentant l'interface MouseMotionListerner
ou
dérivant la classe MouseMotionAdapter
Méthodes abonnées
74
Evénements déclenchés par le
changement de propriété d'un
contrôle
Daniel Tschirhart : Programmation Java V1.37
n
Peut se déclencher par :
n
n
n
n
n
n
n
Le passage en arrière plan
Le changement
d'orientation
L'activation du contrôle
Le changement de police
Le passage au premier plan
La relocalisation du contrôle
Le passage à l'état visible ou
caché
75
Evénements déclenchés par le
changements d'aspect d'un
contrôle
Daniel Tschirhart : Programmation Java V1.37
n
Peut se déclencher
par :
n
n
n
n
Le passage à l'état
invisible du contrôle
Le déplacement du
contrôle
Le redimensionnement
du contrôle
Le passage à l'état
visible du contrôle.
76
Daniel Tschirhart : Programmation Java V1.37
Abonnement
n
Abonnement par : addComponentListener
n
Méthodes à abonner définies :
n
n
n
n
en implémentant l'interface ComponentListerner
ou
en dérivant la classe ComponentAdapter
Méthodes abonnées
77
Daniel Tschirhart : Programmation Java V1.37
Evénements déclenchés par
l'ajout d'un contrôle
n
Peu se déclencher
part :
n
n
Le fait qu'un
contrôle soit ajouté
à la fenêtre
Le fait qu'un
contrôle soit retiré
de la fenêtre
78
Daniel Tschirhart : Programmation Java V1.37
Abonnement
n
Abonnement par : addContainerListener
n
Méthodes à abonner définies :
n
n
n
n
en implémentant l'interface ContainerListerner
ou
dérivant la classe ComponentAdapter
Méthodes abonnées
79
Evénements déclenchés par le
changement de position du
contrôle sur l'axe Z
Daniel Tschirhart : Programmation Java V1.37
n
Peut se déclencher
par :
n
n
Le fait que l'ordre
de l'axe Z soit
modifié.
Le fait que
l'élément en
position Z-1 soit
déplacé ou retaillé.
80
Daniel Tschirhart : Programmation Java V1.37
Abonnement
n
Abonnement par : addHierarchyListener
n
Méthodes à abonner définies :
n
n
n
n
en implémentant l'interface HierarchyListener
ou
dérivant la classe HierarchyAdapter
Méthode abonnée
81
Daniel Tschirhart : Programmation Java V1.37
Exemple Figures1
Création d’une fenêtre par
instanciation de la classe frame
Pour le moment on ne peut ni dessiner, ni fermer la fenêtre
82
Daniel Tschirhart : Programmation Java V1.37
Mise en place du mécanisme de
fermeture d’une fenêtre
Exemple Figures2
83
Daniel Tschirhart : Programmation Java V1.37
Dessiner dans une fenêtre
n
n
Pour dessiner dans une fenêtre il faut
sous classer Canvas.
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
n
automatiquement chaque fois que le contenu de la
fenêtre est altéré
Manuellement chaque fois que l’on appelle la fonction
repaint
84
Daniel Tschirhart : Programmation Java V1.37
Exemple Figures3
Dessiner dans une fenêtre (2)
X, Y : centre du cercle
trace un cercle tangent au bord supérieur
gauche de la fenêtre
85
Daniel Tschirhart : Programmation Java V1.37
Exemple Figures3
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
86
Daniel Tschirhart : Programmation Java V1.37
Ajouter des éléments IHM
n
n
Les éléments IHM les plus courants sont les boutons.
Un bouton est créé en instanciant la classe Button
n
n
n
n
Pour gérer des boutons, le plus simple est de créer une
classe encapsulant les butons (classe MesBoutons).
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.
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.
Pour qu'un bouton puisse agir sur un objet, il faut
transmettre l’objet au constructeur de la classe gérant les
boutons.
87
Daniel Tschirhart : Programmation Java V1.37
Exemple Figures
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
88
Daniel Tschirhart : Programmation Java V1.37
Ajouter des éléments IHM (3)
Créer des composants IHM : exemple de boutons
n
Un bouton est crée en instanciant la classe Button
n
n
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.
Un bouton produit lorsqu’il est actionné plusieurs événements
(appuyé, relâché, …).
n
n
n
n
Ces événements sont transmis à une fonction de rappel
actionPerformed situé dans l’interface ActionListener (c’est sa
seule fonction).
Pour utiliser la fonction de rappel actionPerformed il faut
l’implémenter dans la classe MesBoutons.
La fonction addActionListener permet de relier la fonction de rappel
à un bouton
Dans la fonction de rappel ne pas oublier de forcer la mise à jour
de la fenêtre le dessin à été modifié.
89
Daniel Tschirhart : Programmation Java V1.37
Exemple Figures
Ajouter des éléments IHM
(4)
Sous classer Panel et implémenter l’interface ActionListener
Récupérer l’objet dessin via le constructeur
Créer les boutons et les enregistrer dans Panel
Abonner à actionPerformed
Réaliser les actions associés aux
boutons
Ne pas oublier de mettre
à jour la fenêtre
90
Daniel Tschirhart : Programmation Java V1.37
La fenêtre finale
91
Daniel Tschirhart : Programmation Java V1.37
Les appletes Java
n
n
n
Un applet est un programme exécuté dans un navigateur Web
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 :
Puis il suffit de lancer default.htm avec un navigateur web.
92
Daniel Tschirhart : Programmation Java V1.37
Créations d'appletes Java
n
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 SetLayout
contrairement à une fenêtre Frame où l'appel à
SetLayout est réalisé dans la classe Frame.
93
Daniel Tschirhart : Programmation Java V1.37
Exemple FigureApplet
Créations d'applets Java (2)
importer java.applet
dériver la classe de Applet
définir une fonction init à la place de main
définir la couleur du fond (facultatif)
IMPORTANT :
préciser la mise en page (implicite dans
un frame mais pas dans un applet)
94
Daniel Tschirhart : Programmation Java V1.37
Exemple FigureApplet
Test de l'applete
n
Un applet peut être
testé :
n
n
soit dans le navigateur
en créant une page html
soit directement avec le
programme appletviewer
fourni avec le SDK
95
Daniel Tschirhart : Programmation Java V1.37
Exemple AppletCalculetteEuro
Créations d'appletes Java : exemple 2
n
Pour le convertisseur Euro-Dollar
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. Ne pas implémenter l'interface WindowListener et
les gestionnaires associés.
96
Daniel Tschirhart : Programmation Java V1.37
Sécurité des appletes
n
Une applete ne peut
n
n
ni accéder aux périphériques de stockage
locaux,
ni au serveur dont il est l’origine.
97
Daniel Tschirhart : Programmation Java V1.37
Les applications Java
WebStart
n
n
Une application Java WebStart est une
application chargée depuis le serveur
distant mais avec les possibilités d’une
application classique.
Pour accéder aux périphériques de
stockage locaux et au serveur dont il
est l’origine, l’application doit être
signée.
98
Daniel Tschirhart : Programmation Java V1.37
Création d’une application
Java WebStart
n
n
A partir d’une application java classique
(console, ou fenêtrée) faire une archive
JAR
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.jnlp
contenant (en gras les lignes à
paramétrer):
99
Daniel Tschirhart : Programmation Java V1.37
Fichier 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>
100
Daniel Tschirhart : Programmation Java V1.37
Générer une clé pour signer
l’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
101
Daniel Tschirhart : Programmation Java V1.37
Signer l'application
Signer l’application avec jarsigner
fourni avec le JDK
n
Jarsigner -keystore SignatureStore
-signedjar squiz.jar quizpro.jar signature
On précise
n
n
n
n
le magasin où est la clé est mémorisée,
le nom du fichier une fois signé (ici squiz.jar)
le nom de l’application à signer (ici
quizpro.jar).
102
Daniel Tschirhart : Programmation Java V1.37
Mise en place de l'application
n
n
Copier sur le site Web le fichier jnlp et le
fichier jar signé.
Préciser le lien du fichier jnlp dans la
page Web de votre site.
103
Daniel Tschirhart : Programmation Java V1.37
Création d’une IHM avec
Visual Editor
n
n
Visual Editor est un plugin d’éclipse
VE permet de créer facilement des IHM
mais nécessite cependant de
renseigner le code à la main.
104
Daniel Tschirhart : Programmation Java V1.37
Création d’une IHM avec VE
1.
2.
3.
4.
5.
Créer un projet de type Java
Sélectionner le nom du projet dans l’arborescence des
projets et ajouter une classe avec VE (clic droit :
Nouveau/Autre/Java/VisualClass)
Choisir le type de style (Swing, AWT) et la classe parente
(par exemple Frame pour AWT, Applet pour une applet).
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.
Donner un nom à la classe et valider
VE créé le code source correspondant et affiche le
modèle de fenêtre que vous avez choisi.
105
Daniel Tschirhart : Programmation Java V1.37
Création d’une IHM avec VE
(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.
8.
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);
Définir éventuellement la couleur d’arrière plan de
la fenêtre :
Exemple :
this.setBackground(Color.ORANGE);
106
Daniel Tschirhart : Programmation Java V1.37
Mise en place des
gestionnaires de fenêtre
9.
Sélectionner la fenêtre, puis clic droit. A ce
niveau vous pouvez :
a.
b.
c.
Définir le titre de la fenêtre,
Définir le mode la disposition des composants sur la
fenêtre : Set Layout -> choisir null pour avoir toute
liberté de disposition.
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()");
par
System.exit(0);
11. Tester l'application.
107
Daniel Tschirhart : Programmation Java V1.37
Classe anonyme
n
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.
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.
108
Daniel Tschirhart : Programmation Java V1.37
Abonner un écouteur dans une
classe anonyme
Instanciation de la classe anonyme
Classe héritée
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
Source de l'événement
Ecouteur
Classe anonyme
109
Daniel Tschirhart : Programmation Java V1.37
Ajout des contrôles dans le
fenê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 en
sélectionnant le contrôle puis en
ouvrant l'onglet de propriétés.
110
Daniel Tschirhart : Programmation Java V1.37
Personalisation des contrôles:
exemple de fenêtre de propriétes
111
Téléchargement