Vos premiers pas en Swing

Slides:



Advertisements
Présentations similaires
Microsoft Excel LibreOffice Calc
Advertisements

Réaliser en Java un programme client d’une Base de Données
A l’issue des conseils de classe de 3ème,
Conception d’IHM en Java
Evénements Java Beans Java RMI
Les Interfaces Graphiques
Gestion des événements (suite)
Programmation événementielle
Audrey Occello Cédric Joffroy Anne-Marie Dery
Android View, onClick, Activity, Modèle Vue Contrôleur
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
JXDVDTEK – Une DVDthèque en Java et XML
Page 1 Les applets Jacques Lonchamp. Page 2 Présentation Une applet est téléchargée à partir dune machine distante qui fournit le code. Ce chargement.
Présentation de l’application « Livret personnel de compétences »
Voisin-Polian : Introduction à Java 1 Introduction à Java - AWT - Frédéric VOISIN – Nicole POLIAN FIIFO - « Remise à Niveau »
Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties.
Les composants Graphiques Atomiques
contrat Creative Commons Paternité-Pas d'Utilisation Commerciale- Partage des Conditions Initiales à l'Identique.
Lexique des manœuvres de base pour utiliser à PowerPoint
Introduction aux IHM et à la réflexivité Java Vos premiers pas en Swing.
Vos premiers pas en Swing
POO / IHM Architecture Logicielle
POO / IHM Architecture Logicielle
بسم الله الرحمن الرحيم. Institut Supérieure des Etudes Technologiques de Kébili.
Gestion Informatisée du Brevet Informatique & Internet
Page de garde Les librairies AWT et Swing ESSI2, Septembre 2002
Java : Interface Homme-Machine
Les requêtes La Requête est une méthode pour afficher les enregistrements qui répondent à des conditions spécifiques. La requête est donc un filtre.
Page 1 Introduction à ATEasy 3.0 Page 2 Quest ce quATEasy 3.0? n Ensemble de développement très simple demploi n Conçu pour développer des bancs de test.
Présentation générale de MapBruit
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
1 1 Université Evry Val d'Essonne Y. Laborde Une calculatrice (sans MVC) fonctionnant sur la base d'un modèle en Java.
Écouteurs de click d'une fenêtre
Configuration de Windows Server 2008 Active Directory
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Classes abstraites et Interfaces
A la découverte de la bureautique et des fichiers.
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
Graphical User Interface (GUI)
Gestion des événements liés à la fenêtre et aux périphériques dentrée.
Graphical User Interface
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Retour sur MVC. POO3 Introduction aux IHM et à la réflexivité Java Vos premiers pas en Swing.
GPA789 Analyse et conception orientées objet 1 Professeur: Tony Wong, Ph.D., ing. Chapitre 6 Correspondance UML et C++
1. 2 PLAN DE LA PRÉSENTATION - SECTION 1 : Code HTML - SECTION 2.1. : CSS (Méthode 1) - SECTION 2.2. : CSS (Méthode 2) - SECTION 3 : JavaScript - SECTION.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Android View, onClick, Activity, Modèle Vue Contrôleur
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
Création et présentation d’un tableau avec Word 2007
Javascript 2° PARTIE : EVENEMENTS ET OBJETS
Evénements. Plan Evénements Principes Exemples Adapteur.
22 Visual Studio Tools et Office 2010 Thomas LEBRUN Architecte Access It Sebastien BOVO Application Dev Consultant Microsoft France
Cours 91 9 Interfaces graphiques avec awt. Cours 92 Plan Introduction : deux bibliothèques graphiques 1.Comment se dessine une fenêtre ?  Un exemple.
Interfaces graphiques. Composants d'interface utilisateur graphique (GUI) 1 Bibliothèques Awt et Swing Procédures communes pour l'utilisation de ces clases.
14 La gestion d’événements
« Validation Formelle de Systèmes Interactifs »
© Sofia ZAIDENBERG CNRS Mai Interface utilisateur graphique en Java Construire une interface graphique en Java (suite) adaptateurs d’événements.
Construire une interface graphique en Java
Iup MIAGe 3° année Projet MIAGe Toulouse – Groupe 21 Charte graphique.
 1) Il faut connaître le modèle et son fonctionnement  2) Définir le contrôle que l’on veut faire ouvrir, fermer, afficher, etc.) sur le modèle  3)
Les interfaces de gestion d’événements (la suite).
Scénario Les scénarios permettent de modifier la position, taille … des calques au cours du temps. Son fonctionnement est très proche de celui de Macromedia.
PROCESSING Semaine 03. PLAN DE LEÇON Interaction avec un programme Gestion de la souris Gestion du clavier.
Dreamweaver le retour Avec Les Formulaires Les Calques
FORMULAIRES FOMULAIRE Permet à l’utilisateur d’entrer des renseignements le concernant. Utilisation –Inscription sur un site –Mise à jour d’une base.
Programmation événementielle. Logiciel traditionnel, sans interface utilisateur { Lire les entrées d’un fichier Effectuer des calculs Écrire les sorties.
Java Swing. Principes de base  Des composants graphiques (exemple: JFrame, JButton …)  Hiérarchie de classes  Des événements et les actions à effectuer.
Présentation SWING Siwar hadj hassen Omar ben yahya.
Les interfaces de gestion d’événements (la suite)
Transcription de la présentation:

Vos premiers pas en Swing Partie comportementale A.M. Dery-Pinna et A. Occello

Architecture Logicielle et IHM : Pourquoi ? •Organiser le code (rangement) Simplifier (diviser régner) •Organiser le travail Modifier (une partie) •Ré-utiliser Notions : modularité, évolutivité, flexibilité Séparation possible –Code pour IHM –Code «Métier» •Exemple –IHM différente pour une Gestion d’un stock de chaussures ou de bibelots ? –Linux sous gnome ou kde, le système change-t-il ? •Objectif : éviter de tout modifier si on change la partie fonctionnelle ou la partie IHM

Un problème classique

Des architectures logicielles Système interactif utilisateur Tous les modèles partent du principe : un système interactif comporte une partie interface et une partie application pure Cette dernière est souvent appelée noyau fonctionnel. Le noyau fonctionnel est considéré comme préexistant, et les modèles de systèmes interactifs décrivent essentiellement la partie interface, ainsi que ses relations avec les objets du domaine. La plupart des modèles identifient au moins trois types d'éléments : un ``coté utilisateur'‘ (présentations), un ``côté noyau fonctionnel'‘ (interfaces du noyau fonctionnel, abstractions, modèles), et des éléments articulatoires (contrôleurs, adaptateurs). http://tel.archives-ouvertes.fr/docs/00/04/82/79/HTML/2_2modelesinterface_referen.html

Les événements Les composants Swing peuvent avertir d'une action utilisateur effectuée sur eux-mêmes Sans gestion des événements, l’IHM n’a aucun comportement … Pour la plupart, ils se trouvent dans le package java.awt.event et se nomment XXXEvent avec XXX pouvant se décliner en : Key (clavier) Mouse (clic et mouvement entrant ou sortant) Focus (activation ou désactivation du focus du clavier) Window (seulement JDialog et JFrame – fermeture, iconification, ...) …

Les événements Il s’agit ici d’événements dits « systèmes ». On ne contrôle pas leur déclenchement. Nous verrons plus tard une autre forme d’événements. Les composants Swing peuvent avertir d'une action utilisateur effectuée sur eux-mêmes Sans gestion des événements, l’IHM n’a aucun comportement … Pour la plupart, ils se trouvent dans le package java.awt.event et se nomment XXXEvent avec XXX pouvant se décliner en : Key (clavier) Mouse (clic et mouvement entrant ou sortant) Focus (activation ou désactivation du focus du clavier) Window (seulement JDialog et JFrame – fermeture, iconification, ...) … Component (taille, position, visibilité) 6

AWTEvent dérive de java.util.EventObject contient par héritage getSource() qui renvoie la source de l’événement (objet où l’événement s’est produit) définit des constantes permettant d’identifier des classes d’événements : MOUSE_EVENT_MASK MOUSE_MOTION_EVENT_MASK WINDOW_EVENT_MASK … 7

Evénements spécifiques Evénements liés à des opérations spécifiques sur certains composants Sélection d’éléments dans un menu, Clic sur un bouton, … 8

EVÉNEMENTS ACTIONEVENT une action sur un composant réactif : Clic sur un item de menu, Clic sur un bouton, … Sont émis par les objets de type : Boutons : JButton, JToggleButton, JCheckBox Menus : JMenu, JMenuItem, JCheckBoxMenuItem, JRadioButtonMenuItem … Texte : JTextField 9

EVÉNEMENTS : ITEMEVENT composant est sélectionné ou désélectionné émis par les objets de type : Boutons : JButton, JToggleButton, JCheckBox Menus : JMenu, JMenuItem, JCheckBoxMenuItem, JRadioButtonMenuItem Mais aussi JComboBox, JList 10

EVÉNEMENTS ADJUSTMENTEVENT Se produisent quand un élément ajustable comme une JScrollBar sont ajustés Sont émis par ScrollBar, JScrollBar 11

Les écouteurs Pour être averti, il faut écrire un objet capable d'être averti ! Depuis (JAVA 1.1), les interfaces écouteurs correspondent aux événements principaux définissent une méthode par action utilisateur élémentaire extensions de java.util.EventListener. Un objet implémente l'interface "d'écoute" correspondant à l'événement à surveiller Par exemple, un JButton avertit les objets implémentant l’interface ActionListener des clics 12

Encore des événements Les sous-classes de AbstractButton peuvent générer des événements ChangeEvent quand on modifie l’état d’un bouton Les dérivés de JMenuItem génèrent des MenuDragMouseEvent et des MenuKeyEvent Une JList génère des SelectionEvent Les modèles de données associés aux listes et aux tables génèrent des ListDataEvent et des TableModelEvent (envoyés aux vues quand des changements se produisent sur les données) 13

Principes des listeners Programmation par événements : Un écouteur s’abonne à une source La source déclenche l’événement : propagation à toute la hiérarchie de composition (le composant directement concerné puis tous ceux qui le contiennent) + aux abonnés Les abonnés réagissent Les composants graphiques sont des sources Les événements déclenchés par une action de l’utilisateur englobent des informations que l'on peut récupérer pour réagir en fonction 14

Principes des listeners

Comment connaître les listeners associés à un composant donné ? avec une liste exhaustive : http://download.oracle.com/javase/tutorial/uiswing/events/eventsandcomponents.html en repérant dans la documentation les méthodes "addXXXListener" XXX étant les mêmes que pour "XXXEvent" Attention toutes les instances d’un même type de composant graphique (objets de même classe) émettent les mêmes événements ! Par exemple, on peut vouloir écouter les clicks émis par deux boutons Comment réagir différemment dans ce cas ? => il faut regarder qui est la source pour différencier deux instances d’événements (getSource()) 16

Contrôle des Fenêtres WINDOWSLISTENER Concerne tout ce qui est en rapport avec la fenêtre : Ouvrir, Fermer, Réduire, Agrandir, … windowActivated(WindowEvent e) : fenêtre active par clic windowDeactivated(WindowEvent e) : fenêtre désactivée windowClosed(WindowEvent e) : fenêtre fermée windowOpened(WindowEvent e) : fenêtre visible 1ere fois windowClosing(WindowEvent e) : fermeture par menu fermé du système windowDeiconified(WindowEvent e) : fenêtre restaurée windowIconified(WindowEvent e) : fenêtre réduite 17

Contrôle de la souris MOUSELISTENER, MOUSEMOTIONLISTENER et MOUSEINPUTLISTENER Concernent tout ce qui est en rapport avec la souris : Clic, Déplacement, Gestion des boutons…. MOUSELISTENER permet de gérer : Les différents états du clic souris Clic Pressé, Relâché Et également l’entrée/sortie sur un composant MouseMotionListener permet de gérer les mouvements de la souris sur un composant avec bouton appuyé ou relâché 18

MOUSELISTENER mouseClicked(MouseEvent e) : clic souris sur un composant (pressed’N’released) mouseEntered(MouseEvent e) : curseur de la souris rentre sur un composant mouseExited(MouseEvent e) : curseur de la souris sort d’un composant mousePressed(MouseEvent e) : bouton de la souris pressé sur un composant mouseReleased(MouseEvent e) : bouton relâché 19

MOUSEMOTIONLISTENER mouseDragged(MouseEvent e) : bouton de la souris appuyé sur un composant et la souris est déplacée mouseMoved(MouseEvent e) : souris déplacée sur un composant sans bouton enfoncé 20

MOUSEINPUTLISTENER interface écouteur de javax.swing.event. Implémente un MouseListener et un MouseMotionListener ATTENTION : il n’existe pas de méthode addMouseInputListener il faut enregistrer l’écouteur deux fois : avec addMouseListener et avec addMouseMotionListener 21

Contrôle du clavier KeyListener, comme pour la souris, on va retrouver la notion de : Pressé/Relâché/Tapé keyPressed(KeyEvent e) : touche du clavier pressée keyReleased(KeyEvent e) : touche du clavier relâchée keyTyped(KeyEvent e) : touche du clavier tapée FocusListener permet de gérer le focus et donc de savoir si un composant a obtenu le focus ou s’il la perdu focusGained(FocusEvent e) : un composant obtient le focus focusLost(FocusEvent e) : un composant perd le focus Concernent tout ce qui est en rapport avec le clavier 22

Contrôle des composants COMPONENTLISTENER permet de gérer : L’apparition/disparition d’un composant Le déplacement d’un composant Le redimensionnement d’un composant componentHidden(ComponentEvent e) : le composant est rendu invisible componentShown(ComponentEvent e) : le composant est rendu visible componentMoved(ComponentEvent e) : la position du composant a changé componentResized(ComponentEvent e) : les dimensions du composant ont changé 23

Autres contrôles Exemples d’écouteurs d’événements associés à des composants graphiques spécifiques ActionListener : void actionPerformed(ActionEvent e) ItemListener : void itemStateChanged(ItemEvent e) AdjustementListener : void adjustementValueChanged (AdjustementEvent e) 24

Comment s’abonner ? Il faut ajouter un écouteur (objet implémentant une interface d’écoute) à la source à surveiller on utilise la méthode addXXXListener (XXXListener l) sur le composant désiré Il suffit alors de remplacer les XXX parce que l’on souhaite avoir 25

Comment implémenter les écouteurs ? Il existe plusieurs méthodes Définir des classes anonymes au niveau de l’abonnement au composant source Définir des classes internes à la classe de vue Implémenter une interface Listener : revient à séparer le code comportemental de l’IHM du code structurel … … sauf si c’est la classe de vue elle-même qui implémente l’interface 26

Implémenter une interface public class MaClass extends MouseListener { // dans le constructeur maVue.addMouseListener(this); void mouseClicked(MouseEvent e)  {} void mouseEntered(MouseEvent e)  {} void mouseExited(MouseEvent e)  {} void mousePressed(MouseEvent e)  {} void mouseReleased(MouseEvent e)  {} } Attention il faudra connaitre l’objet maVue ! maVue peut aussi valoir "this" (la vue écoute elle-même les événements émis par ses composants 27 27

EXEMPLE D’UTILISATION DES ECOUTEURS (1/2) public class Sketcher implements WindowListener { private static SketcherFrame window; // fenêtre de l’application private static Sketcher theApp; // L’objet application public static void main (String[] args) { theApp = new Sketcher(); theApp.init(); } public void init() { window = new SketcherFrame(«Dessin»); Toolkit leKit = window.getToolkit(); Dimension wndSize = leKit.getScreenSize(); window.setBounds(wndSize.width/6, wndSize.height/6, 2*wndSize.width/3,2*wndSize.height/3); window.addWindowListener(this); window.setVisible(true); 28

Quid de l’utilisation Il faut implémenter toutes les méthodes de l’interface, y compris celles dont on ne se sert pas ! Alternative pour les paresseux : Utiliser les classes Adapter Elles implémentent une interface (ici écouteur) mais certaines méthodes n’ont pas de code Etendre la classe Adapter choisie en redéfinissant uniquement les méthodes que l’on souhaite utiliser 29

Etendre une classe Adapter public class MaClass extends MouseAdapter { ... unObject.addMouseListener(this); public void mouseClicked(MouseEvent e) { // l’implementation de la méthode // associée à l’événement vient ici ... } 30

Définir une classe anonyme // lignes de code dans le constructeur de la vue button = new JButton("test"); button.addMouseListener(new MouseAdapter() { @Override public void mouseClicked (MouseEvent e) { // code que l'on souhaite effectuer } }); 31

Définir une classe interne // ligne de code du constructeur de la vue window.addWindowListener(new WindowHandler()); // classe interne WindowHandler // pour les événements de fermeture class WindowHandler extends WindowAdapter { public void windowClosing( WindowEvent e ) { window.dispose(); System.exit(0); } 32

CREATION D’UN PANNEAU class ButtonPanel extends JPanel     implements ActionListener    // interface écouteur d'événements { private JButton Boutonjaune;    private JButton BoutonBleu;    private JButton BoutonRouge;  PLACER DES COMPOSANTS DANS LE PANNEAU   public ButtonPanel() // constructeur de la classe ButtonPanel {   Boutonjaune = new JButton("Jaune");       BoutonBleu = new JButton("Bleu");       BoutonRouge = new JButton("Rouge");       // Insertion des trois boutons dans l'objet ButtonPanel       add(Boutonjaune);       add(BoutonBleu);       add(BoutonRouge); ASSOCIER DES EVENEMENTS AUX COMPOSANTS       // Les sources d'événements sont déclarées à l'écouteur       Boutonjaune.addActionListener(this);        BoutonBleu.addActionListener(this);        BoutonRouge.addActionListener(this);     }   

TRAITEMENT DES EVENEMENTS public void actionPerformed(ActionEvent evt) {    // Permet de traiter l'événement en fonction de l'objet source   Object source = evt.getSource();       Color color = getBackground();       if (source == Boutonjaune) color = Color.yellow;       else if (source == BoutonBleu) color = Color.blue;       else if (source == BoutonRouge) color = Color.red;       setBackground(color);       repaint(); }

CREATION DE LA FENETRE ET PLACEMENT DU PANNEAU class ButtonFrame extends JFrame {   public ButtonFrame() {   setTitle("ButtonTest");       setSize(300, 200);       addWindowListener(new WindowAdapter() {   public void windowClosing(WindowEvent e) {   System.exit(0);          }       } );       Container contentPane = getContentPane();       contentPane.add(new ButtonPanel());    } } public class ButtonTest {   public static void main(String[] args) {   JFrame frame = new ButtonFrame();       frame.show();     } }