Vous êtes sur la page 1sur 38

L'interface Graphique Java

GUI (Graphic User Interface)

Youssef BERAICH
ENS – Tétouan
2010/2011

1
Généralités
 Une interface graphique est un ensemble de
composants graphiques permettant à un
utilisateur de communiquer avec un logiciel.
 Les éléments graphiques de l'interface java
sont définis dans le paquetage AWT (Abstract
Window Toolkit).
 AWT est une librairie de classes graphiques
s'exécutant sans recompilation sur tout
ordinateur disposant d'un interpréteur JVM.
 L'apparence diffère selon système
d'exploitation, mais il existe une autre
librairie appelée Swing autonome qui ne
dépend pas du SE.
2
Les éléments de AWT
 AWT comporte :
 des composants (Component) parmi
lesquels on distingue deux types :
Les conteneurs : Containers
Les widgets
 des gestionnaires de mise en page
(LayoutManager)
 Un mécanisme de gestion d'événements

3
La classe Component (Composant graphique)

 Les composants se répartissent en trois


catégories :
 Les composants prédéfinis.
 Les composants personnalisés dérivés de la classe
Canvas.
 Les containers utilisés pour contenir
d'autres composants .

4
hiérarchie des classes dérivées de Component
hiérarchie des classes dérivées de Component
 java.awt.Component
 java.awt.Button
 java.awt.Canvas
 java.awt.Checkbox
 java.awt.Choice
 java.awt.Container
 java.awt.Panel
 Applet
java.applet.
 java.awt.Window
 java.awt.Dialog
 java.awt.FileDialog
 java.awt.Frame
 java.awt.Label
 java.awt.List
 java.awt.Scrollbar
 java.awt.TextComponent
 java.awt.TextArea
 java.awt.TextField
6
Les composants prédéfinis
Les boutons (de classe Button) : un programme
déclenche une action quand l'utilisateur clique sur
un bouton.

Les boites à cocher (de classe Checkbox) : ce


sont des composants ayant deux états possibles
(coché ou non coché),

Les boutons radios (de classe Checkbox associés


à un ensemble de classe CheckboxGroup). A un
moment donné, un seul bouton radio ne peut être
choisi parmi ceux de l'ensemble auquel il
appartient.

7
Les composants prédéfinis
Les composants de classe Choice (appelés aussi
Combo box ou Drop down list dans d'autres
environnements) : Ce type de composant propose
à l'utilisateur de faire un choix parmi un certains
nombres de chaînes de caractères affichées dans
une liste déroulante.
Les listes (de classe List) : ce sont des
composants qui permettent par simple clic, de
sélectionner ou de désélectionner une ou plusieurs
chaînes de caractères affichées dans une

Les labels (de classe Label) : Ce sont les


composants les plus simples ; un label permet
d'afficher une chaîne de caractères (titre,
message, information décrivant un composant
juxtaposé,...).
8
Les composants prédéfinis

Les zones de saisies de texte (composant avec


une seule ligne TextField ou avec plusieurs
lignes TextArea) : Ces composants permettent
à l'utilisateur de saisir une chaîne de caractères.

Les ascenseurs (de classe Scrollbar) : utilisés


en association avec un autre composant (en
général un container), quand la zone d'affichage
de celui-ci est trop petite pour contenir tout ce
qu'il peut afficher.

9
Les Canvas
 Les composants dérivés de la classe
Canvas :
Si les composants prédéfinis ne satisfont
pas un de vos besoins, vous devez
utiliser cette classe comme super classe
pour créer vos propres composants que
vous dessinez en utilisant les méthodes
de la classe Graphics.

10
Les Containers
 Contrairement aux autres composants, les
containers sont utilisés pour contenir
d'autres composants de n'importe quelle
catégorie ou pour afficher directement des
dessins fabriqués avec les méthodes de la
classe Graphics.
 Les containers se subdivisent en deux sous
catégories qui héritent toutes deux de la
classe abstract Container :
 containers de type fenêtre Window
 Les containers de classe Panel
11
containers de type fenêtre
 Les containers de type fenêtre (de classe
Window ou ses dérivées)
 Les fenêtres sont des zones d'affichage
indépendantes les unes des autres.
 Parmi les fenêtres, on distingue:
 les boites de dialogue (de classe Dialog)
comportant un cadre et un titre
 les fenêtres de classe Frame comportant un
cadre, un titre, un menu éventuel, un pointeur
de souris propre,... (et correspondant aux
fenêtres que vous avez l'habitude d'utiliser).
12
Les containers de classe Panel
 Les containers de classe Panel :
 Ce type de containers est une zone
d'affichage occupant tout ou partie d'une
fenêtre.
 Notamment, la classe Applet dérive de
Panel et permet d'afficher des
composants ou un dessin dans une
fenêtre d'un navigateur.

13
Gestionnaires de placement (LayoutManager)

 Ils ont en charge le positionnement des


différents composants dans un container.
 En effet, définir la position exacte de chaque
composant dans un conteneur, et ce en
fonction de la taille de la fenêtre qui peut à
tout instant être modifiée par l’utilisateur,
peut s’avérer rapidement ingérable dès lors
que le nombre de composants commence à
devenir quelque peu important. De plus, plus
le code est long, plus la maintenance est
rendue difficile, et ce même dans le cas
d’une modification mineure.
Gestionnaires de placement (LayoutManager)

 Le point repérant le coin supérieur gauche


(CSG) et la dimension du rectangle
occupé peuvent être indiqués ou
calculés par le programme pour chacun
des composants.
 Les composants peuvent être disposés
automatiquement en suivant les
caractéristiques définies dans un objet
chargé de la mise en page (Layout). Ceci
est utile lorsque la fenêtre change de
taille.
15
LayoutManager
 Plusieurs types de mise en page sont
prédéfinis:
Absence de Layout (null).
FlowLayout.
BorderLayout.
GridLayout.
CardLayout.
GridBagLayout.

16
Absence de Layout
 Les composants sont rangé en fonction de leur
position et dimension définies explicitement
dans le programme:

 setLocation(), setSize() et setBounds()

 en cas de redimensionnement de la fenêtre les


composants ne sont pas déplacés.

17
FlowLayout
 Ce gestionnaire
dispose les
composants les uns à
la suite des autres,
sur une même ligne.
 Lorsqu’une ligne ne
possède plus three
suffisamment de one
two
place, l’affichage se
poursuit sur la ligne
suivante.
 On peut imposer une
four
taille à un composant five
en utilisant la
méthode
setPreferredSize. À
qui on fournit un objet
de type Dimension.

18
FlowLayout
 Lors de la construction d ’un gestionnaire
FlowLayout, on peut spécifier un
paramètre d’alignement d’une ligne de
composants par rapport aux bords
verticaux de la fenêtre. Pour cela, on
utilise l’une des constantes entières
suivantes :
 FlowLayout.LEFT
 FlowLayout.RIGHT
 FlowLayout.CENTER

19
Le gestionnaire FlowLayout : affichage

20
BorderLayout
 L’emplacement est choisi lors de l’appel de
la méthode add en utilisant une des
constantes symboliques suivantes:
 BorderLayout.NORTH
 BorderLayout.SOUTH
 BorderLayout.EAST
 BorderLayout.WEST
 BorderLayout.CENTER
 Le gestionnaire par défaut est le
gestionnaire Borderlayout.
 La taille des composants n’est pas
respectée.

21
Le gestionnaire BorderLayout : Affichage

22
GridLayout
 Ce gestionnaire
permet de
disposer les
différents one two three
composants
suivant une grille
four
régulière, chaque five six

composant
occupant une
cellule.

23
Le gestionnaire GridLayout : Affichage

24
CardLayout
 Les composants sont présentés un par un
comme un paquet de cartes vu de
dessus. On ne voit que le composant du
dessous.
 Des méthodes permettent de basculer
entre les différents composants.

25
GridBagLayout
 Les composants sont rangés dans des
cases de même taille disposées en lignes
et en colonnes mais en tenant compte
des contraintes: tel composant doit être
le dernier de sa ligne par exemple; tel
autre composant occupe deux cases, etc.

26
Gestion des événements
 Les événements sont classés par thèmes donnant lieu
chacun à une classe. Voici quelques unes de ces classes :
composant générateur signification

ActionEvent Button clic, TextField : touche Entrée

MouseEvent Component mouvements et clic de souris

enfoncement et relâchement de
KeyEvent Component
touche
entrée et sortie du curseur de
FocusEvent Component
souris
TextField,
TextEvent modification du texte
TextArea
iconification, activation,
WindowEvent Window
ouverture, fermeture
Gestion des événements : Hierarchie
Gestion des événements : Principe
 Les composants Swing créent des événements,
soit directement, soit par une action de
l'utilisateur sur le composant. Ces événements
peuvent déclencher une action exécutée par
d'autre(s) composant(s).
 Un composant qui crée des événements est appelé
source. Le composant source délègue le traitement
de l'événement au composant auditeur.
 Un composant qui traite un événement est appelé
auditeur (listener)
 Un composant auditeur doit s'inscrire auprès du
composant source des événements qu'il veut
traiter.
L'événement L'interface Listener

interface XxxListener{
class XxxEvent extends java.util.EventObject
void traiter( XxxEvent
{ public Xxx(Object source){ super(source);}
e);
...}
}
ActionEvent
 interface ActionListener{
void actionPerformed(ActionEvent e);
}

 Les composants sources de ActionEvent


sont :
 Boutons : JButton, JRadioButton, JCheckBox,
JToggleButton
 Menus : JMenuItem, JMenu,
JRadioButtonMenuItem, JCheckBoxMenuItem
 Texte : JTextField
ActionEvent

Object getSource() Retourne l'objet source de l'événement.

int getID() Retourne le type d'événement.


Retourne le texte associé au composant
String getActionCommand() source de l'événement (bouton ou
menu)
Retourne un entier indiquant si les
touches maj, alt ou ctrl étaient
int getModifiers
appuyées au moment de la
génération de l'événement.
Retourne la date et l'heure de la
long getWhen()
génération de l'événement.
Retourne une chaîne de caractères
String paramString() contenant toutes les informations
précédentes.
MouseEvent
 Tous les composants peuvent être sources de
MouseEvent . Lors d'un clic les méthodes sont
appelées dans l'ordre suivant :
 mousePressed
 mouseReleased
 mouseClicked
 interface MouseListener{
void mouseClicked(MouseEvent e);
void mouseEntered(MouseEvent e);
void mouseExited(MouseEvent e);
void mousePressed(MouseEvent e);
void mouseReleased(MouseEvent e);
}
MouseEvent
Object getSource() Retourne l'objet source de l'événement.
int getID() Retourne le type d'événement.
Retourne les coordonnées de la souris lors de la génération de
Point getPoint() l'événement.
Retourne la coordonnée en X de la souris lors de la génération de
int getX() l'événement.
Retourne la coordonnée en Y de la souris lors de la génération de
int getY() l'événement.
Retourne un entier indiquant si les touches maj, alt ou ctrl étaient
int getModifiers appuyées au moment de la génération de l'événement.
long getWhen() Retourne la date et l'heure de la génération de l'événement.
Retourne quel bouton a été cliqué. les trois valeurs possibles
int getButton()) sont : MouseEvent.BUTTON1,
MouseEvent.BUTTON2, MouseEvent.BUTTON3
int getClickCount() Retourne le nombre de clics associés à cet événement.
KeyEvent
 Les événements sont générés dans l'ordre :
 keyPressed
 keyTyped : pour les touches qui ont un effet sur le
texte d'un composant texte.
 keyReleased
 interface MouseListener{
void keyTyped(KeyEvent e);
void keyPressed(KeyEvent e);
void KeyReleased(KeyEvent e);
}
 Tous les composants peuvent être sources de
KeyEvent
KeyEvent
>Object getSource() Retourne l'objet source de l'événement.

int getID() Retourne le type d'événement.

Retourne le caractère correspondant à la touche du


clavier, ou
char getKeyChar() java.awt.event.KeyEvent.CHAR_UNDEFINED
s'il n'y a pas de caractère associé à la touche
(touche de fonction par exemple).
Retourne le code du caractère correspondant à la
int getKeyCode()
touche du clavier.
Retourne un entier indiquant si les touches maj, alt ou
int getModifiers ctrl étaient appuyées au moment de la
génération de l'événement.
Retourne la date et l'heure de la génération de
long getWhen()
l'événement.
Retourne le modifieur sous forme de chaîne de
String getKeyModifiersText(int >
caractères : Maj+Crtl+Alt.
mod)
Adaptateur
 Un adaptateur XxxAdapter est une classe
abstraite qui fourni une implémentation de la
classe XxxListener. Les méthodes implémentées
sont toutes vides, et ainsi permettent à un
utilisateur de l'adaptateur de ne redéfinir que le
traitement qui l'intéresse.
Adaptateur
 Exemple : Un adaptateur qui ne redéfinit
que KeyPressed et keyTyped :
composantSource.addKeyListener(new
java.awt.event.KeyAdapter(){
public void keyPressed(
java.awt.event.KeyEvent e){
...
}
public void keyTyped(
java.awt.event.KeyEvent e){ . . . }
});

Vous aimerez peut-être aussi