Upload
hathien
View
251
Download
1
Embed Size (px)
Citation preview
P.O.O. (Programmation
Orientée Objet)
CHOUITI Sidi Mohammed
Cours pour L2 en Informatique
Département d’Informatique
Université de Tlemcen
2017-2018
UABB-Tlemcen – Départ d’Informatique 2
Plan du cours
1. Introduction à la Programmation Orientée Objet
2. Classes et objets
3. Héritage et polymorphisme
4. Interface et implémentation
5. Classes importantes en java
6. Gestion des exceptions
7. Interface graphique et Applet
8. …
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 3
Interfaces graphiques
IHM
Les interfaces homme-machine (dénommées IHM) assurernt
ergonomie et interactivité avec l'utilisateur
Elles font intervenir des éléments tels que : les fenêtres, les
menus déroulants, les boutons, etc.
IHM avec Java
Ensemble de classes permettant de construire et de manipuler des
interfaces graphiques sous java.
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 4
Interfaces graphiques
Paquetage : java.awt (Abstract Window Toolkit)
• Ce package est la base des extensions ultérieures comme
Swing.
• Les classes contenues dans AWT dérivent (héritent) toutes de
la classe Component.
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 5
Paquetage : java.awt (Abstract Window Toolkit)
Container
classe abstraite
Composants qui en
contiennent d’autres
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 6
Les classes Conteneurs
• Dérivent de la classe java.awt.Container,
• Essentielles pour la construction d'IHM Java
• Permettent d'intégrer d'autres objets visuels et de les
organiser à l'écran.
Paquetage : java.awt (Abstract Window Toolkit)
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 7
Les principales classes conteneurs
Paquetage : java.awt (Abstract Window Toolkit)
Classe Fonction
java.awt.Window Crée des rectangles simples sans cadre, sans
menu, sans titre.
java.awt.Panel Crée une surface sans bordure, capable de
contenir d'autres éléments : boutons, panel, etc.
java.awt.ScrollPane Crée une barre de défilement horizontale et/ou
verticale.
java.awt.Frame Crée des fenêtres avec bordure, pouvant
intégrer des menus, avec un titre, etc.
java.awt.Dialog Crée une fenêtre de dialogue avec l'utilisateur.
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 8
Quelques méthodes de la classe Frame :
Paquetage : java.awt (Abstract Window Toolkit)
Méthode Fonction
public void setSize(int width,
int height)
retaille la largeur (width) et la hauteur
(height) de la fenêtre.
public void setBounds(int x,
int y, int width, int height)
retaille la largeur (width) et la hauteur
(height) de la fenêtre et la positionne en
x,y sur l'écran.
public Frame(String title)
public Frame( )
Les deux constructeurs d'objets Frame,
celui qui possède un paramètre String
écrit la chaîne dans la barre de titre de
la fenêtre.
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 9
Quelques méthodes de la classe Frame :
Paquetage : java.awt (Abstract Window Toolkit)
Méthode Fonction
public void
setVisible(boolean b )
Change l'état de la fenêtre en mode visible
ou invisible selon la valeur de b.
public void hide( ) Change l'état de la fenêtre en mode
invisible.
Différentes surcharges de la
méthode add :
public Component
add(Component comp)
etc.
Permettent d'ajouter un composant à
l'intérieur de la fenêtre.
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 10
Exemple 1 :
Paquetage : java.awt (Abstract Window Toolkit)
import java.awt.*;
class AppliWindow
{
public static void main(String [ ] arg) {
Frame fen = new Frame ("Bonjour" );
fen. setVisible ( true );
}
}
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 11
Exemple 1 :
Paquetage : java.awt (Abstract Window Toolkit)
Ci-dessous la fenêtre affichée par le programme précédent :
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 12
Exemple 2 :
Paquetage : java.awt (Abstract Window Toolkit)
import java.awt.*;
class AppliWindow2
{
public static void main(String [ ] arg) {
Frame fen = new Frame ("Bonjour" );
fen.setBounds (100, 100, 250, 150);
fen. setVisible ( true );
}
}
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 13
Exemple 2 :
Paquetage : java.awt (Abstract Window Toolkit)
Ci-dessous la fenêtre affichée par le programme précédent :
fen.setBounds(100,100,250,150);
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 14
•Comme ce sont des objets conteneurs, il est possible en particulier,
d'y inclure des composants.
•Enrichissons notre fenêtre précédente d'un bouton poussoir et de
deux radio boutons
Paquetage : java.awt (Abstract Window Toolkit)
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 15
Exemple 3 :
Paquetage : java.awt (Abstract Window Toolkit)
import java.awt.*;
class AppliWindow3 {
public static void main(String [ ] arg) {
…
fen.setLayout(new FlowLayout( ));
Button entrez = new Button("Entrez");
Checkbox bout1 = new Checkbox("Choix 1");
Checkbox bout2 = new Checkbox("Choix 2");
fen.add(entrez);
fen.add(bout1); fen.add(bout2);
fen.setVisible ( true );
}
}
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 16
Exemple 3 :
Paquetage : java.awt (Abstract Window Toolkit)
Ci-dessous la fenêtre affichée par le programme précédent :
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 17
fen.setLayout(new FlowLayout( ));
• Sert à positionner les objets visuellement dans la fenêtre les
uns à côté des autres.
• La classe FlowLayout place les composants dans une ligne,
dimensionnés à leur taille par défaut.
Paquetage : java.awt (Abstract Window Toolkit)
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 18
• Enrichissons notre fenêtre maintenant d‘une barre de menus
contenant deux menus : "fichier" et "édition" :
Paquetage : java.awt (Abstract Window Toolkit)
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 19
Exemple 4 :
Paquetage : java.awt (Abstract Window Toolkit)
…
// les menus :
MenuBar mbar = new MenuBar( );
Menu meprinc1 = new Menu("Fichier");
Menu meprinc2 = new Menu("Edition");
MenuItem item1 = new MenuItem("choix n°1");
MenuItem item2 = new MenuItem("choix n° 2");
fen.setMenuBar(mbar);
meprinc1.add(item1); meprinc1.add(item2);
mbar.add(meprinc1); mbar.add(meprinc2);
fen.setVisible ( true );
}
}
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 20
Exemple 4 :
Paquetage : java.awt (Abstract Window Toolkit)
Ci-dessous la fenêtre affichée par le programme précédent :
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 21
Exemple 4 :
Paquetage : java.awt (Abstract Window Toolkit)
La fenêtre après que l'utilisateur clique sur le menu Fichier :
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 22
Exemple 4 :
Paquetage : java.awt (Abstract Window Toolkit)
MenuBar mbar = new MenuBar( );
Menu meprinc1 = new Menu("Fichier");
Menu meprinc2 = new Menu("Edition");
MenuItem item1 = new MenuItem("choix n°1");
MenuItem item2 = new MenuItem("choix n° 2");
A cet instant du programme tous ces objets existent mais ne
sont pas attachés entre eux.
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 23
Exemple 4 :
Paquetage : java.awt (Abstract Window Toolkit)
fen.setMenuBar(mbar);
• La méthode setMenuBar de la classe Frame sert à
attacher (inclure) à la fenêtre fen de classe Frame,
l'objet barre de menus mbar .
meprinc1.add(item1);
meprinc1.add(item2);
• servent grâce à la méthode add de la classe Menu, à
attacher les deux objets (sous-menus) nommés item1
et item2 au menu principal meprinc1.
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 24
Exemple 4 :
Paquetage : java.awt (Abstract Window Toolkit)
mbar.add(meprinc1);
mbar.add(meprinc2);
• servent grâce à la méthode add de la classe MenuBar,
à attacher les deux objets de catégorie menu principal
nommés meprinc1 et meprinc2, à la barre des menus
mbar
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 25
L’API swing :
Paquetage : javax.swing
•Apparue dès Java 2, en proposant des composants dits "légers",
•Indépendants du système d’exploitation
•Dotés de propriétés plus riches que ceux de AWT.
•Les deux API utilisent des concepts semblables, mais pas
totalement identiques.
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 26
JFrame :
Paquetage : javax.swing
import javax.swing.* ;
public class Premfenetre{
public static void main (String args[]){
JFrame fen = new JFrame() ;
fen.setSize (300, 150) ;
fen.setTitle ("Ma premiere fenetre") ;
fen.setVisible (true) ;
}
}
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 27
Différence entre une fenêtre JFrame et la console
Paquetage : javax.swing
import javax.swing.* ;
public class Premfenetre1{
public static void main (String args[]){
System.out.println ("debut main") ;
JFrame fen = new JFrame() ;
fen.setSize (300, 150) ;
fen.setTitle ("Ma premiere fenetre") ;
System.out.println("avant affichage fenetre") ;
fen.setVisible (true) ;
System.out.println ("fin main") ;
}
}
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 28
Arrêt du programme
La fenêtre Jframe continue de s’exécuter notion de thread
Paquetage : javax.swing
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 29
Fenêtre personnalisée
Paquetage : javax.swing
import javax.swing.* ;
class MaFenetre extends JFrame{
public MaFenetre () {
setTitle ("Ma premiere fenetre") ;
setSize (300, 150) ;
}
}
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 30
Fenêtre personnalisée
Paquetage : javax.swing
import javax.swing.JFrame;
public class Premfen1{
public static void main (String args[]){
JFrame fen = new MaFenetre() ;
fen.setVisible (true) ;
}
}
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 31
Modification des caractéristiques d’une fenêtre
Paquetage : javax.swing
…
Scanner sc = new Scanner(System.in);
while (true) {// fin sur longueur titre nulle
System.out.print ("nouvelle largeur : ") ; int larg=sc.nextInt() ;
System.out.print ("nouvelle hauteur : "); int haut=sc.nextInt();
System.out.print ("nouveau titre : (vide pour finir) ");
sc.nextLine(); String tit = sc.nextLine() ;
if (tit.length() == 0) break ;
fen.setSize (larg, haut) ; fen.setTitle(tit) ;
}
}
}
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 32
Arrêt du programme:
Paquetage : javax.swing
• La programmation événementielle constitue la
caractéristique essentielle d’une interface graphique
• Exemple d’événement : un clic dans la fenêtre principale
Gestion d’un clic dans la fenêtre
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 33
Arrêt du programme:
Paquetage : javax.swing
• Tout événement possède ce que l’on nomme une source
• Il Objet lui ayant donné naissance : bouton, menu, sous-
menu, fenêtre, etc.
• Dans notre exemple, cette source sera la fenêtre
principale.
Gestion d’un clic dans la fenêtre
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 34
Paquetage : javax.swing
• On associe à la source un objet de son choix dont la classe
implémente une interface particulière correspondant à
une catégorie d’événements
• Chaque méthode proposée par l’interface correspond à un
événement de la catégorie
• Catégorie d’événements souris qu’on peut traiter avec un
écouteur de souris (interface MouseListener).
• mousePressed, mouseReleased, mouseEntered,
mouseExited et mouseClicked.
Gestion d’un clic dans la fenêtre
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 35
Gestion d’un clic dans la fenêtre
Paquetage : javax.swing
class EcouteurSouris implements MouseListener{
public void mouseClicked (MouseEvent ev) { ..... }
public void mousePressed (MouseEvent ev) { ..... }
public void mouseReleased(MouseEvent ev) { ..... }
public void mouseEntered (MouseEvent ev) { ..... }
public void mouseExited (MouseEvent ev) { ..... }
// autres methodes et champs de la classe
}
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 36
Paquetage : javax.swing
Gestion d’un clic dans la fenêtre
public void mouseClicked(MouseEvent ev){
System.out.println ("clic dans fenetre") ;
}
Introduire dans le constructeur de notre fenêtre une instruction
de la forme
addMouseListener (objetEcouteur) ;
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 37
Paquetage : javax.swing
Gestion d’un clic dans la fenêtre
class MaFenetre extends JFrame implements MouseListener{
public MaFenetre () { // constructeur
.....
addMouseListener (this) ; // la fenêtre sera son propre
// écouteur d’évenements souris
}
public void mouseClicked(MouseEvent ev) {
System.out.println ("clic dans fenêtre") ;
}
public void mousePressed (MouseEvent ev) {} …
// autres méthodes de la classe MaFenetre
}
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 38
Paquetage : javax.swing
Notion d’Adaptateur
•Nous avons besoin que de la méthode mouseClicked.
•Mais nous avons dû fournir des définitions vides pour les
autres afin d’implémenter correctement toutes les méthodes
requises par l’interface MouseListener.
MouseAdapter implements MouseListener{
public void mouseClicked (MouseEvent ev) {}
public void mousePressed (MouseEvent ev) {}
public void mouseReleased(MouseEvent ev) {}
public void mouseEntered (MouseEvent ev) {}
public void mouseExited (MouseEvent ev){}
}
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 39
Paquetage : javax.swing
Classe MouseEvent
• Argument transmis à la méthode mouseClicked.
• Un objet de cette classe est automatiquement créé par
Java, et transmis à l’écouteur voulu.
• Il contient un certain nombre d’informations, en
particulier les coordonnées du curseur de souris au
moment du clic
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 40
Arrêt du programme:
Paquetage : javax.swing
Ajout dans la fenêtre
Le composant Container
• Une Jframe possède toujours ce qu'on appelle un
conteneur (container)
Container
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 41
Arrêt du programme:
Paquetage : javax.swing
Ajout dans la fenêtre
Le composant Container
• JFrame dispose de deux méthodes:
JFrame.getContentPane () et
JFrame.setContentPane ()
Qui permettent d’accéder et de modifier le
Container contentPane de la JFrame
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 42
Arrêt du programme
Paquetage : javax.swing Exemple
import javax.swing.*; import java.awt.*;
public class Fenetre {
public static void main(String[] arg) {
JFrame cadre = new JFrame("Premiere fenetre");
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(250, 150));
panel.setBackground(Color.RED);
cadre.setContentPane(panel);
cadre.setLocation(400, 300);
cadre.pack();
cadre.setVisible(true);
cadre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 43
Paquetage : javax.swing
Exemple
pack() calcule la dimension de la fenêtre en fonction de ce qui
est mis à l'intérieur.
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
On demande par cette instruction que l'application se termine
quand on ferme la fenêtre.
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 44
Arrêt du programme
Paquetage : javax.swing
Exemple
import javax.swing.*; import java.awt.*;
public class Fenetre {
public static void main(String[] arg) {
JFrame cadre = new JFrame("Premiere fenetre");
JPanel panel = (JPanel) cadre.getContentPane ();
panel.setPreferredSize(new Dimension(250, 150));
panel.setBackground(Color.RED);
cadre.setLocation(400, 300);
cadre.pack();
cadre.setVisible(true);
cadre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 45
Arrêt du programme:
Paquetage : javax.swing
Ajout dans la fenêtre
Création d’un bouton et ajout dans la fenêtre
JButton monBouton = new JButton("Essai");
getContentPane().add(MonBouton);
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 46
Arrêt du programme:
Paquetage : javax.swing
Ajout dans la fenêtre
Exemple
import javax.swing.* ; import java.awt.*;
class Fen1Bouton extends JFrame{
private JButton monBouton ;
public Fen1Bouton (){
setTitle ("Premier bouton") ;
setSize (300, 200) ;
monBouton =new JButton ("Essai");
getContentPane().add(monBouton);
getContentPane().setLayout(new FlowLayout());
}
}
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 47
Arrêt du programme:
Paquetage : javax.swing
Gestion du bouton avec un écouteur
•Créer un écouteur
objet d’une classe qui implémente l’interface ActionListener
Cette classe ne contient qu’une méthode : actionPerformed
•Associer cet écouteur
au bouton par la méthode addActionListener
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 48
Arrêt du programme:
Paquetage : javax.swing
Gestion du bouton avec un écouteur
Exemple
import javax.swing.*;import java.awt.event.*;import java.awt.*;
class Fen2Bouton extends JFrame implements ActionListener {
private JButton monBouton ;
public Fen2Bouton () {
…
monBouton.addActionListener(this);
getContentPane().setLayout(new FlowLayout());
}
public void actionPerformed (ActionEvent ev){
System.out.println ("action sur bouton ESSAI") ;
}
}
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 49
Arrêt du programme:
Paquetage : javax.swing
Gestion du bouton avec un écouteur
Entrée de plusieurs boutons
…
private JButton monBouton1, monBouton2;
monBouton1 =new JButton (”Bouton A");
monBouton2 =new JButton (”Bouton B");
getContentPane().add(monBouton1);
getContentPane().add(monBouton2);
...
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 50
Arrêt du programme:
Paquetage : javax.swing
Gestion du bouton avec un écouteur
La fenêtre écoute les boutons
…
… // la fenêtre écoute monBouton1
monBouton1.addActionListener(this);
// la fenêtre écoute monBouton2
monBouton2.addActionListener(this);
}
// gestion commune de tous les boutons
public void actionPerformed (ActionEvent ev) {
System.out.println ("action sur un bouton") ;
}
...
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 51
Arrêt du programme:
Paquetage : javax.swing
Gestion du bouton avec un écouteur
Gestion séparée des deux boutons
…
… public void actionPerformed (ActionEvent ev){
if (ev.getSource() == monBouton1)
System.out.println ("action sur bouton numéro 1") ;
if (ev.getSource() == monBouton2)
System.out.println ("action sur bouton numéro 2") ;
}
...
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 52
Arrêt du programme:
Paquetage : javax.swing
Gestion du bouton avec un écouteur
Classe écouteur différente de la fenêtre
Dans les exemples précédents, on a fait de la fenêtre l’objet
écouteur des boutons
Deux possibilités :
• Une classe écouteur par bouton
• Une seule classe écouteur pour tous les boutons
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 53
Arrêt du programme:
Paquetage : javax.swing
Gestion du bouton avec un écouteur
Classe écouteur différente de la fenêtre
• Une classe écouteur par bouton
class EcouteBouton1 implements ActionListener{
public void actionPerformed (ActionEvent ev){
System.out.println ("action sur bouton 1") ;
}
}
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 54
Arrêt du programme:
Paquetage : javax.swing
Gestion du bouton avec un écouteur
Classe écouteur différente de la fenêtre
• Une seule classe écouteur pour tous les boutons
class EcouteBouton implements ActionListener{
public void actionPerformed (ActionEvent ev){
if (ev.getSource() == monBouton1)
System.out.println ("action sur bouton numéro 1") ;
if (ev.getSource() == monBouton2)
System.out.println ("action sur bouton numéro 2") ;
}
}
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 55
Arrêt du programme:
Paquetage : javax.swing
Gestion du bouton avec un écouteur
Classe écouteur différente de la fenêtre
Dans les exemples précédents, on a fait de la fenêtre l’objet
écouteur des boutons
Deux possibilités :
• Une classe écouteur par bouton
• Une seule classe écouteur pour tous les boutons
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 56
Arrêt du programme:
Paquetage : javax.swing
Dynamique des composants
il faut savoir qu’on peut, à tout instant :
• créer un nouveau composant : conteneur.add(compo);
• supprimer un composant,
• désactiver un composant : compo.setEnabled (false) ;
• réactiver un composant désactivé : compo.setEnabled (true);
Aussi tester s’il est activé ou non : compo.isEnabled() ;
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 57
Arrêt du programme:
Paquetage : javax.swing
Dynamique des composants
Exemple :
class EcoutCr implements ActionListener{
private Container contenu ;
public EcoutCr (Container contenu){
this.contenu = contenu ;
}
public void actionPerformed (ActionEvent ev){
JButton nouvBout = new JButton ("BOUTON") ;
contenu.add(nouvBout) ;
contenu.validate(); // pour recalculer
}
}
UABB-Tlemcen – Département d’Informatique - cours de GL1 pour Master SIC & MID 58
Arrêt du programme:
Paquetage : javax.swing
Dynamique des composants
class FenBoutonsDyn extends JFrame{
private JButton crBouton ;
public FenBoutonsDyn () {
…
Container contenu = getContentPane() ;
contenu.setLayout (new FlowLayout()) ;
crBouton = new JButton ("CREATION BOUTON") ;
contenu.add(crBouton) ;
EcoutCr ecoutCr = new EcoutCr (contenu) ;
crBouton.addActionListener (ecoutCr) ;
}
}