You are on page 1of 30

Part 7

LA PROGRAMMATION
GRAPHIQUE EN JAVA

Interface utilisateur

 Beaucoup de programmes informatiques nécessitent


 L'affichage de questions posées à l'utilisateur
 L'entrée de données par l'utilisateur
 L'affichage d'une partie des résultats obtenus

 Cet échange d'informations peut s'effectuer avec une interface


utilisateur en mode texte (ou console) ou en mode graphique.
 Une interface graphique est formée d'une ou plusieurs fenêtres
contenant divers composants graphiques (widgets) tels que :
 Boutons, listes déroulantes, menus, champ texte, etc.

 Les interfaces graphiques sont souvent appelées GUI (Graphical User


Interface) ou IHM (Interface Homme Machine)

Prof Asmaa El Hannani ISIC-S1 334

1
Programmation conduite par les événements

 L'utilisation d'interfaces graphiques impose une façon


particulière de programmer.

 La programmation "conduite par les événements" :


 Les actions de l'utilisateur engendrent des événements qui sont
mis dans une file d'attente.
 Le programme récupère un à un ces événements et les traite.

 Les boîtes à outils graphiques offrent des facilités pour utiliser


et gérer la file d'attente des événements.

Prof Asmaa El Hannani ISIC-S1 335

L'interface graphique d'une application Java

 Bibliotheque JFC (Java Foundation Classes) :


 AWT (Abstract Windowing Toolkit)
 premiere version, rôle important dans le succes de Java
 composants lourds, c-a-d. apparies avec des composants natifs

 Swing
 construit au-dessus de AWT
 composants bien plus nombreux et perfectionnes
 composants légers, « 100% pur Java »

 Attention aux noms des composants:


 AWT : Frame, Button, Panel...
 Swing : JFrame, JButton, JPanel...

Prof Asmaa El Hannani ISIC-S1 336

2
Swing ou AWT ?

 Tous les composants de AWT ont leur équivalent dans Swing,


avec plus de fonctionnalités

 Swing offre de nombreux composants qui n'existent pas ans


AWT
 Mais utilise encore le modèle de gestion d'évènements de AWT

 Il est fortement conseillé d'utiliser les composants Swing, dont


nous ferons l'introduction ici.

Prof Asmaa El Hannani ISIC-S1 337

Paquetages principaux

 AWT : java.awt et java.awt.event

 Swing : javax.swing et javax.swing.event, et tout un


ensemble de sous-paquetages de javax.swing.

Prof Asmaa El Hannani ISIC-S1 338

3
Principaux composants Swing

 Les composants du package Swing héritent de la classe


JComponent

 Hiérarchie d'héritage

java.lang.Object
+--java.awt.Component
+--java.awt.Container
+--javax.swing.JComponent

Prof Asmaa El Hannani ISIC-S1 339

Principaux composants Swing


 JFrame : fenêtre
 JPanel : panneau d'ensemble de composants
 JTextField : zone de texte
 JLabel : étiquette
 JCheckBox : case à cocher
 JRadioButton : bouton radio
 JList : zone de liste
 JComboBox : liste déroulante
 JMenu : menu
 JToolBar : barre d’outils
 etc, etc...

Prof Asmaa El Hannani ISIC-S1 340

4
Créer une interface

La fenêtre JFrame

Prof Asmaa El Hannani ISIC-S1 342

5
La fenêtre JFrame

Fichier Simple1.java

Prof Asmaa El Hannani ISIC-S1 343

La fenêtre JFrame

 Attention: la case de fermeture n'est pas opérationnelle


(le cadre disparaît mais l'application ne se termine pas)

Prof Asmaa El Hannani ISIC-S1 344

6
La fenêtre JFrame

 Une manière pour régler cette affaire de la case de fermeture :


Fichier Simple2.java

Prof Asmaa El Hannani ISIC-S1 345

Le panneau JPanel

 Composant rectangulaire capable de recevoir des composants graphiques


et qui permet de définir dans une fenêtre plusieurs zones .

 Pour ajouter le panneau à la fenêtre cadre on utilise:


JPanel p = new JPanel();
cadre.setContentPane(p);

 Par défaut une fenêtre contient un conteneur de classe Container donc


on peut définir un panneau dans la fenêtre courante par
JPanel p = (JPanel)getContentPane();

Prof Asmaa El Hannani ISIC-S1 346

7
Le panneau JPanel
 Mettons un panneau rouge dans le cadre :
Fichier Simple3.java

Prof Asmaa El Hannani ISIC-S1 347

Le panneau JPanel

 Mettons un panneau rouge dans le cadre :

Prof Asmaa El Hannani ISIC-S1 348

8
Le panneau JPanel
 Quelque chose dans le cadre, une autre approche :
Fichier Simple4.java

Prof Asmaa El Hannani ISIC-S1 349

Le panneau JPanel

Prof Asmaa El Hannani ISIC-S1 350

9
Ajout de composants

 Les composants sont placés dans un panneau.


 Pour placer un composant on l'ajoute au conteneur par la
méthode add de Jpanel.
 Mais la méthode add ajoute toujours le composant au même
endroit dans le conteneur.
 Ainsi lorsqu'on veut ajouter plusieurs composants dans le
panel, seul le dernier composant apparaît.
 Il faut donc répartir les composants!

Prof Asmaa El Hannani ISIC-S1 351

Répartition des composants

 Pour gérer la disposition des composants


 il faut avoir recours à un gestionnaire de répartition
 qui précise pour chaque conteneur l'organisation des composants

 Les gestionnaires de répartition appartiennent au package


java.awt
 FlowLayout
 GridLayout
 BorderLayout

Prof Asmaa El Hannani ISIC-S1 352

10
FlowLayout

 Place les composants les uns à la suite des autres ligne par
ligne en passant à la ligne suivante si nécessaire
 Possède 3 constructeurs :
 FlowLayout()

 FlowLayout(int align)
où align est l’alignement ( LEFT, CENTER, RIGHT)
 FlowLayout(int align, int hgap, int vgap)
où hgap est l'espacement horizontal (donc d’une colonne à une
autre) et vgap l'espacement vertical

Prof Asmaa El Hannani ISIC-S1 353

FlowLayout
Fichier TestFlowLayout.java

Prof Asmaa El Hannani ISIC-S1 354

11
FlowLayout

Prof Asmaa El Hannani ISIC-S1 355

GridLayout
 Place les composants dans une grille
 Possède 3 constructeurs :
 GridLayout()

 GridLayout(int rows, int col) où rows est le


nombre de lignes et col le nombre de colonnes
 GridLayout(int rows, int col, int hgap,
int vgap)idem au précédent plus hgap qui représente
l'espacement horizontal (donc d’une colonne à une autre) et
vgap l'espacement vertical

Prof Asmaa El Hannani ISIC-S1 356

12
GridLayout
Fichier TestGridLayout.java

Prof Asmaa El Hannani ISIC-S1 357

GridLayout

Prof Asmaa El Hannani ISIC-S1 358

13
BorderLayout

 Ce gestionnaire découpe l'écran en 5 régions


 south north east west center
 Il n'y a qu'un seul composant par région
 Répartition NORTH
 La largeur l’emporte pour le Nord et le Sud
 La hauteur l’emporte pour l’Est et l’Ouest WEST CENTER EAST

 Le centre occupe tout ce qui reste SOUTH


 Utilisation
 add(unBouton, BorderLayout.NORTH)
 new BorderLayout(int, int)
 Intervalles horizontal et vertical entre les éléments

Prof Asmaa El Hannani ISIC-S1 359

BorderLayout
Fichier TestBorderLayout.java

Prof Asmaa El Hannani ISIC-S1 360

14
BorderLayout

Prof Asmaa El Hannani ISIC-S1 361

Positionnement absolu

 Pour placer les composants à un endroit précis, il faut indiquer


qu'on utiliser pas de LayoutManager
ObjetConteneur.setLayout(null);

 Et on indique les coordonnées et la taille de chaque composant


Composant.setBounds(x, y, larg, haut);
x est le déplacement par rapport à la gauche du conteneur
y est le déplacement par rapport au haut du conteneur

Prof Asmaa El Hannani ISIC-S1 362

15
Positionnement absolu

 Exemple de positionnement absolu


// positionnement absolu
c.setLayout(null);
bouton1.setBounds(0,0,100,150);
c.add(bouton1);
text1.setBounds(0,150,100,150);
c.add(text1);
label1.setBounds(0,300,100,150);
c.add(label1);

 Mais les composants ne sont pas redimensionnés en cas de


modification de la taille de la fenêtre
Prof Asmaa El Hannani ISIC-S1 363

Comment répartir ?

 Pour concevoir une interface graphique


 on la découpe en parties, chaque partie étant un conteneur
Jpanel géré par un gestionnaire de répartition
 les différents panneaux seront ajoutés au conteneur implicite de
la fenêtre

 Exemple: Comment obtient-on les interfaces usuelles avec ces


quelques gestionnaires; TestLayoutComplexe.java

Prof Asmaa El Hannani ISIC-S1 364

16
Layout Complexe

Prof Asmaa El Hannani ISIC-S1 365

Layout Complexe

Prof Asmaa El Hannani ISIC-S1 366

17
Layout Complexe

Prof Asmaa El Hannani ISIC-S1 367

Layout Complexe

Prof Asmaa El Hannani ISIC-S1 368

18
Les évènements

La gestion des évènements


 Certains composants du GUI doivent pouvoir réagir à des
interventions de l'utilisateur.

 Une action de l'utilisateur est traduite par un objet évènement.

 La gestion de l'évènement est déléguée à un écouteur


d'évènement (event listener) qui active le traitement
associé.

Prof Asmaa El Hannani ISIC-S1 370

19
La gestion des évènements
 Les objets événements:
 xxxEvent
 Contiennent la description et les caractéristiques d’un événement

 Les objets écouteurs:


 xxxListener ou xxxAdapter
 Concrétisent des méthodes définies dans les Interfaces
 Indiquent leur réaction en réponse aux événements
 Sont des interfaces implémentables dans les classes
 Peuvent être implémentés par les sources d’événements elles
mêmes (Une source d’événements peut « s’écouter » elle-même)

Prof Asmaa El Hannani ISIC-S1 371

La gestion des évènements


 Evénements
 ActionEvent, AdjustmentEvent, ComponentEvent, KeyEvent,
ContainerEvent, FocusEvent, ItemEvent, MouseEvent,
TextEvent, WindowEvent
 Les Interfaces Ecouteurs
 ActionListener, AdjustmentListener, ComponentListener,
ContainerListener, FocusListener, ItemListener,
KeyListener, MouseListener, MouseMotionListener,
WindowListener
 Les Adapteurs correspondants
 ActionAdapter, WindowAdapter, KeyAdapter, MouseAdapter,
etc.
 Les Sources d’événements
 Button, List, MenuItem, TextField, ScrollBar, CheckBox,
Component, Container, Window

Prof Asmaa El Hannani ISIC-S1 372

20
Ecouteur et évènements
Description Interface d'écouteur Adaptateur Type événement
Actions sur un
ActionListener ActionEvent
composant
Ajustement d'une
AdjustementListener AdjustementEvent
barre de défilement
Sélection d'un élément ItemListener ItemEvent
Le composant reçoit
FocusListener FocusAdapter FocusEvent
ou perd le focus
Actions au clavier KeyListener KeyAdapter KeyEvent
Actions sur la souris MouseListener MouseAdapter MouseEvent
Actions de la souris MouseMotionAd
MouseMotionListener MouseEvent
sur un composant apter
Actions sur la fenêtre WindowListener WindowAdapter WindowEvent
Changement d'une
TextListener TexdEvent
zone de texte

Prof Asmaa El Hannani ISIC-S1 373

Principe

 Le modèle événementiel fait intervenir trois catégories d'objets


 les objets sources (ex un bouton JButton) envoient aux objets
écouteurs des objets évènements.
 les objets écouteurs (ex ActionListener) déterminent
l'action à mener grâce à l'information contenue dans les objets
évènements qu'ils reçoivent.
 les objets événements (ex ActionEvent) sont des instances de
différentes classes évènements qui héritent de OjectEvent.

Prof Asmaa El Hannani ISIC-S1 374

21
Démarche

 Le composant doit s’inscrire auprès d’un objet écouteur pour


chaque classe d’événements à traiter
composant.addXXXListener(objetEcouteur);

 Il faut indiquer que la classe de l’objet écouteur implémente


l’interface écouteur
 Puis redéfinir la ou les méthodes de l’interface écouteur pour
les événements à gérer comme par exemple la méthode
actionPerformed si l'interface est ActionListener

Prof Asmaa El Hannani ISIC-S1 375

Détecter l'action sur un bouton pour changer la couleur du JPanel

Fichier TestEventBouton1.java

Prof Asmaa El Hannani ISIC-S1 376

22
Détecter l'action sur un bouton pour
changer la couleur du JPanel

Lorsqu’on clique sur Rouge Lorsqu’on clique sur Vert

Prof Asmaa El Hannani ISIC-S1 377

Détecter l'action sur un bouton pour changer le contenu d’un JLabel

Fichier TestEventBouton2.java

Prof Asmaa El Hannani ISIC-S1 378

23
Détecter l'action sur un bouton pour changer
le contenu d’un JLabel

Lorsqu’on clique sur OK Lorsqu’on clique sur Vert

Prof Asmaa El Hannani ISIC-S1 379

Les adaptateurs

 Rappel: une classe qui implémente une interface doit redéfinir


toutes les méthodes de l’interface

 Or certaines interfaces listener ont beaucoup de méthodes,


ce qui oblige à redéfinir des méthodes dont on n’a aucune
utilité.

 Pour remédier à cela Java propose des classes Adapter pour


certaines interfaces listener.

Prof Asmaa El Hannani ISIC-S1 380

24
Les adaptateurs

 Au lieu d’implémenter l’interface il suffira d’hériter de la


classe Adapter.
 Dans ce cas le développeur ne redéfinit que les méthodes qui
l'intéresse.
 Java propose ainsi un ensemble de classe Adapter.
 Le principe de nommage est simple: une classe nommée
XXXAdapter correspond à l’interface écouteur
XXXListener .

Prof Asmaa El Hannani ISIC-S1 381

Exemple:

 Réalisation d’une petite calculatrice basique :


Calculatrice.java

Prof Asmaa El Hannani ISIC-S1 382

25
Autres composants

Les boîtes de dialogue standard

 On utilise la classe JOptionPane pour les boîtes de


dialogue standard prêtes à l'emploi.

 Quatre types de boîtes


 MessageDialog pour afficher un message
 ConfirmDialog pour une réponse de l'utilisateur avec Yes, No et
Cancel
 InputDialog pour une invite de saisie
 OptionDialog qui rassemble les caractéristiques des 3 autres types
de boîtes de dialogue

Prof Asmaa El Hannani ISIC-S1 384

26
MessageDialog

Prof Asmaa El Hannani ISIC-S1 385

Exemples:

 Utilisation d'une fenêtre de dialogue pour avoir un simple avertissement:


Dialogue1.java
 Utilisation d'une fenêtre de dialogue pour poser une question et récupérer la
réponse parmi YES, NO et CANCEL: Dialogue2.java
 Utilisation d'une fenêtre de dialogue pour poser une question et récupérer la
réponse dans un choix libre: Dialogue3.java
 Utiliser une fenêtre de dialogue pour saisir une chaîne de caractères:
Dialogue5.java
 Une fenêtre de dialogue pour choisir une couleur : JColorChooser:
Couleurs.java
 Une fenêtre de dialogue pour choisir un fichier : JFileChooser :
EssaiChoixFichier.java

Prof Asmaa El Hannani ISIC-S1 386

27
Les menus

 Il existe plusieurs classes pour créer des menus en Java


 JMenu qui sert à créer un menu

 JMenubar sert à créer une barre de menus

 JPopup sert à créer un menu déroulant

 JMenuItem est un item d’un menu.

 JCheckBoxMenuItem est un item d’un menu que l’on peut cocher

 JRadioButtonMenuItem est un item avec un puce Radio

Prof Asmaa El Hannani ISIC-S1 387

Exemple

 Exemple: Menu1.java

Prof Asmaa El Hannani ISIC-S1 388

28
Graphisme 2D

 Tout ce qui est nécessaire aux graphismes en 2D est fourni par


la classe Graphics
 Chaque composant est toujours doté d’un objet de ce type
 Graphics g

 On peut donc invoquer, sur cet objet graphique « g », toutes


les méthodes de graphisme:
 g.drawLine(int, int, int, int)
 g.drawRect(int, int, int, int)
 g.fillOval(int, int, int, int)
 g.setColor(Color)
 Etc.

Prof Asmaa El Hannani ISIC-S1 389

Graphisme 2D: Classe Rectangle

 Classe fournie dans le package java.awt


 Idéale pour servir de squelette à la plupart des objets graphiques
 On peut inscrire toutes les formes dans un rectangle
 Attributs publics:
 int x,y, width, height

 Méthodes publiques
 contains(int x, int y)

 Renvoie true si les coordonnées sont contenues dans le rectangle

 contains(Rectangle r)

 Renvoie true si le rectangle r est contenu dans le rectangle en cours

 intersects(Rectangle r)

 Renvoie true si le rectangle r touche le rectangle en cours

 …

Prof Asmaa El Hannani ISIC-S1 390

29
Exemple

 Dans l’exemple: Clics.java, vous dessinez, en cliquant un petit


cercle ou un disque de couleur aléatoire.

 Essayez les trois boutons de la souris, et appuyez aussi en


même temps sur la touche "shift". Vous devez constater une
différence.

Prof Asmaa El Hannani ISIC-S1 391

Documentation

 Pour plus de détails et exemples visitez:


http://docs.oracle.com/javase/tutorial/uiswing

Prof Asmaa El Hannani ISIC-S1 392

30

You might also like