Java INFRES1A Cours 2

publicité
Programmation Java
Programmation d’interfaces graphiques en Java
Christelle Urtado & Sylvain Vauttier
Septembre 2013
Interfaces graphiques en Java
Plan
Introduction
Composants
disponibles
! Java propose des librairies de classes «!toutes faites!» pour
construire, facilement et de manière souple, des interfaces
graphiques évoluées
" java.awt
" javax.swing
Dessin des
interfaces
Réactivité des
interfaces
1
Les boutons
Plan
Introduction
Composants
disponibles
! Un bouton (classe JButton) est un dispositif
d’entrée de type «!appuyer pour activer!».
! Un bouton peut contenir du texte et/ou une
image.
Dessin des
interfaces
Réactivité des
interfaces
...
JButton monBouton1 = new JButton ("Bouton 1");
JButton monBouton2 = new JButton (new ImageIcon ("maison.gif"));
JButton monBouton3 = new JButton ("Bouton 3",
new ImageIcon ("maison.gif"));
...
import java.awt.*;
import javax.swing.*;
class ProgPpal
{
public static void main (String args [])
{
JFrame maFenetre = new JFrame ("Ma premiere fenetre");
JButton monBouton1 = new JButton ("Bouton 1");
JButton monBouton2 = new JButton (new ImageIcon ("maison.gif"));
JButton monBouton3 = new JButton ("Bouton 3",
new ImageIcon ("maison.gif"));
maFenetre.getContentPane ().setLayout (new FlowLayout (FlowLayout.CENTER));
maFenetre.getContentPane ().add (monBouton1);
maFenetre.getContentPane ().add (monBouton2);
maFenetre.getContentPane ().add (monBouton3);
maFenetre.pack ();
maFenetre.setVisible (true);
}
}
3
Les cases à cocher
Plan
Introduction
! La case à cocher (classe JCheckBox) fournit un
dispositif d!’entrée de type «!actif / inactif!»
accompagné
d'une
étiquette
de
texte.
Composants
disponibles
Dessin des
interfaces
...
JCheckBox maCase1 = new JCheckBox ("Option 1");
...
Réactivité des
interfaces
import java.awt.*;
import javax.swing.*;
class ProgPpal
{
public static void main (String args [])
{
JFrame maFenetre = new JFrame ("Ma premiere fenetre");
JCheckBox maCase1 = new JCheckBox ("Option 1");
maFenetre.getContentPane ().setLayout (new FlowLayout (FlowLayout.CENTER));
maFenetre.getContentPane ().add (maCase1);
maFenetre.pack ();
maFenetre.setVisible (true);
}
}
4
Les boutons radio
Plan
Introduction
Composants
disponibles
! Les boutons radio (classe JRadioButton) sont
comparables aux cases à cocher mais sont faits
pour fonctionner en groupe (classe ButtonGroup).
! A un instant donné il ne peut y avoir qu’un et un
seul bouton radio d’activé dans un groupe.
Dessin des
interfaces
Réactivité des
interfaces
...
JRadioButton monBouton1
JRadioButton monBouton2
JRadioButton monBouton3
ButtonGroup monGroupe =
= new JRadioButton ("Bouton 1");
= new JRadioButton ("Bouton 2");
= new JRadioButton ("Bouton 3");
new ButtonGroup ();
monBouton1.setSelected(true);
monGroupe.add (monBouton1);
monGroupe.add (monBouton2);
monGroupe.add (monBouton3);
...
import java.awt.*;
import javax.swing.*;
class ProgPpal
{
public static void main (String args [])
{
JFrame maFenetre = new JFrame ("Ma premiere fenetre");
JRadioButton monBouton1 = new JRadioButton ("Bouton 1");
JRadioButton monBouton2 = new JRadioButton ("Bouton 2");
JRadioButton monBouton3 = new JRadioButton ("Bouton 3");
ButtonGroup monGroupe = new ButtonGroup ();
monBouton1.setSelected(true);
monGroupe.add (monBouton1);
monGroupe.add (monBouton2);
monGroupe.add (monBouton3);
maFenetre.getContentPane
maFenetre.getContentPane
maFenetre.getContentPane
maFenetre.getContentPane
().setLayout (new GridLayout (3,1) );
().add (monBouton1);
().add (monBouton2);
().add (monBouton3);
maFenetre.pack ();
maFenetre.setVisible (true);
}
}
5
Les étiquettes de texte
Plan
Introduction
Composants
disponibles
! Une étiquette (classe JLabel) affiche une ligne
de texte.
! Un étiquette est un composant graphique sur
lequel on ne peut pas agir.
Dessin des
interfaces
Réactivité des
interfaces
...
JLabel monEtiquette = new JLabel ("Etiquette 1");
...
import java.awt.*;
import javax.swing.*;
class ProgPpal
{
public static void main (String args [])
{
JFrame maFenetre = new JFrame ("Ma premiere fenetre");
JLabel monEtiquette = new JLabel ("Etiquette 1");
maFenetre.getContentPane ().setLayout (new FlowLayout
(FlowLayout.CENTER));
maFenetre.getContentPane ().add (monEtiquette);
maFenetre.pack ();
maFenetre.setVisible (true);
}
}
6
Les zones et champs de texte
Plan
Introduction
! La zone de texte (classe JTextArea) est un
dispositif d'entrée de texte multi-lignes, multicolonnes.
Composants
disponibles
! Le champ de texte (classe JTextField) est un
dispositif d’entrée de texte sur une seule ligne.
Dessin des
interfaces
! Ces deux composants peuvent être éditables ou
non.
Réactivité des
interfaces
...
JTextArea maZoneDeTexte = new JTextArea ("Zone de texte multi-ligne,
editable ou non. Zone de texte multi-ligne, editable ou non.
Zone de texte multi-ligne, editable ou non.", 4, 20);
JTextField monChampDeTexte = new JTextField ("Champ de texte sur
une seule ligne, editable ou non.", 20);
...
import java.awt.*;
import javax.swing.*;
class ProgPpal
{
public static void main (String args [])
{
JFrame maFenetre = new JFrame ("Ma premiere fenetre");
JTextArea maZoneDeTexte = new JTextArea ("Zone de texte multi-ligne,
editable ou non. Zone de texte multi-ligne, editable ou non. Zone
de texte multi-ligne, editable ou non.", 4, 20);
JTextField monChampDeTexte = new JTextField ("Champ de texte sur une
seule ligne, editable ou non.", 20);
maZoneDeTexte.setLineWrap(true);
// autorize le retour à la ligne
maZoneDeTexte.setWrapStyleWord(true); // ne coupe pas les mots
maFenetre.getContentPane ().setLayout (new FlowLayout () );
maFenetre.getContentPane ().add (maZoneDeTexte);
maFenetre.getContentPane ().add (monChampDeTexte);
maFenetre.pack ();
maFenetre.setVisible (true);
}
}
7
Les listes
Plan
Introduction
Composants
disponibles
Dessin des
interfaces
Réactivité des
interfaces
! Une liste (classe Jlist) permet de présenter à
l'utilisateur plusieurs options de texte parmi
lesquelles il peut sélectionner un ou plusieurs
éléments.
...
String[] donnees = {"un", "deux", "trois", "quatre"};
JList maListe = new JList (donnees);
maListe.setSelectionMode (ListSelectionModel.SINGLE_SELECTION);
maListe.setSelectedIndex(2);
...
import java.awt.*;
import javax.swing.*;
class ProgPpal
{
public static void main (String args [])
{
JFrame maFenetre = new JFrame ("Ma premiere fenetre");
String[] donnees = {"un", "deux", "trois", "quatre"};
JList maListe = new JList (donnees);
maListe.setSelectionMode (ListSelectionModel.SINGLE_SELECTION);
maListe.setSelectedIndex(2);
maFenetre.getContentPane ().setLayout (new FlowLayout () );
maFenetre.getContentPane ().add (maListe);
maFenetre.pack ();
maFenetre.setVisible (true);
}
}
8
Les sélecteurs de fichier
Plan
! Le sélecteur de fichier (classe JFileChooser)
est un dispositif évolué de sélection de fichier.
Introduction
...
JFileChooser monSelecteur = new JFileChooser ();
int retour = monSelecteur.showOpenDialog(monSelecteur);
...
Composants
disponibles
Dessin des
interfaces
Réactivité des
interfaces
import java.awt.*;
import javax.swing.*;
class ProgPpal
{
public static void main (String args [])
{
JFileChooser monSelecteur = new JFileChooser ();
int retour = monSelecteur.showOpenDialog(monSelecteur);
if(retour == JFileChooser.APPROVE_OPTION)
{
System.out.println("Vous avez choisi le fichier : " +
monSelecteur.getSelectedFile().getName());
}
}
}
9
Les menus (1)
Plan
Introduction
! Il existe une panoplie de composants permettant
de réaliser des menus
Composants
disponibles
Dessin des
interfaces
Réactivité des
interfaces
" les barres de menu (classe JMenuBar),
" les menus (classe Jmenu),
" les éléments de menu (classe JMenuItem).
...
JMenuBar maBarre = new JMenuBar ();
JMenu monMenu1 = new JMenu ("Fichier");
JMenuItem monItem1 = new JMenuItem ("Nouveau ...", KeyEvent.VK_N);
JMenuItem monItem2 = new JMenuItem ("Ouvrir ...");
JMenuItem monItem3 = new JMenuItem ("Sauver ...");
JMenuItem monItem4 = new JMenuItem ("Quitter");
JMenu monMenu2 = new JMenu ("Editer");
monMenu1.setMnemonic(KeyEvent.VK_F);
maBarre.add (monMenu1);
maBarre.add (monMenu2);
monMenu1.add (monItem1);
monMenu1.add (monItem2);
monMenu1.add (monItem3);
monMenu1.add (monItem4);
...
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class ProgPpal
{
public static void main (String args [])
{
JFrame maFenetre = new JFrame ("Ma premiere fenetre");
JMenuBar maBarre = new JMenuBar ();
JMenu monMenu1 = new JMenu ("Fichier");
JMenuItem monItem1 = new JMenuItem ("Nouveau ...", KeyEvent.VK_N);
JMenuItem monItem2 = new JMenuItem ("Ouvrir ...");
JMenuItem monItem3 = new JMenuItem ("Sauver ...");
JMenuItem monItem4 = new JMenuItem ("Quitter");
JMenu monMenu2 = new JMenu ("Editer");
maFenetre.getContentPane ().setLayout (new BorderLayout ());
maFenetre.getContentPane ().add (maBarre, BorderLayout.NORTH);
monMenu1.setMnemonic(KeyEvent.VK_F);
maBarre.add (monMenu1);
maBarre.add (monMenu2);
monMenu1.add (monItem1);
monMenu1.add (monItem2);
monMenu1.add (monItem3);
monMenu1.add (monItem4);
maFenetre.pack ();
maFenetre.setVisible (true);
}
}
10
Les menus (2)
Plan
Introduction
Composants
disponibles
Dessin des
interfaces
Réactivité des
interfaces
! Des
éléments
de
menus
à
cocher
(JCheckBoxMenuItem) permettent de proposer
des cases à cocher dans un menu.
! Des menus contextuels (JPopupMenu) s'affichent,
à la demande, sur un autre composant.
" Pour afficher un JPopupMenu, utiliser la
méthode show(Component pere, int abs,
int ord).
Conteneurs et composants
Plan
Introduction
Composants
disponibles
Dessin des
interfaces
Réactivité des
interfaces
! Les interfaces graphiques Java sont construites
grâce aux notions de conteneur et de composant.
! Un composant est une partie
l'interface utilisateur Java.
«!visible!» de
" Exemple : les fenêtres, les zones de dessin, les
boutons, etc.
" Ce sont des sous-classes de la classe abstraite
java.awt.Component.
! Un conteneur est un espace dans lequel on peut
disposer plusieurs composants.
" Un conteneur est lui même un composant, ce qui
implique que l!’on peut imbriquer des conteneurs.
" La méthode add() de la classe Container
permet d'ajouter un composant à un conteneur.
6
Gestionnaire de présentation
Plan
Introduction
Composants
disponibles
! Un gestionnaire de présentation contrôle le
placement et la taille des composants à l'intérieur
de la zone d'affichage d'un conteneur.
! Tout conteneur en possède un par défaut.
" Toute instance de Container référence une
instance de LayoutManager. Pour en changer, on
utilise la méthode setLayout().
Dessin des
interfaces
Réactivité des
interfaces
! Le ré-agencement des
conteneur a lieu lors de :
composants
dans
un
" la modification de la taille du conteneur,
" le changement de taille ou le déplacement d'un
des composants.
" l'ajout, l'affichage, la
masquage d'un composant.
suppression
ou
le
Un premier exemple
Plan
import java.awt.*;
import javax.swing.*;
Introduction
Composants
disponibles
Dessin des
interfaces
public class ProgPpal
{
public static void main (String args [])
{
JFrame maFenetre = new JFrame ("Ma premiere fenetre");
JButton monBouton1 = new JButton ("Bouton 1");
JButton monBouton2 = new JButton ("Bouton 2");
JButton monBouton3 = new JButton ("Bouton 3");
Réactivité des
interfaces
maFenetre.getContentPane
maFenetre.getContentPane
maFenetre.getContentPane
maFenetre.getContentPane
().setLayout (new FlowLayout ());
().add (monBouton1);
().add (monBouton2);
().add (monBouton3);
maFenetre.pack ();
maFenetre.setVisible (true);
}
}
7
Plusieurs
présentation
Plan
Introduction
Composants
disponibles
gestionnaires
de
! Java
fournit
plusieurs
gestionnaires
de
présentation prédéfinis, c-à-d plusieurs politiques
de positionnement et de redimensionnement des
composants dans un conteneur :
" FlowLayout,
Dessin des
interfaces
" BorderLayout,
Réactivité des
interfaces
" GridBagLayout,
" GridLayout,
" CardLayout.
Remarque : Une fois installé, un gestionnaire fonctionne «!tout
seul!» en interagissant avec le conteneur.
Il est donc généralement inutile de garder une référence sur un
gestionnaire de présentation.
Exceptions : CardLayout et GridBagLayout.
FlowLayout (1)
Plan
Introduction
Composants
disponibles
Dessin des
interfaces
Réactivité des
interfaces
! Le gestionnaire FlowLayout
composants ligne par ligne.
positionne
les
" Chaque fois qu'une ligne est remplie, une nouvelle
ligne est commencée.
! Le gestionnaire FlowLayout n'impose pas la taille
des composants mais leur permet d'avoir leur
«!taille préférée!».
! Un FlowLayout peut spécifier :
" une justification à gauche, à droite ou centrée.
Par défaut, les composants sont centrés à
l'intérieur du conteneur.
" un espacement horizontal ou vertical entre deux
composants.
8
FlowLayout (2)
Plan
Introduction
Composants
disponibles
Dessin des
interfaces
Redimensionnement
Réactivité des
interfaces
import java.awt.*;
import javax.swing.*;
class ProgPpal
{
public static void main (String args [])
{
JFrame maFenetre = new JFrame ("Ma premiere fenetre");
JButton monBouton1 = new JButton ("Bouton 1");
JButton monBouton2 = new JButton ("Bouton 2");
JButton monBouton3 = new JButton ("Bouton 3");
maFenetre.getContentPane ().setLayout (new FlowLayout ());
maFenetre.getContentPane ().add (monBouton1);
maFenetre.getContentPane ().add (monBouton2);
maFenetre.getContentPane ().add (monBouton3);
maFenetre.pack ();
maFenetre.setVisible (true);
}
}
17
BorderLayout (1)
Plan
Introduction
Composants
disponibles
Dessin des
interfaces
Réactivité des
interfaces
! Le gestionnaire BorderLayout divise son espace
de travail en cinq zones «!géographiques!» :
NORTH, SOUTH, EAST, WEST et CENTER.
! Les composants sont ajoutés au conteneur dans
une de ces zones (un seul composant par zone).
" Si une des zones de bordure ne contient rien, sa
taille est 0.
...
JFrame maFenetre = new JFrame ("Ma premiere fenetre");
JButton monBouton1 = new JButton ("NORTH");
...
maFenetre.getContentPane ().setLayout (new BorderLayout ());
maFenetre.getContentPane ().add (monBouton1, BorderLayout.NORTH);
...
BorderLayout (2)
Plan
Introduction
Composants
disponibles
Dessin des
interfaces
Réactivité des
interfaces
! Lors du redimensionnement du conteneur, le
composant est lui-même redimensionné en fonction
de la taille de la zone, c-à-d :
" les zones nord et sud sont éventuellement
étirées dans le sens droite / gauche mais
conservent leur taille dans le sens haut / bas.
" les zones est et ouest sont éventuellement
étirées dans le sens haut / bas mais conservent
leur taille dans le sens droite / gauche.
" la zone centrale occupe tout l!’espace restant.
10
BorderLayout (3)
Plan
Introduction
Composants
disponibles
Redimensionnement
Dessin des
interfaces
Réactivité des
interfaces
import java.awt.*;
import javax.swing.*;
class ProgPpal
{
public static void main (String args [])
{
JFrame maFenetre = new JFrame ("Ma premiere fenetre");
JButton monBouton1 = new JButton ("NORTH");
JButton monBouton2 = new JButton ("WEST");
JButton monBouton3 = new JButton ("CENTER");
JButton monBouton4 = new JButton ("EAST");
JButton monBouton5 = new JButton ("SOUTH");
maFenetre.getContentPane
maFenetre.getContentPane
maFenetre.getContentPane
maFenetre.getContentPane
maFenetre.getContentPane
maFenetre.getContentPane
().setLayout (new BorderLayout ());
().add (monBouton1, BorderLayout.NORTH);
().add (monBouton2, BorderLayout.WEST);
().add (monBouton3, BorderLayout.CENTER);
().add (monBouton4, BorderLayout.EAST);
().add (monBouton5, BorderLayout.SOUTH);
maFenetre.pack ();
maFenetre.setVisible (true);
}
}
20
GridLayout (1)
Plan
Introduction
! Le gestionnaire GridLayout découpe la zone
d'affichage en lignes et en colonnes qui
définissent des cellules de dimensions égales.
Composants
disponibles
Dessin des
interfaces
Réactivité des
interfaces
" Lorsqu'on ajoute des composants, les cellules
sont remplies de gauche à droite et de haut en
bas.
" Lors du redimensionnement les composants
changent tous de taille mais leurs positions
relatives ne changent pas.
...
JFrame maFenetre = new JFrame ("Ma premiere fenetre");
JButton monBouton1 = new JButton ("Bouton 1");
...
maFenetre.getContentPane ().setLayout (new GridLayout (3,2));
maFenetre.getContentPane ().add (monBouton1);
...
import java.awt.*;
import javax.swing.*;
class ProgPpal
{
public static void main (String args [])
{
JFrame maFenetre = new JFrame ("Ma premiere fenetre");
JButton monBouton1 = new JButton ("Bouton 1");
JButton monBouton2 = new JButton ("Bouton 2");
JButton monBouton3 = new JButton ("Bouton 3");
JButton monBouton4 = new JButton ("Bouton 4");
JButton monBouton5 = new JButton ("Bouton 5");
JButton monBouton6 = new JButton ("Bouton 6");
maFenetre.getContentPane
maFenetre.getContentPane
maFenetre.getContentPane
maFenetre.getContentPane
maFenetre.getContentPane
maFenetre.getContentPane
maFenetre.getContentPane
().setLayout (new GridLayout (3,2));
().add (monBouton1);
().add (monBouton2);
().add (monBouton3);
().add (monBouton4);
().add (monBouton5);
().add (monBouton6);
maFenetre.pack ();
maFenetre.setVisible (true);
}
}
21
GridLayout (2)
Plan
Introduction
Composants
disponibles
Dessin des
interfaces
Redimensionnement
Réactivité des
interfaces
Conteneurs : les fenêtres
Plan
Introduction
! Une fenêtre (classe JFrame) présente une
fenêtre de haut niveau avec un titre, une bordure
et des angles de redimensionnement.
Composants
disponibles
" Un JFrame est doté d'un BorderLayout par
défaut.
Dessin des
interfaces
" La plupart des applications utilisent au moins un
JFrame comme point de départ de leur interface
graphique (fenêtre principale).
Réactivité des
interfaces
12
Conteneurs : les panneaux
Plan
Introduction
! Un panneau (classe JPanel) n'a pas d’apparence
propre et ne peut pas être utilisé comme fenêtre
autonome :
Composants
disponibles
" il sert à grouper et organiser des composants à
l!’intérieur d!’un conteneur,
Dessin des
interfaces
" il est ajouté à un conteneur en tant que
composant,
Réactivité des
interfaces
" les panneaux peuvent ensuite redéfinir une
présentation qui leur soit propre (méthode
setLayout () ),
" un JPanel est doté d'un FlowLayout par
défaut.
Conteneurs : les boîtes de dialogues
Plan
Introduction
Composants
disponibles
Dessin des
interfaces
Réactivité des
interfaces
! Une boîte de dialogue (classe JDialog) ressemble à un
JFrame mais ne sert qu'à afficher des messages
devant être lus par l'utilisateur.
" Une boîte de dialogue ne peut pas être fermée ou de
l'iconifiée (absence de boutons sur la barre de titre).
" On y associe habituellement un bouton de validation.
" On utilise usuellement une seule boîte de dialogue pour
afficher tous les messages au cours de l'exécution
d'un programme.
! Un JDialog dépend d'un JFrame (qui est passé comme
premier argument au constructeur).
! Un JDialog n'est pas visible lors de sa création.
Utiliser setVisible(true);
! La classe JOptionPane permet de créer des boîtes de
dialogues
de
types
prédéfinis
(information,
confirmation, question).
13
Exemple d'interface
des conteneurs (1)
Plan
Introduction
Composants
disponibles
Dessin des
interfaces
«!emboîtant!»
import javax.swing.*;
import java.awt.*;
public class FenetrePpale
{
public static void main (String [] args)
{
FenetrePpale interfaceGraphique = new FenetrePpale();
interfaceGraphique.dessine ();
}
public void dessine ()
{
JFrame fenetre = new JFrame ("Exemple d'interface");
Réactivité des
interfaces
JRadioButton monBouton1 = new JRadioButton ("Bouton 1");
JRadioButton monBouton2 = new JRadioButton ("Bouton 2");
JRadioButton monBouton3 = new JRadioButton ("Bouton 3");
monBouton1.setSelected(true);
ButtonGroup monGroupe = new ButtonGroup ();
monGroupe.add (monBouton1);
monGroupe.add (monBouton2);
monGroupe.add (monBouton3);
Exemple d'interface
des conteneurs (2)
Plan
JPanel panneauOuest = new JPanel ();
panneauOuest.setLayout (new GridLayout (3,1));
panneauOuest.add (monBouton1);
panneauOuest.add (monBouton2);
panneauOuest.add (monBouton3);
Introduction
Composants
disponibles
Dessin des
interfaces
Réactivité des
interfaces
«!emboîtant!»
fenetre.getContentPane ().add (panneauOuest,
BorderLayout.WEST);
String[] donnees = {"un", "deux", "trois", "quatre"};
JList maListe = new JList (donnees);
maListe.setSelectionMode
(ListSelectionModel.SINGLE_SELECTION);
maListe.setSelectedIndex(2);
fenetre.getContentPane ().add (maListe, BorderLayout.CENTER);
JPanel panneauNord = new JPanel ();
fenetre.getContentPane ().add (panneauNord,
BorderLayout.NORTH);
JButton boutonEnregistrer = new JButton ("Enregistrer");
JButton boutonAnnuler = new JButton ("Annuler");
panneauNord.add (boutonEnregistrer );
panneauNord.add (boutonAnnuler );
fenetre.pack ();
fenetre.setVisible (true);
}
}
14
Exemple d'interface
des conteneurs (3)
Plan
«!emboîtant!»
Introduction
Composants
disponibles
Dessin des
interfaces
Redimensionnement
Réactivité des
interfaces
Événement graphique / Ecouteur (1)
Plan
Introduction
Composants
disponibles
Dessin des
interfaces
Réactivité des
interfaces
! Lorsque l'utilisateur effectue une action au niveau de
l'interface utilisateur (click souris, sélection d'un
élément dans une liste, frappe au clavier, etc), un
événement graphique est «!produit!» par le composant
sur lequel il a agi (par exemple un bouton, un curseur,
un champ de saisie, une fenêtre, etc.).
! La réaction à un événement est exécutée par un objet
qui s’est abonné auprès du composant pour être averti
de l’occurrence de cet événement.
" On dit que cet objet «!consomme!» l!’événement. Dans
l!’univers Java, on appelle cet objet un écouteur
d!’événement.
! Les événements sont représentés par des objets.
(classe java.awt
.Event et ses sous-classes dont
java.awt.Event
celles qui sont dans java.awt.event) .
15
Événement graphique / Ecouteur (2)
Plan
Introduction
! Chaque composant est conçu pour émettre un ou
plusieurs types d'événements.
" Cela se voit grâce à la présence dans la classe de
composant
d'une
méthode
nommée
addxxxListener().
Composants
disponibles
Ecouteur
Dessin des
interfaces
enregistrement
de l'écouteur
Implémente l!’interface xxxListener
et code les méthodes qui y sont décrites
Réactivité des
interfaces
Composant
xxxEvent
addxxxListener (...)
Exemple
Plan
import java.awt.event.*;
Introduction
Composants
disponibles
Dessin des
interfaces
Réactivité des
interfaces
import javax.swing.*;
import java.awt.*;
import Ecouteur;
public class Ecouteur implements ActionListener
{
public void actionPerformed (ActionEvent e)
{
System.out.println ("Bonjour") ;
}
}
public class FenetrePpale
{
public static void main (String [] args)
{
FenetrePpale interfaceGraphique = new FenetrePpale();
interfaceGraphique.dessine ();
}
public void dessine ()
{
JFrame fenetre = new JFrame ("Exemple d'interface");
JButton monBouton1 = new JButton ("Bouton 1");
monBouton1.addActionListener (new Ecouteur ());
fenetre. getContentPane ().add (monBouton1.
BorderLayout.CENTER);
fenetre.pack ();
fenetre.setVisible (true);
}
}
16
Quelques catégories
graphiques (1)
Plan
Introduction
Composants
disponibles
d'événements
! Plusieurs types d'événements sont définis dans le
paquetage java.awt.event.
! A chaque type d'événement correspond une
interface qui doit être définie par toute classe
souhaitant écouter cette catégorie événements.
Dessin des
interfaces
" Cette interface exige qu'une
méthodes soient définies.
Réactivité des
interfaces
" Ces méthodes sont appelées lorsque l!’événement
dont il est question survient.
Quelques catégories
graphiques (2)
Plan
Introduction
Composants
disponibles
Réactivité des
interfaces
plusieurs
d'événements
Type d'événement
Nom de l’interface
ActionEvent
ItemEvent
MouseEvent
ActionListener
actionPerformed (ActionEvent)
ItemListener
itemStateChanged (ItemEvent)
MouseMotionListener mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
mousePressed (MouseEvent)
mouseReleased (MouseEvent)
MouseListener
mouseEntered (MouseEvent)
mouseExited (MouseEvent)
mouseClicked (MouseEvent)
KeyListener
keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
WindowListener
windowClosing (WindowEvent)
windowOpened (WindowEvent)
windowIconified (WindowEvent
windowDeiconified (WindowEvent)
windowClosed (WindowEvent)
windowActivated (WindowEvent)
windowDeactivated (WindowEvent)
MouseEvent
Dessin des
interfaces
ou
KeyEvent
WindowEvent
Méthodes à implanter
17
Pour aller plus loin ...
Plan
Introduction
Composants
disponibles
Dessin des
interfaces
Réactivité des
interfaces
! Une même classe d’écouteur peut implémenter
plusieurs interfaces.
" Par exemple MouseMotionListener (pour les
déplacements souris) et MouseListener (pour
les clics souris) pour un écouteur associé à un
JFrame.
! L'évé nement peut contenir
intéressants pour l'application.
des
paramètres
" Exemple : getX() et getY() sur un MouseEvent
retournent les coordonnées de la position du
pointeur de la souris.
18
Téléchargement