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