Audrey Occello Cédric Joffroy Anne-Marie Dery

Slides:



Advertisements
Présentations similaires
Mais vous comprenez qu’il s’agit d’une « tromperie ».
Advertisements

Réaliser en Java un programme client d’une Base de Données
Conception d’IHM en Java
Distance inter-locuteur
Gestion des événements (suite)
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
Gestionnaires de géométrie
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.
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
Lexique des manœuvres de base pour utiliser à PowerPoint
Algorithme et structure de données
Vos premiers pas en Swing
Introduction aux IHM et à la réflexivité Java Vos premiers pas en Swing.
Retour sur MVC. Introduction aux IHM et à la réflexivité Java Vos premiers pas en Swing.
Vos premiers pas en Swing
Vos premiers pas en Swing
POO / IHM Architecture Logicielle
LES TRIANGLES 1. Définitions 2. Constructions 3. Propriétés.
Principe de défilement du document dans un traitement de texte
LOGOS_w Imagerie La palette des icônes. Le groupe dicônes situé au dessus des images du patient permet dintervenir sur limage affichée et active.
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.
Présentation générale de MapBruit
Formation au module Structure de ZENTO
Le soccer & les turbans Sondage mené par lAssociation détudes canadiennes 14 juin 2013.
Olivier DERUELLE Erwan FOUYER Maxime JOUIN Rodolphe LOUE
Écouteurs de click d'une fenêtre
Python Interfaces graphiques
Mode plan – Table des matières
Création d'un diaporama Création d'un diaporama
Introduction à linformatique en gestion 1 Plan de cours Le tableur Lécran Commandes sur les classeurs Les feuilles de calcul La saisie et la.
28 novembre 2012 Grégory Petit
Projet poker 1/56. Introduction Présentation de léquipe Cadre du projet Enjeux Choix du sujet 2.
Graphical User Interface (GUI)
Logiciel gratuit à télécharger à cette adresse :
FICHIERS : Définition : Algorithme général:
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.
Formation Développeur Java Applet et interfaces graphiques avec AWT
COURS DE PROGRAMMATION ORIENTEE OBJET :
MAGIE Réalisé par Mons. RITTER J-P Le 24 octobre 2004.
TYPES DE COMPOSANTES SWING Cours 420-B43. On peut distinguer 3 Niveaux 3 niveaux Haut niveau : toute application graphique doit comprendre au moins une.
MAGIE Réalisé par Mons. RITTER J-P Le 24 octobre 2004.
1/65 微距摄影 美丽的微距摄影 Encore une belle leçon de Macrophotographies venant du Soleil Levant Louis.
Le langage XHTML 420-S4W-GG Programmation Web Client
Création et présentation d’un tableau avec Word 2007
APPLETS. Applets : généralités Applet : application s'exécutant dans une page HTML Le ByteCode (fichiers.class) est téléchargé depuis un serveur. L'exécution.
PowerPoint Créer une présentation Créer une diapositive de texte
Exploration de la programmation android Formation Assurer par: Club FreeWays Réalisé par: BOUHJJA Lamia.
Introduction à l’informatique en gestion 1 Plan de la leçon Compagnon office Sections et Mise en page En-têtes et pieds de page Notes de bas.
11/04/ L'héritage Cours 7 Cours 7.
Plan de la leçon Réf. p. WRD- 149 Les styles Les listes hiérarchiques
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
Interface graphique PO2 ( ) Chapitre 3 Gestionnaires géométrie.
Tutorat en bio-informatique
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)
Cours d’introduction à Java Christophe Vaudry IUT - Cycle IRISM Année
Conception des pages Web avec
Projet Java : La classification périodique des éléments sous forme d’Applet Projet réalisé en 2006 par : BESSON Sandra FLOREA Alina FOUCAULT Julie SALLOT.
DreamWeaver Séance 2 HMIDA Ahmed A2008. Plan 1.Calques 2.CSS 3.Modèles 4.Formulaires 5.Comportements 6.Mise en ligne.
Exposé DREAMWEAVER 2 Guillaume DUBREUIL Adrien HADOUX.
Flash MX – Séance 2 Interactions & ActionScript David Rapin Si28 P06.
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.
Dreamweaver 2 Plan 1.Calques 2.CSS 3.Modèles 4.Comportements 5.Formulaires 6.Mise en ligne 1 Timothée Devaux Myriam Roudy Dreamweaver 2 Printemps 2008.
Dreamweaver 2 Feuilles de Style CSS Formulaires Calques Comportements
Les calques Les Template (modèles) Les Comportements Les scénarios Les formulaires Les CSS Le serveur Web de l’UTC Présentation.
Java Swing. Principes de base  Des composants graphiques (exemple: JFrame, JButton …)  Hiérarchie de classes  Des événements et les actions à effectuer.
Transcription de la présentation:

Audrey Occello Cédric Joffroy Anne-Marie Dery POO3 Introduction aux IHM et à la réflexivité Java Vos premiers pas en Swing Audrey Occello Cédric Joffroy Anne-Marie Dery

Retour sur MVC

Rappel sur le patron MVC MVC pour Modèle-Vue-Contrôleur permet de séparer les données (M), l’interface homme-machine (V) et la logique de contrôle (C) Impose une séparation en 3 couches : M : représente les données de l’application. Définit interaction avec la base de données et le traitement des données V : représente l’interface utilisateur. Effectue aucun traitement, ne fait que l’affichage des données (fournies par M). Possibilité d’avoir plusieurs vues pour un même M C : gère l’interface entre le modèle et le client. Interprète la requête de ce dernier pour lui envoyer la vue correspondante. Effectue la synchronisation entre le modèle et les vues 3

Vous avez vu la réflexivité sur un modèle ! On va voir la partie Vue

PARTIE 2 : LA VUE Principes généraux Hiérarchies des composants Des Containers spécifiques La famille des panneaux Les autres composants Les afficheurs (Layout) 5

Que trouve-ton dans les librairies graphiques : RAPPEL Des éléments graphiques : Component Définition d’un élément graphique avec une dimension, une position Des Coordonnées (Origine coin supérieur gauche, x (width) vers la droite et y (height) vers le bas) Des éléments graphiques Contenant Container : qui contiennent d’autres éléments graphiques organisés Des morceaux d’écrans : Graphics Contexte graphique Permet de dessiner –Changer de crayon : couleur, formes géométriques, images, chaînes de caractères - Automatiquement redimensionnés, réaffichés Du Formattage  : LayoutManager Définition de l’organisation En ligne, en tableau, avec des contraintes,etc

PRINCIPES GÉNÉRAUX Pour la création des composants : On choisit le container – on le crée On précise le panneau dans lequel on dispose les composants (contenu) On crée les événements sur les composants. IL PEUT Y AVOIR PLUSIEURS PANNEAUX DANS UNE FENETRE 7

PRINCIPES GÉNÉRAUX Exemple pour la création des composants Création d’un JFrame, Construction du contenu dans un panneau (JPanel) ajouté au panneau de base : le contentPane Traitement des événements sur les composants par des procédures appelées écouteurs (listener) d’événement 8

PRINCIPES GÉNÉRAUX Organiser l’affichage des composants On crée un container (JPanel ou autre) Si on ne souhaite pas utiliser le layout par défaut, on définit une mise en page des composants du container en lui associant un afficheur (LayoutManager = gestionnaire d’affichage) On ajoute ensuite les composants primitifs au container 9

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();     }

ARBRE DE COMPOSANTS L’ajout d’un composant à un composant (container) implique la construction d’un sous arbre - le composant ajouté est le fils Le parent contient les composants qui lui sont ajoutés La méthode getParent() sur un composant retourne le parent (de type Container) On a donc une arborescence des composants 13

Exemple : ARBRE DE COMPOSANTS 14

EXEMPLE D’APPLICATION JAVA SWING JFrame frame = new JFrame("TopLevelDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Create the menu bar. Make it have a green background. JMenuBar greenMenuBar = new JMenuBar(); greenMenuBar.setOpaque(true); /RVB greenMenuBar.setBackground(new Color(154, 165, 127)); greenMenuBar.setPreferredSize(new Dimension(200, 20)); //Create a yellow label to put in the content pane. JLabel yellowLabel = new JLabel(); yellowLabel.setOpaque(true); yellowLabel.setBackground(new Color(248, 213, 131)); yellowLabel.setPreferredSize(new Dimension(200, 180)); //Set the menu bar and add the label to the content pane. frame.setJMenuBar(greenMenuBar); frame.getContentPane().add(yellowLabel,BorderLayout.CENTER); 15

PARTIE 1 : LA VUE Principes généraux Hiérarchies des composants Des Containers spécifiques La famille des panneaux Les autres composants Les afficheurs (Layout) Les Look’N’Feel Petits conseils 16

DES CONTAINERS SPÉCIFIQUES JFrame : le cadre principal d'une application. Il peut contenir des menus et d'autres composants. JDialog : une fenêtre de dialogue avec l'utilisateur. Son « parent » (argument requis par ses créateurs) sert essentiellement à la placer dans l'écran. JApplet : classe de base pour les applets Java 2. Les applets sont des applications Java pouvant tourner à l'intérieur d'un navigateur Web. 17

JFRAME : ILLUSTRATION 18

JFRAME PAR L’EXEMPLE import javax.swing.*; public class TryWindow { static JFrame myWindow = new JFrame (''ceci est un titre''); public static void main (String[] args) { myWindow.setBounds (50, 100, 400, 150); myWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); myWindow.setVisible(true); } (0,0) x X=50 Y=100 W=400 H=150 y h 19 w

JFRAME PAR L’EXEMPLE setBounds définit la position et la taille setVisible rend visible la fenêtre setDefaultCloseOperation détermine ce qu'il se passe lorsque l'on ferme la fenêtre (0,0) x DISPOSE_ON_CLOSE - détruit le JFrame et ses composants mais ne termine pas l'application DO_NOTHING_ON_CLOSE HIDE_ON_CLOSE y h 20 w

AUTRES MÉTHODES setTitle (String) : pour mettre le titre de la fenêtre setSize (int width, int height) setLocation (int x, int y) : pour déplacer la fenêtre dispose () : pour fermer la fenêtre pack () : ajuste chaque composant à sa taille optimale et retaille la fenêtre 21

JDIALOG : CLASSES et BOÎTES DE DIALOGUES Il existe différentes classes pour créer des boîtes de dialogue : JOptionPane : pour créer des boîtes de dialogue standards JColorChooser : pour choisir une couleur JFileChooser : pour permettre de sélectionner un fichier ProgressMonitor : pour afficher la progression d’une opération 22

JOPTIONPANE Permet de créer des boîtes de dialogue standards Permet de faire des avertissements Possède des éléments standardisés : Réponse oui/non, Icônes de danger, d’erreurs, … Est modifiable (boutons, icônes, …) avertissement erreur information 24 question

JCOLORCHOOSER Permet de créer une boîte de dialogue pour choisir une couleur Possède différents onglets correspond aux différents types d’encodage de couleurs 25

JFILECHOOSER Définit une boîte de dialogue pour permettre sélectionner un fichier Possède des boîtes de dialogue par défaut : Pour l’ouverture (showOpenDialog), Pour la sauvegarde (showSaveDialog) 26

APPLET JAVA ÉTEND APPLET OU JAPPLET S’exécute dans une machine virtuelle (celle du navigateur web) et nécessite un fichier html N’a pas de fonction main mais vit un cycle (run) Les principales méthodes sont : init () : quand la page html est chargée la 1ère fois start () : après init et chaque fois que l’on revient sur la page stop () : quand on quitte la page html (on interrompt les méthodes lancées dans start) destroy () : quand l’applet est terminée (on libère toutes les ressources) 27

EXEMPLE D’APPLET : CODE JAVA import java.awt.*; Import java.applet.*; public class HelloWorldApplet extends Applet { Font f = new Font ( « Serif », Font.BOLD, 36); public void paint (Graphics g) { g.setFont(f); g.setColor(Color.red); g.drawString(getParameter (« Chaine »), 10, 30); } <HTML> <TITLE> Applet HelloWorldApplet </TITLE> <APPLET CODE=« HelloWorldApplet.class » WIDTH=200 HEIGHT=300> <PARAM NAME=« Chaine » value = « Hello World »> </APPLET> </HTML> 28

LA BALISE <APPLET> [CODEBASE = codebaseurl] CODE = FichierClassApplet [ARCHIVE = FichiersJar] [ALT = TexteAlternatif] [NAME = nomInstanceApplet] WIDTH = pixels HEIGHT = pixels [ALIGN = alignement] [VSPACE = pixels] [HSPACE = pixels] > [<PARAM NAME = appletParam1 value = value > ] [<PARAM NAME = appletParam2 value = value > ] </APPLET> 29

SÉCURITÉ ET APPLET Une applet ne peut pas charger de librairies ou utiliser des méthodes natives Elle ne peut normalement pas lire ou écrire dans des fichiers de l’hôte sur lequel elle s’exécute Elle ne peut pas effectuer de connexions réseaux sauf sur l’hôte dont elle provient Elle ne peut lancer aucun programme de l’hôte sur lequel elle s’exécute 30 Ces restrictions peuvent être levées par un certificat de sécurité (cf. jarsigner, policytool)

Hiérarchie de composants

HIÉRARCHIE DES CLASSES 32

Aperçu de Swing Les Containers Ont un LayoutManager –add / remove d’un Component –Unicité de lieu –Indice des components Méthodes à connaître •repaint() ! validate() ! •setEnabled(true / false) : activé / désactivé •(Rectangle) getBounds / setBounds(x,y, w, h) : positionne et dimensionne •getWidth() : largeur / getHeight() : hauteur •getX() et getY() : obtenir une coordonnée •setVisible(true / false) •getBackground et setBackground [objet Color, définition RGB]

La famille des panneaux 34

TYPES DE PANNEAUX Pour structurer les différents éléments graphiques, on utilise des containers qui font partis de la famille des panneaux. On retrouve : Le JPanel : panneau de base, Le JScrollPane : qui permet d’obtenir des ascenseurs Le JSplitPane : qui permet de diviser en 2 (seulement 2) Le JTabbedPane : qui permet d’avoir différents onglets pour les différents sous-contenus 35

JPANEL Le container le plus utilisé pour structurer l’interface Ne possède pas de réelles contraintes (la gestion de l’organisation des éléments est déléguée à un Layout) Peut contenir des sous-panneaux 36

JSCROLLPANE Permet d’obtenir des ascenseurs de manière automatique, Est créé en lui associant le composant que l’on souhaite pouvoir scroller Le composant inclus dans le JScrollPane doit implémenter l’interface Scrollable Quelques éléments qui implémentent cette interface : JTextField, JTextArea, JTree, JTable 37

JSPLITPANE Permet de diviser en deux l’espace zone Peut se construire avec les deux composants contenus dans chacune des zones Possède une orientation (HORIZONTAL_SPLIT ou VERTICAL_SPLIT) 38

JTABBEDPANE Permet d’avoir des onglets Permet de mieux gérer l’espace de travail Chaque onglet est créé avec sont panel associé L’onglet peut posséder une icône en plus ainsi qu’un raccourci clavier (Mnemonic) Peut-être fait de manière équivalente avec un CardLayout (à ce moment, il n’y a pas d’onglet) 39

LES DIFFÉRENTS PANNEAUX D’UN JFRAME, JDIALOG, JAPPLET S’obtiennent par : getRootPane () zone de la fenêtre sous le titre getContentPane () zone où les éléments sont ajoutés getGlassPane () zone transparente dessinée au-dessus du JRootPane utilisé pour afficher des pop-up menus 40

Autres composants 41

LISTE NON EXHAUSTIVE DE COMPOSANTS SWING JButton, JLabel, JTextField : une ligne de texte, JTextArea : une zone de texte, JCheckBox : boîte à cocher, JRadioButton : bouton pour sélection unique (associé à ButtonGroup), JMenu et JMenuItem : un menu et ses éléments (inclus dans une JMenuBar) JPopMenu : un menu flottant, JToolTip : une bulle d’aide, … 42

CRÉATION D’UN MENU Pour créer un menu, il faut : Une barre de menu (JMenuBar), Un menu (JMenu), Des éléments dans ce menu (JMenuItem), Sur le menu, il est possible d’ajouter un Mnemonic Est associé à un caractère (setMnemonic(char)) Permet d’accéder au menu directement en faisant : Alt+Char Fonctionne également pour les boutons 43

CRÉATION D’UN MENU Sur les JMenuItem il est possible d’ajouter des accélérateurs : Permet d’associer une combinaison du type Ctrl+Touche Se définit pas : setAccelerator(KeyStroke.getKeyStroke ( KeyEvent.LA_TOUCHE, ActionEvent.LE_MASQUE) 44

ILLUSTRATION D’UN MENU Remarque : Il est possible de coller un menu à droite, en utilisant une Glue : Box.createHorizontalGlue() 45

JLABEL Permet de définir un label Peut comporter : une icône, du texte ou les deux ImageIcon ii = new ImageIcon(‘‘icon.jpg’’); Jlabel jl = new JLabel(‘‘text + icône’’, ii, JLabel.CENTER); 46

JLABEL Méthodes intéressantes : setEnabled(boolean) : pour activer/désactiver la zone (permet de griser le label) setHorizontalAlignement(constante) pour contrôler l’alignement du texte 47

LES BORDURES Il est possible d’attribuer une bordure à un JComponent : setBorder(border) Pour obtenir la bordure, on utilise les méthodes statiques de la classe BorderFactory : Border Factory.createEtchedBorder() 48

Aperçu de Swing Des composants JComponent Hérite de Container Méthodes de commodité getSize retourne une Dimension setSize : une Dimension ou deux entiers –Une position •getLocation retourne un Point •setLocation avec un Point ou deux entiers –Coordonnées •Origine au coin supérieur gauche •x (width) vers la droite et y (height) vers le bas –Méthode public void paint(Graphicsg) –setPreferredSize –setDoubleBuffered(true/false) / isDoubleBuffered() –setOpaque(true / false) •Dessin à l’écran : paint appelle –paintComponent –paintBorder –paintChildren Les boutons –JButton /JToggleButton / JCheckBox / JRadioButton –Les champs textuels –JTextField/ JTextArea Etc…

Exemple import javax.swing.*; import java.awt.*; public class FlowerPower   {   public static void main(String[] args)     {     JFrame fenetre = new JFrame();     JPanel panel = new JPanel();     JLabel etiquette = new JLabel("Aujourd'hui: ");     JCheckBox premier = new JCheckBox("Lundi");     JCheckBox deuxieme = new JCheckBox("Mardi");     JCheckBox troisieme = new JCheckBox("Mercredi");     JCheckBox quatrieme = new JCheckBox("Jeudi");     JCheckBox cinquieme = new JCheckBox("Vendredi", true);     JCheckBox sixieme = new JCheckBox("Samedi");     JCheckBox septieme = new JCheckBox("Dimanche");    

Exemple  panel.add(etiquette);     panel.add(premier);     panel.add(deuxieme);     panel.add(troisieme);     panel.add(quatrieme);     panel.add(cinquieme);     panel.add(sixieme);     panel.add(septieme);     fenetre.setContentPane(panel);     fenetre.setTitle("Wesh mate mon flow!");     fenetre.setBounds(100,100,200,200);     fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     fenetre.setVisible(true);     }   }

FlowLayout par défaut

Afficheurs 53

COMMENT POSITIONNER LES COMPOSANTS ? 54

DEUX MANIÈRES Positionner de manière absolue, revient à : Retirer tout gestionnaire d’affichage (setLayout(null)) Placer un par un les éléments en leur donnant leur position dans la fenêtre (méthode setBounds) Positionner en utilisant des gestionnaires d’affichage 55

MISE EN PAGE DES COMPOSANTS La mise en page des éléments s’effectue à l’aide d’un gestionnaire d’affichage (Layout), Tous les containers possèdent une méthode setLayout qui permet de spécifier le type de gestionnaire d’affichage On peut ajouter des contraintes lorsqu’on ajoute un composant 56

LES DIFFÉRENTS TYPE DE LAYOUT BorderLayout, GridLayout, FlowLayout, CardLayout, BoxLayout, GridBagLayout 57

UTILISATION D’UN LAYOUT Création du layout Exemple : BorderLayout bl = new BorderLayout()) 2. Association au container : panel.setLayout(bl) Ajout de composants au container, avec ou sans contrainte panel.add(button, BorderLayout. EAST) 58

BORDERLAYOUT Définit des zones dans lesquelles ajouter des éléments Intéressant pour le panneau principal 59

GRIDLAYOUT Définit une grille où ajouter les composants L’ajout des composants se fait sans préciser de contraintes On déclare le layout de la manière suivante : new GridLayout(0,2) // row, column 0 signifie autant qu’on veut 60

FLOWLAYOUT On ajoute au fur et à mesure les composants, si cela ne tient pas dans la ligne, on commence une nouvelle ligne Gestionnaire d’affichage par défaut des JPanel Possibilité de spécifier l’alignement 61

CARDLAYOUT Permet d’empiler des composants (suivant des panneaux) Le dernier ajouté ou celui spécifié est visible Concept de la pile de cartes 62

BOXLAYOUT Définit une boîte dans laquelle seront ajoutés les différents composants Cette boîte peut-être : Horizontale : X_AXIS Verticale : Y_AXIS On ajoute les éléments au fur et à mesure 63

GRIDBAGLAYOUT (1/2) Gestionnaire d’affichage relativement compliqué à mettre en place Demande de définir toutes les contraintes des différents composants à placer Place les composants au-travers une grille modulaire 64

GRIDBAGLAYOUT (2/2) 65

Aperçu de Swing et aussi… Les îcones : javax.swing.ImageIcon créer avec le nom d’un fichier image par exemple Menus : les JMenuBar, JMenu, JMenuItem Les Layout :Basé sur PreferredSize ou une maximisation de l’élément •BorderLayout –par défaut dans une fenêtre –ajout en précisant la zone –add("North", comp) •FlowLayout : en ligne •GridLayout : en tableau •GridBagLayout : avec des contraintes •etc.

Modèle & Vue

MODÈLE/VUE AVEC LES JLIST ET LES JTABLE Il est possible de partager le modèle de données d’une JTable ou d’une JList à d’autres composants considérés comme d’autres vues de l’objet JTable ou JList Par exemple : une liste de noms affichée dans une JList. La JList est une vue (interactive) de la liste de noms permettant la sélection d’élément. Une représentation tabulaire de la même liste est une autre vue Un texte qui indique le nombre d’éléments de la liste est une autre vue du modèle 68

ILLUSTRATION 69

Définition du modèle associé Si le modèle est décrit par une interface ListModel / TableModel prédéfinie, L’interface permet d’expliciter comment gérer les données du modèle et d’ajouter des vues (écouteurs de changements sur le modèle) Rem : il existe généralement une classe Adapter nommée Default<X>Model avec <X>=List ou Table Si le modèle change, il génère un événement et notifie les vues (via des méthodes en fire<…>) 70

Définition d’une nouvelle vue Pour qu’un autre composant soit considéré comme une vue, il doit : Implémenter l’interface adéquate pour être écouteur de l’événement de changement de modèle Se faire ajouter à la liste des écouteurs du modèle 71

JLIST Possède différents constructeurs : Données fixes : JList (Vector listData) JList (Object[] listData) Données modifiables : JList (ListModel dm) 72

JLIST Exemple String listData[]= {…,« Carlos »,…, « Ramier»}; DefaultListModel model = new DefaultListModel(); for (int i=0; i<listData.length; i++) model.addElement(listData[i]); JList dataList = new JList(model); JScrollPane listeScroll = new JScrollPane(dataList); 73

JLIST : LE MODÈLE ASSOCIÉ Pour le modèle, utiliser la classe DefaultListModel. Ce modèle stocke les objets sous forme de vecteur et fournit les méthodes suivantes : addElement (Object), boolean contains(Object), boolean removeElement(Object) Object get(index), Object remove(index), int size() addListDataListener (ListDataListener l), remove… fireContentsChanged,fireIntervalAdded, fireIntervalRemoved (Object source, int index0, int index1) 74

ILLUSTRATION 75

JLIST Possède une méthode qui permet de spécifier le mode de sélection : setSelectionMode (int mode). mode peut valoir : SINGLE_SELECTION SINGLE_INTERVAL_SELECTION MULTIPLE_INTERVAL_SELECTION Possède une méthode addListSelectionListener () qui écoute un ListSelectionEvent e qui est émis à chaque fois qu’une sélection change et implémente une méthode : valueChanged 76

JLIST : LA VUE Une vue d’une JList implémente l’interface ListDataListener. Il y a trois méthodes : void contentsChanged(ListDataEvent e) : contenu de la liste a changé void intervalAdded(ListDataEvent e) void intervalRemoved(ListDataEvent e) l 77

JLIST : PLUSIEURS VUES ?! Créer un modèle instance de DefaultListModel et le mémoriser. Créer ensuite la liste avec ce modèle. Pour chaque composant désirant être informé des changements ( = d’autres vues ou le contrôleur) : Mémoriser le modèle ( = le stocker dans un membre) Implémenter ListDataListener Enregistrer le composant dans le modèle avec addListDataListener 78

JTABLE Un constructeur possible de JTable : JTable (Object[][] rowData, Object[] columnNames) On peut accéder au modèle sous-jacent avec la méthode : TableModel getModel() Un autre constructeur avec directement le modèle : String nomsCol[]={«Prenom», «Nom»}; String rows[][] = { {«Dinah»,«Cohen»}, … , {«Said», «Kharrazen»}}; DefaultTableModel model = new DefaultTableModel(rows, nomsCol); JTable table = new JTable(model); 79

JTABLE : LE MODÈLE ASSOCIÉ Il existe 3 différents éléments pour créer un modèle : L’interface TableModel La classe AbstractTableModel qui implémente TableModel La classe DefaultTableModel DefaultTableModel est le plus simple à utiliser, quelques constructeurs associés : DefaultTableModel(int row, int col) DefaultTableModel(Object[][] data, Object[] columnNames) DefaultTableModel(Vector data, Vector columnNames) … 80

JTABLE : LA VUE Une vue implémente l’interface TableDataListener Il y a une méthode : void tableChanged(TableModelEvent e) L’événement associé TableModelEvent : int getType() : INSERT, UPDATE, DELETE int getColumn() int getFirstRow() int getLastRow() 81

JTABLE : PLUSIEURS VUES ?! Créer un modèle, par exemple une instance de DefaultTableModel et le mémoriser Pour chaque composant désirant être informé des changements (les vues et/ou le contrôleur) : Mémoriser le modèle Implémenter TableModelListener Enregistrer le composant dans le modèle avec : addTableModelListener 82

SYNTHESE

Hiérarchie Swing

Aperçu de Swing http://download.instantiations.com/DesignerDoc/integration/latest/docs/html/palettes/ swing_palettes.html Arch

Aperçu de Swing Les Containers Ont un LayoutManager –add / remove d’un Component –Unicité de lieu –Indice des components Méthodes à connaître •repaint() ! validate() ! •setEnabled(true / false) : activé / désactivé •(Rectangle) getBounds / setBounds(x,y, w, h) : positionne et dimensionne •getWidth() : largeur / getHeight() : hauteur •getX() et getY() : obtenir une coordonnée •setVisible(true / false) •getBackground et setBackground [objet Color, définition RGB]

Aperçu de Swing Des composants JComponent Hérite de Container Méthodes de commodité getSize retourne une Dimension setSize : une Dimension ou deux entiers –Une position •getLocation retourne un Point •setLocation avec un Point ou deux entiers –Coordonnées •Origine au coin supérieur gauche •x (width) vers la droite et y (height) vers le bas –Méthode public void paint(Graphicsg) –setPreferredSize –setDoubleBuffered(true/false) / isDoubleBuffered() –setOpaque(true / false) •Dessin à l’écran : paint appelle –paintComponent –paintBorder –paintChildren Les boutons –JButton /JToggleButton / JCheckBox / JRadioButton –java.awt.ButtonGroup (méthode add) Les champs textuels –JTextField/ JTextArea Etc…

Aperçu de Swing et aussi… Les îcones : javax.swing.ImageIcon créer avec le nom d’un fichier image par exemple Menus : les JMenuBar, JMenu, JMenuItem Les Layout :Basé sur PreferredSize ou une maximisation de l’élément •BorderLayout –par défaut dans une fenêtre –ajout en précisant la zone –add("North", comp) •FlowLayout : en ligne •GridLayout : en tableau •GridBagLayout : avec des contraintes •etc.

Aperçu de Swing Les Containers Ont un LayoutManager –add / remove d’un Component –Unicité de lieu –Indice des components Méthodes à connaître •repaint() ! validate() ! •setEnabled(true / false) : activé / désactivé •(Rectangle) getBounds / setBounds(x,y, w, h) : positionne et dimensionne •getWidth() : largeur / getHeight() : hauteur •getX() et getY() : obtenir une coordonnée •setVisible(true / false) •getBackground et setBackground [objet Color, définition RGB]

Exemple de code

EXEMPLE D’APPLICATION JAVA SWING JFrame frame = new JFrame("TopLevelDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Create the menu bar. Make it have a green background. JMenuBar greenMenuBar = new JMenuBar(); greenMenuBar.setOpaque(true); /RVB greenMenuBar.setBackground(new Color(154, 165, 127)); greenMenuBar.setPreferredSize(new Dimension(200, 20)); //Create a yellow label to put in the content pane. JLabel yellowLabel = new JLabel(); yellowLabel.setOpaque(true); yellowLabel.setBackground(new Color(248, 213, 131)); yellowLabel.setPreferredSize(new Dimension(200, 180)); //Set the menu bar and add the label to the content pane. frame.setJMenuBar(greenMenuBar); frame.getContentPane().add(yellowLabel,BorderLayout.CENTER); 91