l’api graphique de java -...

111
L’API Graphique de Java L’API Graphique de Java Daniel Tschirhart : Programmation Java V1.37

Upload: donhu

Post on 18-Feb-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

L’API Graphique de JavaL’API Graphique de Java

Daniel Tschirhart : Programmation Java V1.37

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

30

TextArea :TextArea :constructeursconstructeurs

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

35

FileDialogFileDialog : exemple : exemple

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

48

Code completCode complet

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

51

IllustrationIllustration

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

54

Exemple completExemple complet

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

91

La fenêtre finaleLa fenêtre finale

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.

Daniel Tschirhart : Programmation Java V1.37

111

Personalisation des contrôles:Personalisation des contrôles:exemple de fenêtre de propriétesexemple de fenêtre de propriétes