Cours sur l'IHM et POO en Java
Cours sur l'IHM et POO en Java
HOMME-MACHINE
L'idée de base de la programmation orientée objet est de rassembler dans une même entité appelée objet les
données et les traitements qui s'y appliquent.
4
Rappels de POO (JAVA)
Concept de classe
• Une classe est le support de l'encapsulation : c'est un ensemble de données et de fonctions regroupées dans
une même entité. Une classe est une description abstraite d'un objet. Les fonctions qui opèrent sur les
données sont appelées des méthodes. Instancier une classe consiste à créer un objet sur son modèle. Entre
classe et objet il y a, en quelque sorte, le même rapport qu'entre type et variable.
• Java est un langage orienté objet : tout appartient à une classe sauf les variables de types primitives.
• Pour accéder à une classe il faut en déclarer une instance de classe ou objet.
• Une classe comporte sa déclaration, des variables et les définitions de ses méthodes.
• Une classe se compose de deux parties : un en-tête et un corps. Le corps peut être divisé en 2 sections : la
déclaration des données et des constantes et la définition des méthodes. Les méthodes et les données sont
pourvues d'attributs de visibilité qui gèrent leur accessibilité par les composants hors de la classe.
5
Rappels de POO (JAVA)
Syntaxe de déclaration d'une classe
abstract la classe contient une ou des méthodes abstraites, qui n'ont pas de définition explicite. Une
classe déclarée abstract ne peut pas être instanciée : il faut définir une classe qui hérite de cette
classe et qui implémente les méthodes nécessaires pour ne plus être abstraite.
final la classe ne peut pas être modifiée, sa redéfinition grâce à l'héritage est interdite. Les classes
déclarées final ne peuvent donc pas avoir de classes filles.
private la classe n'est accessible qu'à partir du fichier où elle est définie
public La classe est accessible partout
6
Rappels de POO (JAVA)
Les objets
Les objets contiennent des attributs et des méthodes. Les attributs sont des variables ou des objets nécessaires
au fonctionnement de l'objet. En Java, une application est un objet. La classe est la description d'un objet. Un
objet est une instance d'une classe. Pour chaque instance d'une classe, le code est le même, seules les données
sont différentes à chaque objet.
Il est nécessaire de définir la déclaration d'une variable ayant le type de l'objet désiré. La déclaration
est de la forme nom_de_classe nom_de_variable
Exemple
MaClasse m;
String chaine;
Les variables de type objet que l'on déclare ne contiennent pas un objet mais une référence vers cet objet.
Lorsque l'on écrit c1 = c2 (c1 et c2 sont des objets), on copie la référence de l'objet c2 dans c1. c1 et c2 font
référence au même objet : ils pointent sur le même objet. L'opérateur == compare ces références. Deux objets
avec des propriétés identiques sont deux objets distincts :
Exemple :
Rectangle r1 = new Rectangle(100,50);
Rectangle r2 = new Rectangle(100,50);
if (r1 == r1) { ... } // vrai
if (r1 == r2) { ... } // faux
Pour comparer l'égalité des variables de deux instances, il faut munir la classe d'une méthode à cet effet : la
méthode equals() héritée de Object.
8
Rappels de POO (JAVA)
Les variables de classes
Elles ne sont définies qu'une seule fois quel que soit le nombre d'objets instanciés de la classe. Leur déclaration
est accompagnée du mot clé static
Exemple :
public class MaClasse() {
static int compteur = 0;
}
• L'appartenance des variables de classe à une classe entière et non à un objet spécifique permet de remplacer
le nom de la variable par le nom de la classe.
• Ce type de variable est utile pour, par exemple, compter le nombre d'instanciations de la classe.
9
Rappels de POO (JAVA)
La variable this
Cette variable sert à référencer dans une méthode l'instance de l'objet en cours d'utilisation. this est un objet
qui est égal à l'instance de l'objet dans lequel il est utilisé.
Exemple :
private int nombre;
public maclasse(int nombre) {
nombre = nombre; // variable de classe = variable en paramètre du constructeur
}
Exemple :
[Link] = nombre;
10
Rappels de POO (JAVA)
Modificateurs d'accès
11
Rappels de POO (JAVA)
Le mot clé static
Les variables d'instance sont des variables propres à un objet. Il est possible de définir une variable de classe qui
est partagée entre toutes les instances d'une même classe : elle n'existe donc qu'une seule fois en mémoire.
Une telle variable permet de stocker une constante ou une valeur modifiée tour à tour par les instances de la
classe. Elle se définit avec le mot clé static.
Exemple :
public class Cercle {
static float pi = 3.1416f;
float rayon;
public Cercle(float rayon) { [Link] = rayon; }
public float surface() { return rayon * rayon * pi;}
}
12
Rappels de POO (JAVA)
Le mot clé final
• Le mot clé final s'applique aux variables de classe ou d'instance ou locales, aux méthodes, aux paramètres
d'une méthode et aux classes. Il permet de rendre l'entité sur laquelle il s'applique non modifiable une fois
qu'elle est déclarée pour une méthode ou une classe et initialisée pour une variable.
• Une variable qualifiée de final signifie que la valeur de la variable ne peut plus être modifiée une fois que
celle-ci est initialisée.
• Lorsque le modificateur final est ajouté à une classe, il est interdit de créer une classe qui en hérite.
13
Rappels de POO (JAVA)
Le mot clé abstract
14
Rappels de POO (JAVA)
Les mots clés synchronized, volatile, et native
15
Rappels de POO (JAVA)
Les propriétés ou attributs
Les données d'une classe sont contenues dans des variables nommées propriétés ou attributs. Ce sont des
variables qui peuvent être des variables d'instances, des variables de classes ou des constantes.
• Une variable d'instance nécessite simplement une déclaration de la variable dans le corps de la classe.
• Les variables de classes sont définies avec le mot clé static
• Les constantes sont définies avec le mot clé final : leur valeur ne peut pas être modifiée une fois qu'elles sont
initialisées.
Exemple :
public class MaClasse {
public int valeur1 ;
int valeur2 ;
protected int valeur3 ;
private int valeur4 ;
static int compteur ;
final double pi=3.14 ;
}
16
Rappels de POO (JAVA)
Les méthodes
• Les méthodes sont des fonctions qui implémentent les traitements de la classe.
• Le type retourné peut être élémentaire ou correspondre à un objet. Si la méthode ne retourne rien, alors on
utilise void.
• Le type et le nombre d'arguments déclarés doivent correspondre au type et au nombre d'arguments
transmis.
Remarque :
La méthode main() de la classe principale d'une application doit être déclarée de la façon suivante :
Exemple :
public class MonApp1 {
public static void main(String[] args) {
[Link]("Bonjour");
}
}
17
Rappels de POO (JAVA)
Les méthodes
• La surcharge d'une méthode permet de définir plusieurs fois une même méthode avec des arguments
différents. Le compilateur choisi la méthode qui doit être appelée en fonction du nombre et du type des
arguments.
• Une méthode est surchargée lorsqu'elle exécute des actions différentes selon le type et le nombre de
paramètres transmis.
• Il est donc possible de donner le même nom à deux méthodes différentes à condition que les signatures de
ces deux méthodes soient différentes.
Exemple :
class affiche{
public void afficheValeur(int i) {
[Link](" nombre entier = " + i);
}
public void afficheValeur(float f) {
[Link](" nombre flottant = " + f);
}} 18
Rappels de POO (JAVA)
Les constructeurs
• La déclaration d'un objet est suivie d'une sorte d'initialisation par le moyen d'une méthode particulière
appelée constructeur pour que les variables aient une valeur de départ.
• Le constructeur suit la définition des autres méthodes excepté que son nom doit obligatoirement
correspondre à celui de la classe et qu'il n'est pas typé, pas même [Link] peut surcharger un constructeur.
• La définition d'un constructeur est facultative. Si aucun constructeur n'est explicitement défini dans la classe,
le compilateur va créer un constructeur par défaut sans argument.
Exemple :
Class MaClassee{
private int nombre;
19
Rappels de POO (JAVA)
Le destructeur
• Un destructeur permet d'exécuter du code lors de la libération, par le garbage collector, de l'espace mémoire
occupé par l'objet. En Java, les destructeurs appelés finaliseurs (finalizers), sont automatiquement invoqués
par le garbage collector.
• Pour créer un finaliseur, il faut redéfinir la méthode finalize() héritée de la classe Object.
20
Rappels de POO (JAVA)
Les accesseurs
L'encapsulation permet de sécuriser l'accès aux données d'une classe. Ainsi, les données déclarées private à
l'intérieur d'une classe ne peuvent être accédées et modifiées que par des méthodes définies dans la même
classe.
Un accesseur est une méthode publique qui donne l'accès à une variable d'instance privée. Par convention, les
accesseurs en lecture commencent par get et les accesseurs en écriture commencent par set.
Exemple :
private int valeur = 13;
public int getValeur(){
return(valeur);}
public void setValeur(int val) {
valeur = val;}
Remarque: Pour un attribut de type booléen, il est possible de faire commencer l'accesseur en lecture par is au
lieu de get.
21
Rappels de POO (JAVA)
L'héritage
L'héritage est un mécanisme qui facilite la réutilisation du code et la gestion de son évolution. Elle définit une
relation entre deux classes :
Grâce à l'héritage, les objets d'une classe fille ont accès aux données et aux méthodes de la classe parente et
peuvent les étendre. Les sous-classes peuvent redéfinir les variables et les méthodes héritées. Pour les variables,
il suffit de les redéclarer sous le même nom avec un type différent. Les méthodes sont redéfinies avec le même
nom, les mêmes types et le même nombre d'arguments, sinon il s'agit d'une surcharge.
22
Rappels de POO (JAVA)
L'héritage
• L'héritage successif de classes permet de définir une hiérarchie de classe qui se compose de super-classes et
de sous-classes. Une classe qui hérite d'une autre est une sous-classe et celle dont elle hérite est une super-
classe. Une classe peut avoir plusieurs sous-classes. Une classe ne peut avoir qu'une seule classe mère : il n'y
a pas d'héritage multiple en Java.
• Object est la classe parente de toutes les classes en Java. Toutes les variables et méthodes contenues dans
Object sont accessibles à partir de n'importe quelle classe car par héritages successifs toutes les classes
héritent d'Object.
On utilise le mot clé extends pour indiquer qu'une classe hérite d'une autre. En l'absence de ce mot réservé
associé à une classe, le compilateur considère la classe Object comme classe mère.
Exemple :
class Fille extends Mere { ... }
23
Rappels de POO (JAVA)
Redéfinition d'une méthode et polymorphisme
• La redéfinition d'une méthode héritée doit impérativement conserver la déclaration de la méthode parente
(type et nombre de paramètres, la valeur de retour et les exceptions propagées doivent être identiques).
• Si la signature de la méthode change, ce n'est plus une redéfinition mais une surcharge. Cette nouvelle
méthode n'est pas héritée : la classe mère ne possède pas de méthode possédant cette signature.
Le polymorphisme est la capacité, pour un même message de correspondre à plusieurs formes de traitements
selon l'objet auquel ce message est adressé.
Exemple : la classe Employe hérite de la classe Personne
Personne p = new Personne ("Dupond", "Jean");
Employe e = new Employe("Durand", "Julien", 10000);
p = e ; // ok : Employe est une sous-classe de Personne
Objet obj;
obj = e ; // ok : Employe hérite de Personne qui elle même hérite de Object
24
Rappels de POO (JAVA)
Les interfaces
Avec l'héritage multiple, une classe peut hériter en même temps de plusieurs super-classes. Ce mécanisme
n'existe pas en Java. Les interfaces permettent de mettre en oeuvre un mécanisme de remplacement.
Une interface est un ensemble de constantes et de déclarations de méthodes correspondant un peu à une
classe abstraite. C'est une sorte de standard auquel une classe peut répondre. Tous les objets qui se conforment
à cette interface (qui implémentent cette interface) possèdent les méthodes et les constantes déclarées dans
celle-ci. Plusieurs interfaces peuvent être implémentées dans une même classe.
Les interfaces se déclarent avec le mot clé interface et sont intégrées aux autres classes avec le mot clé
implements. Une interface est implicitement déclarée avec le modificateur abstract.
25
Rappels de POO (JAVA)
Les interfaces
Exemple :
interface AfficheType {
void afficherType();
}
• Les seules variables que l'on peut définir dans une interface sont des variables de classe qui doivent être
constantes : elles sont donc implicitement déclarées avec le modificateur static et final même si elles sont
définies avec d'autres modificateurs.
• Une classe peut implémenter une ou plusieurs interfaces tout en héritant de sa classe mère.
27
Rappels de POO (JAVA)
Exercice 1
Ecrire les classes représentées dans le diagramme suivant :
28
Rappels de POO (JAVA)
Exercice 2
Ecrire les classes représentées dans le diagramme suivant :
29
Chapitre II
Introduction à l’interaction
homme machine
Introduction aux Interfaces Homme‐Machine
Définitions :
• Interface: signifie la surface de contact, ou la frontière, entre deux corps ou deux régions
d’espace.
• IHM signifie : -Interface Homme – Machine
-Interactions Homme – Machine
Mais aussi …
-Communication Homme – Machine
-Dialogue Homme – Machine
-Interaction Personne – Machine
Introduction aux Interfaces Homme‐Machine
Définitions :
• L’interface homme‐machine est un ensemble de dispositifs matériels et logiciels permettant de
contrôler et de communiquer avec une machine.
• L’interaction homme‐machine est une action qui provoque une réaction perceptible. Elle
regroupe des notions telles que les clics souris, la frappe de touches, les pressions sur un écran
tactile, etc.
• Le dialogue Homme‐Machine est l'ensemble des échanges entre un utilisateur et une machine.
Ces échanges regroupent les manipulations avec un écran tactile, l’utilisation d'un microphone,
d'un scanner, d'une table à digitaliser, etc.
Introduction aux Interfaces Homme‐Machine
Domaine d’utilisation des IHM :
• Informatique:
• Programmation
• Génie logiciel
• Synthèse et reconnaissance de la parole, langue naturelle
• Intelligence artificielle, traitement d’images
• ...
• Psychologie cognitive
• Sciences de l’éducation, didactique
• Ergonomie cognitive, ergonomie des logiciels
• Communication, graphisme, audiovisuel, design
Introduction aux Interfaces Homme‐Machine
Domaine d’utilisation des IHM :
• Où l’homme exerce une action sur une machine pour trouver un résultat on
trouve l’IHM
• Médecine: chirurgie
• Téléformation
• Transport
• Industrie
• Transactions financières
• Commande de chaines de production
• Maintenance de processus complexes
• Bureautique
• ...
Introduction aux Interfaces Homme‐Machine
Qui conçoit les IHM? :
• Les 3 participants dans la conception des interfaces homme-machine sont:
• l'utilisateur: participant avec choix
• la machine: participant avec programme
• le concepteur: participant qui anticipe les choix possibles de l'utilisateur et les code dans un
programme
Introduction aux Interfaces Homme‐Machine
Caractéristiques des utilisateurs des IHM:
• Caractéristiques physiques
• Âge
• Handicap
• Caractéristiques psychologiques
• Visuel/auditif, logique/intuitif, analytique/synthétique…
• Connaissances et expériences
• Dans le domaine de la tâche (novice, expert, professionnel)
• En informatique, sur le système (usage occasionnel, quotidien)
• Caractéristiques socio‐culturelles
• Sens d'écriture
• Format des dates
• Signification des icônes, des couleurs (en occident : rouge = stop, en chine : rouge = joie, mariage)
Introduction aux Interfaces Homme‐Machine
Historique et évolution des IHM:
• 1945‐1956: Premiers ordinateurs ENIAC (1943) Mark I (1944)
Interactions HM inexistantes ou quasi-inexistantes
• 1956‐1971: 2ème et 3ème générations d’ordinateurs
1962 : Ivan Sutherland (fondateur de l’Informatique Graphique et début de l’interaction
homme‐machine
1963 : Ted Nelson Inventeur des termes hypertexte (1963, 1965 ?) et hypermedia (1968)
1967: Le premier casque de réalité virtuelle, réalisé par Sutherland et Sproull affichant des images
de synthèse.
1968 : première souris (Doug Engelbart)
• 1980s: Ordinateurs à grand public: système de fenêtrage et utilisation de la souris et du clavier
1981 : Xerox
1983 : Apple Lisa,
1984 : Apple Macintosh,
1990 : Windows 3.0
Introduction aux Interfaces Homme‐Machine
Historique et évolution des IHM:
• 1990: Systèmes plus conviviaux, faciles à comprendre et à utiliser
Interfaces graphiques
manipulation directe
action directe pour les objets représentés à l’écran
WYSIWYG
What You See Is What You Get
ACAI : Affichage Conforme A l'Impression
• 2000: Dispositifs évolués
vision 3D
synthèse vocale
combinaison de types de données
Interactions gestuelles
VR
IA
Introduction aux Interfaces Homme‐Machine
Paradigmes d'interfaces:
On peut observer que les IHM sont de plus en plus déconnectées de l'implémentation réelle des
mécanismes contrôlés. Dans son article de 1995, The Myth of Metaphor7, Alan Cooper distingue
trois grands paradigmes d'interface :
• Les interfaces d'acquisition : bouton, molette, souris, clavier accord, joystick, clavier
d'ordinateur, clavier MIDI, télécommande, capteur de mouvement, microphone avec la
reconnaissance vocale, etc.
• Les interfaces de restitution : écran, témoin à LED, voyant d'état du système, haut parleur, etc.
• Les interfaces combinées : écran tactile, multi-touch et les commandes à retour d'effort.
Chapitre III
L’ergonomie IHM
L’ergonomie IHM
Définitions :
• L’ergonomie est l’étude scientifique de la relation entre l’homme et ses moyens,
méthodes et milieux de travail. Son objectif est d’élaborer, avec le concours des diverses
disciplines scientifiques qui la composent, un corps de connaissances qui dans une
perspective d’application, doit aboutir à une meilleure adaptation à l’homme des moyens
technologiques de production, et des milieux de travail et de vie.
• L’ergonomie IHM consiste à faire correspondre la conception et le fonctionnement des
interfaces digitales aux différents besoins de l’utilisateur cible. Le but est de faciliter et
d’améliorer l’utilisation des solutions ou moyens digitaux mis à sa disposition.
L’ergonomie IHM
Définitions :
• L’ergonomie IHM, synonyme d’utilisabilité, est une science qui vise à rendre un service
maniable et facile à utiliser. C’est une discipline qui se concentre sur les Interfaces
Homme-Machine en s’appuyant sur des données, analyses mais aussi sur des études de
comportement. Son objectif est d’aboutir à optimiser l’adaptation et le bien-être de
l’utilisateur aux moyens technologiques conçus.
• L’UX design (User eXperience Design) est le design de l’expérience utilisateur. Il se définit
comme l’ensemble des techniques permettant de penser et créer une interface,
répondant aux attentes de l’utilisateur lors de la conception d’une plateforme (site web
ou application mobile).
L’ergonomie IHM
Différences entre l’ergonomie IHM et l’UX design
• L’ergonomie web : très précise et très focus
• L’ergonomie web consiste à créer des systèmes pratiques, facilement utilisables et maniables
avec un maximum de confort et de sécurité pour l’utilisateur cible.
• Il s’agit d’une approche scientifique et technique, qui fait appel à des méthodes d’observation
et des études de comportements des utilisateurs pour cerner le modèle mental de ces
derniers.
• L’ergonomie IHM c’est au final donner à l’utilisateur le moyen d’atteindre son objectif en
assurant la fiabilité de la solution.
• L’UX design : bien plus global
• L’UX design quant à lui se focalise principalement sur l’impact émotionnel, les ressentis et le
plaisir éprouvé lors ou à la suite de l’utilisation de la solution digitale. Il est centré sur
l’expérience utilisateur et vise la fidélisation des utilisateurs cibles, grâce à la convivialité de
la solution proposée.
L’ergonomie IHM
L’ergonomie cognitive
• L’ergonomie cognitive est une partie intégrante de l’ergonomie en général mais plus
particulièrement de l’ergonomie IHM. Cette discipline obéit aux grandes fonctions cognitives ou
modèles mentaux de l’être humain, à savoir le raisonnement, la mémoire et la perception,
l’attention, etc.
• L’ergonomie cognitive s’appuie sur les sciences cognitives ainsi que sur la psychologie cognitive,
dans le but d’arriver à trouver une adéquation entre les déterminants cognitifs des utilisateurs et
les fonctionnalités de l’interface finale proposée.
L’ergonomie IHM
Objectif
• Objectifs centrés sur les personnes :
• Sécurité
• Confort, Facilité d’usage, satisfaction, plaisir
• Intérêt de l’activité, du travail
• Santé cognitive : favorise le développement de compétences
• Objectifs centrés sur la performance
• Efficacité, Productivité
• Fiabilité
• Qualité
L’ergonomie IHM
Approches
• Approche technocentrée:
• centrée sur la machine et ses possibilités
• l’utilisateur doit s’adapter à la machine
• L’ère des Command Lines Interfaces (CLI) – 1969-1983
• Approche anthropocentrée
• centrée sur l’homme et ses besoins
• la machine doit s’adapter à l’utilisateur
• L’ère des Graphical User Interfaces (GUI) – 1984 à aujourd’hui
Chapitre IV
Interface Homme
Machine en Java
IHM en Java
Interfaces graphiques (GUI)
Dans la majorité des applications, la partie la plus importante de l'interaction homme-machine fait appel aux
périphériques de base qui sont : l'écran, le clavier et la souris.
Progressivement, les interfaces en mode caractères (lignes de commandes entrées au clavier) ont été
substituées par des interfaces utilisant le mode graphique (Graphical User Interface ou GUI).
Les interfaces graphiques utilisent différents éléments visuels appelés Composants graphiques ou
Widgets ou Controls et qui, en combinaison avec l'utilisation de la souris rendent les choses plus simples et
plus intuitives pour l'utilisateur.
50
IHM en Java
Interfaces graphiques (GUI)
Les interfaces utilisateur qui intègrent ces éléments graphiques (composants visuels / Widgets / Controls) sont
parfois désignées par l'acronyme WIMP qui est l'abréviation de :
• Window : Notion de "fenêtre" (zone d'interaction indépendante) (c'est une notion importante qui a même donné
son nom à un système d'exploitation !)
• Icon : Éléments graphiques visuels (images, boutons, champs de texte, bulles d'aide, etc.)
• Menu : Choix d'actions parmi une liste proposée (barres de menu, menus déroulants, menus contextuels,
rubans, etc.)
• Pointer : Curseur/Pointeur manipulé par la souris, et qui permet d'interagir avec les composants visuels
(pointage, sélection, tracé, drag&drop)
51
IHM en Java
Plate-forme Java
La plate-forme Java est composée d'un ensemble de libraires et d'outils qui constituent les briques de base
(Core Libraries) sur lesquelles on construit les application. Ces librairies sont disponibles dans toutes les
implémentations des machines virtuelles Java (indépendamment du système d'exploitation et du type de machine cible).
Certaines de ces librairies regroupées sous le nom User Interface Toolkits (anciennement nommées JFC pour
Java Foundation Classes) sont destinées à la gestion des interfaces utilisateur graphiques (GUI), aux graphiques 2D, à
l'impression, ainsi qu'à différentes tâches associées
(Cut&Paste, accessibilité, etc.).
Ces librairies contiennent les éléments de base qui servent à écrire des applications Java qui interagissent
avec l'utilisateur (applications de type client ou desktop par opposition aux applications de type serveur).
La gestion des interfaces utilisateur graphiques repose principalement sur deux librairies de classes : AWT et
Swing.
52
Le package AWT
Les éléments d'interfaces graphiques de l'AWT
Les classes du toolkit AWT (Abstract Windows Toolkit) permettent d'écrire des
interfaces graphiques indépendantes du système d'exploitation sur lesquel elles
vont fonctionner. Cette librairie utilise le système graphique de la plate-forme
d'exécution (Windows, MacOS, X-Window) pour afficher les objets graphiques.
Le toolkit contient des classes décrivant les composants graphiques, les polices,
les couleurs et les images.
Les deux classes principales d'AWT sont Component et Container. Chaque type
d'objet de l'interface graphique est une classe dérivée de Component. La classe
Container, qui hérite de Component est capable de contenir d'autres objets
graphiques (tout objet dérivant de Component).
Le package AWT
Les composants graphiques de l'AWT
Pour utiliser un composant, il faut créer un nouvel objet représentant le
composant et l'ajouter à un conteneur existant grâce à la méthode add().
Le package AWT
Les composants graphiques de l'AWT
• Les étiquettes
Il faut utiliser un objet de la classe [Link]
Le package AWT
Les composants graphiques de l'AWT
• Les boutons
Il faut utiliser un objet de la classe [Link]
Le package AWT
Les composants graphiques de l'AWT
• Les panneaux
Les panneaux sont des conteneurs qui permettent de rassembler des composants et de les
positionner grâce à un gestionnaire de présentation. Il faut utiliser un objet de la classe
[Link].
Par défaut le gestionnaire de présentation d'un panel est de type FlowLayout.
Le package AWT
Les composants graphiques de l'AWT
• Les listes déroulantes (combobox)
Il faut utiliser un objet de la classe [Link]
Plusieurs méthodes permettent la gestion des sélections
Le package AWT
Les composants graphiques de l'AWT
• La classe TextComponent
La classe TextComponent est la classe mère des classes qui permettent l'édition de texte : TextArea et
TextField. Elle définit un certain nombre de méthodes dont ces classes héritent.
Le package AWT
Les composants graphiques de l'AWT
• Les champs de texte
Il faut déclarer un objet de la classe [Link]
• Les listes
Il faut déclarer un objet de la classe [Link].
L'insertion de composant dans un conteneur se fait grâce à la méthode add(Component) de la classe Container.
Le package AWT
Composants Swing
Swing fait partie de la bibliothèque Java Foundation Classes (JFC). C'est une API dont le but est
similaire à celui de l'API AWT mais dont les modes de fonctionnement et d'utilisation sont
complètement différents. Swing a été intégré au JDK depuis sa version 1.2. Cette bibliothèque
existe séparément. pour le JDK 1.1.
Les composants Swing forment un nouvelle hiérarchie parallèle à celle de l'AWT. L'ancêtre de
cette hiérarchie est le composant JComponent. Presque tous ses composants sont écrits en pur
Java : ils ne possèdent aucune partie native sauf ceux qui assurent l'interface avec le système
d'exploitation : JApplet, JDialog, JFrame, et JWindow. Cela permet aux composants de toujours
avoir la même apparence quelque soit le système sur lequel l'application s'exécute.
Le package Swing
Composants Swing
• Alors que Swing est une collection de composants qui ont la capacité de développer des objets
d’interface graphique (GUI) indépendamment de la plate-forme, les composants AWT dépendent
de la plate-forme et fonctionnent différemment sur différentes plates-formes.
• En Java, on distingue des composants légers (Lightweight) et des composants lourds
(Heawyweight).
• Les composants lourds sont basés sur du code natif de la plate-forme d'exécution (Peer
Component).
• Les composants légers sont entièrement écrits en Java et sont donc indépendants de la
plate-forme d'exécution.
• Sauf quelques composants de haut-niveau, pratiquement tous les composants Swing sont des
composants légers (contrairement à AWT).
Le package Swing
Composants Swing
Le package Swing
Composants Swing
65
Le package Swing
Classes de base des composants
Pratiquement tous les composants Swing héritent de la classe JComponent qui elle-même hérite des classes
AWT Container et Component.
66
Le package Swing
Classes de base des composants
Par héritage, les composants Swing sont donc également des composants AWT (car la classe Component est
une super-classe de JComponent).
Les classes de la plupart des composants Swing commencent par la lettre 'J' et se distinguent ainsi des
composants AWT correspondants :
• Composant 'Bouton' AWT : Button
• Composant 'Bouton' Swing : JButton
Il est possible de créer de nouveaux composants visuels ou d'étendre (spécialiser) ceux qui existent. Ce
travail nécessite naturellement une bonne connaissance de l'architecture de la librairie Swing y compris de
certaines classes de bas-niveau afin que les nouveaux composants soient créés dans le même esprit et
s'intègrent avec les autres (interopérabilité).
Les pages qui suivent donnent un bref aperçu (tour d'horizon) des principaux composants qui sont disponibles
dans la librairie Swing.
67
Le package Swing
Composants Swing
68
Le package Swing
Composants Swing
69
Le package Swing
Composants Swing
70
Le package Swing
Composants Swing
71
Le package Swing
Composants Swing
72
Le package Swing
Composants Swing
73
Le package Swing
Composants Swing
La classe de base d'une application est la classe JFrame. Son rôle est équivalent à la classe Frame de l'AWT
et elle s'utilise de la même façon.
Le package Swing
Boîtes de dialogue prédéfinies
75
Le package Swing
Boîtes de dialogue prédéfinies
77
Le package Swing
• Composants Swing
Il existe des composants Swing équivalents pour chacun des composants AWT avec des constructeurs
semblables. De nombreux constructeurs acceptent comme argument un objet de type Icon, qui
représente une petite image généralement stockée au format Gif.
79
Le package Swing
• Composants Swing
• Les menus
Les menus de Swing proposent certaines caractéristiques intéressantes en plus de celles proposées par un menu
standard :
• les éléments de menu peuvent contenir une icône
• les éléments de menu peuvent être de type bouton radio ou case à cocher
• les éléments de menu peuvent avoir des raccourcis clavier (accelerators)
• Les menus sont mis en oeuvre dans Swing avec un ensemble de classe :
81
Le package Swing
Exercice 1
82
Le package Swing
Exercice 2
Ajouter à la figure de l’exercice 1 une barre de menus constituée :
• d’un menu Fichier comportant les options : Ouvrir, Sauvegarder et Fermer,
• d’un menu Edition comportant les options : Copier et Coller.
On ne cherchera pas ici à traiter les actions correspondantes.
83
Chapitre VI
Gestion du positionnement
Gestion du positionnement
Le dimensionnement des composants
En principe, il est automatique grâce au LayoutManager.
Pour donner à un composant une taille donnée, il faut redéfinir la méthode getPreferedSize() de la classe
Component.
La méthode getPreferedSize() indique la taille souhaitée mais pas celle imposée. En fonction du Layout
Manager, le composant pourra ou non imposer sa taille.
85
Gestion du positionnement
Le dimensionnement des composants
• Une autre façon de faire est de se passer des Layout et de placer les composants à la main en indiquant
leurs coordonnées et leurs dimensions.
• Pour supprimer le Layout par défaut d'une classe, il faut appeler la méthode setLayout() avec comme
paramètre null.
• Trois méthodes de la classe Component permettent de positionner des composants :
• setBounds(int x, int y, int largeur, int hauteur)
• setLocation(int x , int y)
• setSize(int largeur, int hauteur)
• Ces méthodes permettent de placer un composant à la position (x,y) par rapport au conteneur dans lequel il
est inclus et d'indiquer sa largeur et sa hauteur.
• Toutefois, les Layout Manager constituent un des facteurs importants de la portabilité des interfaces
graphiques notamment en gérant la disposition et le placement des composants après redimensionnement
du conteneur.
86
Gestion du positionnement
Le positionnement des composants
• Lorsqu'on intègre un composant graphique dans un conteneur, il n'est pas nécessaire de préciser son
emplacement car il est déterminé de façon automatique : la mise en forme est dynamique. On peut
influencer cette mise en page en utilisant un gestionnaire de mise en page (Layout Manager) qui définit la
position de chaque composant inséré. Dans ce cas, la position spécifiée est relative aux autres composants.
• Il est possible d'utiliser plusieurs gestionnaires de mise en forme pour définir la présentation des
composants. Par défaut, c'est la classe FlowLayout qui est utilisée pour la classe Panel et la classe
BorderLayout pour Frame et Dialog.
• Pour affecter une nouvelle mise en page, il faut utiliser la méthode setLayout() de la classe Container.
87
Gestion du positionnement
Le positionnement des composants
• Les layout manager ont 3 avantages :
1. l'aménagement des composants graphiques est délégué aux layout managers (il est inutile d'utiliser
les coordonnées absolues)
2. en cas de redimensionnement de la fenêtre, les contrôles sont automatiquement agrandis ou réduits
3. ils permettent une indépendance vis à vis des plate-formes.
88
Gestion du positionnement
La mise en page par flot (FlowLayout)
• La classe FlowLayout (mise en page flot) place les composants ligne par ligne de gauche à droite. Chaque
ligne est complétée progressivement jusqu'à être remplie, puis passe à la suivante. Chaque ligne est centrée
par défaut. C'est la mise en page par défaut des applets.
Il existe plusieurs constructeurs :
89
Gestion du positionnement
La mise en page par flot (FlowLayout)
90
Gestion du positionnement
La mise en page bordure (BorderLayout)
• Avec ce Layout Manager, la disposition des composants est commandée par une mise en page en bordure
qui découpe la surface en cinq zones : North, South, East, West, Center. On peut librement utiliser une ou
plusieurs zones.
• BorderLayout consacre tout l'espace du conteneur aux composants. Le composant du milieu dispose de la
place inutilisée par les autres composants.
Il existe plusieurs constructeurs :
91
Gestion du positionnement
La mise en page bordure (BorderLayout)
92
Gestion du positionnement
La mise en page bordure (BorderLayout)
La position des composants est déterminée par une contrainte mentionnée lors de l'ajout du composant
(paramètre de la méthode add()). Elle est définie en utilisant une constante de la classe
BorderLayout (NORTH, SOUTH, EAST, WEST, CENTER).
Les cinq emplacement prévus ne doivent pas forcément être tous occupés (mais il ne peut pas y avoir plus d'un
composant par emplacement).
Propriétés du gestionnaire :
• L'espace (horizontal et vertical) entre les composants peut être défini en gérant les propriétés hgap et vgap
(nombre de pixels entre les composants)
Par défaut : hgap=0 et vgap=0.
93
Gestion du positionnement
La mise en page GridLayout
• Ce Layout Manager établit un réseau de cellules identiques qui forment une sorte de quadrillage invisible :
les composants sont organisés en lignes et en colonnes. Les éléments insérés dans la grille ont tous la même
taille.
• Les cellules du quadrillage se remplissent de gauche à droite ou de haut en bas.
Il existe plusieurs constructeurs :
94
Gestion du positionnement
La mise en page GridLayout
95
Gestion du positionnement
La mise en page GridBagLayout
• Ce gestionnaire (grille étendue) est le plus riche en fonctionnalités : le conteneur est divisé en cellules
égales mais un composant peut occuper plusieurs cellules de la grille et il est possible de faire une
distribution dans des cellules distinctes. Un objet de la classe GridBagConstraints permet de donner les
indications de positionnement et de dimension à l'objet GridBagLayout.
• Les lignes et les colonnes prennent naissance au moment où les contrôles sont ajoutés. Chaque contrôle est
associé à un objet de la classe GridBagConstraints qui indique l'emplacement voulu pour le contrôle.
96
Gestion du positionnement
La mise en page GridBagLayout
• Arrange les composants dans une grille dont les cellules sont de tailles variables. Un composant peut s'étendre
(span) sur plusieurs cellules.
• A chaque composant est associé un ensemble de contraintes, spécifiées par un objet de type
GridBagConstraints.
• Permet un contrôle précis de la dimension et du positionnement des composants, notamment quand le
conteneur change de taille.
97
Gestion du positionnement
La mise en page GridBagLayout
• Les composants occupent des zones rectangulaires qui peuvent être composées d'une ou plusieurs cellules.
• On peut définir le point d'ancrage du composant à l'intérieur de la zone
98
Gestion du positionnement
La mise en page GridBagLayout
GridBagConstraints
• Les contraintes associées à chaque composant enfant définissent :
• Les coordonnées (numéro de la colonne, numéro de la ligne) de la zone dans laquelle sera placé le composant (gridx, gridy) La
zone du composant pouvant occuper plusieurs cellules, on indiquera les
coordonnées de la première cellule occupée (en haut à gauche)
• Le nombre de cellules occupées (nombre de lignes, nombre de colonnes) par la zone (gridwidth, gridheight)
• La position du composant (ancrage) à l'intérieur de sa zone : nord, sud, est, ouest, centre, nord-est, … (anchor)
• Un indicateur de remplissage qui précise si le composant doit s'agrandir pour occuper tout l'espace de la zone si la zone est
plus grande que sa taille préférée. On peut distinguer le remplissage horizontal et vertical (fill)
• Un indicateur d'agrandissement qui précise dans quelle proportion les lignes et les colonnes doivent modifier leurs tailles
lorsque le conteneur change de dimension (weightx, weighty). La valeur maximale de chaque ligne, respectivement de chaque
colonne, est prise en compte.
• Une marge externe, en pixels, autour du composant (insets)
• Une marge interne, en pixels, à ajouter, de chaque côté, à la taille minimale du composant (ipadx, ipady) [ Très rarement utilisé ]
99
Gestion du positionnement
La mise en page GridBagLayout
GridBagConstraints
100
Gestion du positionnement
La mise en page GridBagLayout
GridBagConstraints
Quelques remarques additionnelles :
• Les valeurs associées à weightx et weighty influenceront le redimensionnement des colonnes,
respectivement des lignes de la grille. C'est la valeur maximale de chaque colonne respectivement de
chaque ligne qui est prise en compte dans le calcul.
• La valeur weightx d'une colonne est comparée à la somme des valeurs weightx de toutes les colonnes de
la grille pour déterminer la proportion d'espace additionnel qui lui sera attribuée.
• La valeur fill indique si le composant doit s'adapter à la grandeur de sa zone. Le composant peut s'étaler
horizontalement, verticalement, dans les deux directions ou ne pas s'étaler du tout (même si la zone s'agrandit).
• Si weightx (weighty) est égal à zéro pour tous les composants, l'espace additionnel sera ajouté autour
de la grille, à gauche et à droite (resp. en haut et en bas). La grille sera ainsi centrée à l'intérieur du
conteneur.
• Certaines constantes particulières de la classe GridBagConstraints (RELATIVE, REMAINDER) peuvent être
utilisées avec les propriétés gridx, gridy, gridwidth, gridheight.
101
Gestion du positionnement
La mise en page GridBagLayout
GridBagConstraints
102
Gestion du positionnement
Autres gestionnaires de disposition
Il existe d'autres gestionnaires spécialisés comme Cardlayout, Boxlayout, GroupLayout, SpringLayout…
Il est également possible de travailler sans gestionnaire de disposition (sans Layout Manager) en enregistrant la
référence null à la place d'un objet de type LayoutManager.
Dans ce cas, la position absolue des composants doit être définie explicitement (x, y) par exemple en utilisant
une des méthodes setLocation() ou setBounds() de [Link].
Sans gestionnaire de disposition, la taille des composants doit être définie à l'aide de la méthode setSize().
Sauf cas particuliers, ce mode de fonctionnement n'est pas recommandé (il n'est d'ailleurs pas autorisé et lève une
exception dans certains conteneurs).
103
Gestion du positionnement
Exercice 1
Écrire la classe correspondante à la figure suivante :
104
Gestion du positionnement
Exercice 1
105
Chapitre VII
Le principe de base de l'architecture MVC est relativement simple, on divise le système interactif en trois
parties distinctes :
• le modèle (Model) qui offre l'accès et permet la gestion des données (état du système)
• la vue (View) qui a pour tâche de présenter les informations (visualisation) et qui participe à la
détection de certaines actions de l'utilisateur
• le contrôleur (Controller) qui est chargé de réagir aux actions de l'utilisateur (clavier, souris) et à
d'autres événements internes et externes
107
Gestion des événements
Architecture MVC
Le Modèle (Model) est responsable de la gestion de l'état du système (son contenu actuel, la valeur de ses données).
Il offre également les méthodes et fonctions permettant de gérer, transformer et manipuler ces données (logique "métier" de
l'application).
Le modèle peut informer les vues des changements intervenus dans ses données. La communication de ces changements
intervient en général sous la forme d'événements qui seront gérés par des contrôleurs (les vues s'enregistrent auprès du modèle
pour être notifiées lors des changements dans les données)
Les informations gérées par le modèle sont indépendantes de la manière dont elles seront affichées. En fait, le modèle doit
pouvoir exister indépendamment de la représentation visuelle des données.
Dans certaines situations (simples) le modèle peut contenir lui-même les données, mais la plupart du temps, il agit comme un
intermédiaire (proxy) vers les données qui sont stockées dans une base de données ou un serveur d'informations (en Java, le
modèle est souvent défini par une interface).
108
Gestion des événements
Architecture MVC
La vue (View) se charge de la représentation visuelle des informations.
La vue utilise les données provenant du modèle pour afficher les informations. La vue doit être informée des modifications
intervenues dans certaines données du modèle (celles qui influencent l'affichage).
Plusieurs vues différentes peuvent utiliser le même modèle (plusieurs représentations possibles d'un même jeu de données).
La vue intercepte certaines actions de l'utilisateur et les transmet au contrôleur pour qu'il les traite (souris, événements clavier,
…).
Le contrôleur peut également modifier la vue en réaction à certaines actions de l'utilisateur (par exemple afficher une nouvelle
fenêtre).
La représentation visuelle des informations affichées peut dépendre du Look-and-Feel adopté (ou imposé) et peut varier d'un
système d'exploitation à l'autre. L'utilisateur peut parfois modifier lui même la présentation des informations en choisissant
par exemple un thème.
109
Gestion des événements
Architecture MVC
Le contrôleur (Controller) est chargé de réagir aux différents événements qui peuvent survenir.
Les événements sont constitués soit par des actions de l'utilisateur (presser sur une touche, cliquer sur un bouton, fermer une
fenêtre, ...) ou par des directives venant du programme lui-même (un changement intervenu dans un autre composant, l'écoulement
d'un certain temps, etc...).
Le contrôleur définit le comportement de l'application (comment elle réagit aux sollicitations).
Dans les applications simples, le contrôleur gère la synchronisation entre la vue et le modèle (rôle de chef d'orchestre).
Le contrôleur est informé des événements qui doivent être traités et sait d'où ils proviennent.
Le contrôleur peut agir sur la vue en modifiant les éléments affichés.
Le contrôleur peut également, si nécessaire, modifier le modèle en réaction à certains événements.
110
Gestion des événements
Importance de l’architecture MVC
Pour le développement d'applications Java, l'architecture MVC est intéressante à plusieurs titres.
D'une part, c'est un modèle de conception (ou, plus exactement, un ensemble de modèles de conception) qu'il est recommandé
d'utiliser pour le développement des applications interactives car il offre des principes de découpage du code
(modularisation) qui visent à minimiser les couplages entre les différents éléments qui constituent le programme.
Ce découplage entre les modules minimise les dépendances et favorise ainsi la maintenance des applications (on peut
modifier un élément du système sans que tous les autres en soient affectés).
D'autre part, la librairie Swing est elle-même basée sur une variante de cette architecture.
Il est donc important de connaître l'architecture MVC pour comprendre et exploiter au mieux les différents éléments de la
librairie Swing (paramétrer et personnaliser les composants, gérer les événements, …).
111
Gestion des événements
MVC et Swing
La librairie Swing utilise une variante légèrement simplifiée de l'architecture MVC appelée Model-Delegate (Modèle-
Délégué).
Cette variante combine dans un seul élément la vue et le contrôleur.
Cet élément combiné est appelé UI-Delegate.
112
Gestion des événements
MVC et Swing
En résumé, chaque composant Swing contient un modèle et un UI-Delegate.
Le modèle est responsable de maintenir les informations associées au composant (son état, ses données).
Le UI-Delegate est responsable de la représentation visuelle du composant ainsi que de la réaction du composant aux
différents événements qui peuvent l'affecter (actions de l'utilisateur ou instructions provenant du programme).
113
Gestion des événements
Les événements
Les événements sont constitués par :
• Des actions de la part de l'utilisateur (un clic de souris, la pression sur une touche du clavier, le
déplacement d'une fenêtre, etc.)
• Des changements provoqués par le programme lui-même ou par un sous-système externe
(modification des propriétés d'un composant, informations provenant du réseau, échéance d'une temporisation,
etc.)
Les événements (groupés par genre) sont représentés par différentes classes qui ont toutes comme classe
parente la classe EventObject (du package [Link]).
Les événements AWT sont représentés par des objets des classes qui se trouvent dans le paquetage
[Link].
La librairie Swing utilise également ces classes et en définit d'autres dans le paquetage [Link].
114
Gestion des événements
Les événements
Certains composants génèrent des événements; ce sont des sources d'événements.
Un objet qui désire être notifié (informé) lorsqu'un événement survient est un récepteur d'événement (Event
Listener).
On pourrait également parler d'intercepteur d'événement, d'auditeur d'événement, de traite événement, etc.
115
Gestion des événements
Gestion des événements
Préparation (lors de l'initialisation du programme)
Création d'un récepteur d'événement (contrôleur) …Controller
Instanciation d'une classe implémentant l'interface evTypeListener
Enregistrement du récepteur d'événement auprès du composant qui est la source de l'événement (un bouton
par exemple)
Invocation d'une méthode addevTypeListener()
116
Gestion des événements
Gestion des événements
Préparation (lors de l'initialisation du programme)
Création d'un récepteur d'événement (contrôleur) …Controller
public class ClickController implements ActionListener {
…
public void actionPerformed(ActionEvent event) {
… // Traitement de l'événement
}
}
btController = new ClickController(…);
Enregistrement du récepteur d'événement auprès du composant qui est la source de l'événement (un bouton
par exemple)
[Link](btController);
117
Gestion des événements
Objets représentant les événements
Les objets de type événement (evTypeEvent) disposent tous d'une méthode générale:
• getSource(): Renvoie l'objet qui a généré ou déclenché l'événement
Par exemple MouseEvent possède les méthodes getX(), getY(), getButton(), getClickCount(),
... et hérite des méthodes getModifiers() et getWhen() de sa classe parente InputEvent.
118
Gestion des événements
Gestion des événements
La gestion des événements est identique pour tous les composants, et des conventions de nommage régissent
les éléments qui interviennent.
Chaque type d'événement evType se nomme evType Event et possède un listener (un récepteur) qui est défini
par une interface appelée evType Listener (une sous-classe de [Link]).
Les interfaces listener définissent des méthodes que la source d'événement invoquera lorsqu'un type donné
d'événement se produira (principe de Callback). Ces méthodes listener prennent toujours un objet événement
comme unique paramètre.
Les sources d'événements doivent mettre à disposition des méthodes permettant aux récepteurs (listeners) de
s'inscrire auprès de la source
119
Gestion des événements
Gestion des événements
Par exemple, pour la classe JButton (source d'événement), le type d'événement est Action, le composant génère
donc un événement appelé ActionEvent lorsque l'utilisateur clique sur le bouton.
120
Gestion des événements
Schéma de fonctionnement
1) Création d'un composant JButton qui génère un événement de type ActionEvent (JButton est une source
d'événement)
2) Création d'un récepteur d'événement qui implémente les méthodes définies dans l'interface ActionListener
(dans ce cas, il y a une unique méthode appelée actionPerformed()). Le traitement de l'événement est réalisé
dans le corps de la méthode actionPerformed().
Finalement : Lorsqu'un utilisateur pressera le bouton b1, la méthode actionPerformed() sera invoquée avec,
comme unique argument, l'objet événement e (de type ActionEvent). Si nécessaire, il sera possible dans le corps
de actionPerformed() de déterminer l'objet qui a généré l'événement (b1 dans l'exemple présenté) en invoquant
la méthode getSource() de l'objet événement evt.
121
Gestion des événements
Schéma de fonctionnement
Les événements utilisateurs sont gérés par plusieurs interfaces EventListener.
Les interfaces EventListener permettent de définir les traitements en réponse à des événements utilisateurs
généré par un composant.
Une classe doit contenir une interface auditrice pour chaque type d'événements à traiter, par exemple :
• ActionListener : clic de souris ou enfoncement de la touche Enter
• ItemListener : utilisation d'une liste ou d'une case à cocher
• MouseMotionListener : événement de souris
• WindowListener : événement de fenêtre
122
Gestion des événements
L'interception des actions de l'utilisateur
L'ajout d'une interface EventListener impose plusieurs ajouts dans le code :
Pour identifier le composant qui a généré l'événement, on peut utiliser la méthode getActionCommand(), ou
getSource() de l'objet ActionEvent.
• La méthode getActionCommand() renvoie une chaîne de caractères.
• La méthode getSource() renvoie l'objet qui a généré l'événement.
123
Gestion des événements
Les différentes implémentations des Listeners
La mise en œuvre des Listeners peut se faire selon différentes formes :
• une classe indépendante
• la classe implémentant elle même l'interface
• une classe interne
• une classe interne anonyme.
124
Gestion des événements
Les différentes implémentations des Listeners
Une classe indépendante
125
Gestion des événements
Les différentes implémentations des Listeners
Une classe implémentant elle même le listener
126
Gestion des événements
Les différentes implémentations des Listeners
Une classe interne
127
Gestion des événements
Les différentes implémentations des Listeners
Une classe interne anonyme
128
Gestion des événements
L'interception des actions de l'utilisateur
L'interface ActionListener
Cette interface permet de réagir aux cliques de souris ou enfoncements de la touche Enter.
Pour qu'un composant génère des événements, il faut utiliser la méthode addActionListener().
Ces événements sont reçus par la méthode actionPerformed() qui attend un objet de type actionEvent en
argument
129
Gestion des événements
L'interception des actions de l'utilisateur
L'interface ActionListener
130
Gestion des événements
L'interception des actions de l'utilisateur
L'interface ActionListener
131
Gestion des événements
L'interception des actions de l'utilisateur
L'interface ItemListener
Pour déterminer si une case à cocher est sélectionnée ou inactive, utiliser la méthode getStateChange() avec
les constantes [Link] ou [Link].
132
Gestion des événements
L'interception des actions de l'utilisateur
L'interface ItemListener
133
Gestion des événements
L'interception des actions de l'utilisateur
L'interface ItemListener
134
Gestion des événements
L'interception des actions de l'utilisateur
L'interface TextListener
L'interface MouseMotionListener
La méthode addMouseMotionListener() permet de gérer les événements liés à des mouvements de souris. Les
méthodes mouseDragged() et mouseMoved() reçoivent les événements.
135
Gestion des événements
L'interception des actions de l'utilisateur
L'interface MouseMotionListener
136
Gestion des événements
L'interception des actions de l'utilisateur
L'interface MouseListener
Cette interface permet de réagir aux clics de souris. Les méthodes de cette interface sont :
• public void mouseClicked(MouseEvent e);
• public void mousePressed(MouseEvent e);
• public void mouseReleased(MouseEvent e);
• public void mouseEntered(MouseEvent e);
• public void mouseExited(MouseEvent e);
L'interface WindowListener
La méthode addWindwowListener() permet à un objet Frame de générer des événements. Les méthodes de cette interface
sont :
• public void windowOpened(WindowEvent e)
• public void windowClosing(WindowEvent e)
• public void windowClosed(WindowEvent e)
• public void windowIconified(WindowEvent e)
• public void windowDeinconified(WindowEvent e)
• public void windowActivated(WindowEvent e)
137
• public void windowDeactivated(WindowEvent e)
Gestion des événements
Listeners courants
138
Gestion des événements
Listeners courants
139
Gestion des événements
Listeners courants
140