Vos premiers pas en Swing

Slides:



Advertisements
Présentations similaires
Licence pro MPCQ : Cours
Advertisements

Conception d’IHM en Java
Conception d’IHM en Java
Gestion des événements (suite)
Audrey Occello Cédric Joffroy Anne-Marie Dery
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.
Approfondissement du langage
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
FORMATION OUTILS « FONCTIONS »
Lexique des manœuvres de base pour utiliser à PowerPoint
LICENCE MIAGE Introduction Programmation Orientée Objet JAVA philippe
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
JAV - TD 6 Structures de données JAVA
Formulaire HTML Introduction. Définition de formulaire.
Principe de défilement du document dans un traitement de texte
Les TABLEAUX Retour au menu principal.
Vidéogramme séance 2 du 13 février 2012 Les Fenêtres Windows Micro Informatique au Cellier Joseph HOHN Séance du 13 février 2012 Sur le thème de Découverte.
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 Logiciel de traitement de texte:
Développement d’applications web
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
Formation au module Structure de ZENTO
Ce bouton vous donne accès à la plupart des commandes qui étaient auparavant sous le menu Fichier en plus des options de l'application.
Écouteurs de click d'une fenêtre
Création d’un programme :
Bureautique M1 Mise en forme évoluée.
Création d'un diaporama Création d'un diaporama
Utiliser les masques de documents j puis appuyez sur F5 ou cliquez sur Diaporama > À partir du début pour commencer le cours. Dans la barre des messages,
28 novembre 2012 Grégory Petit
Tableaux de distributions
Tableaux de distributions
Projet poker 1/56. Introduction Présentation de léquipe Cadre du projet Enjeux Choix du sujet 2.
Graphical User Interface (GUI)
FICHIERS : Définition : Algorithme général:
2 TP avec l ’aide d ’un modeleur 3D :
Représentation des systèmes dynamiques dans l’espace d’état
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.
Notre calendrier français MARS 2014
Formation Développeur Java Applet et interfaces graphiques avec AWT
COURS DE PROGRAMMATION ORIENTEE OBJET :
TYPES DE COMPOSANTES SWING Cours 420-B43. On peut distinguer 3 Niveaux 3 niveaux Haut niveau : toute application graphique doit comprendre au moins une.
Structures des données
Biologie – Biochimie - Chimie
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.
LES PILES ET FILES.
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.
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
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.
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:

Vos premiers pas en Swing Swing est une boˆıte `a outils permettant la cr´eation d’interfaces utilisateur en Java. Swing est une am´elioration de AWT (Abstract Window Toolkit) qui ´etait la boˆıte `a outils originale tout en s’appuyant dessus. Les interfaces graphiques ainsi cr´e´ees sont ind´ependantes de l’OS et de l’environnement graphique sous-jacents Partie structurelle Audrey Occello & AM Dery pinna@polytech.unice.fr

Que trouve-ton dans une librairie graphique ? Des éléments graphiques : Component Définition d’un élément graphique avec une dimension, une position, un type de contrôle associé Des éléments graphiques composés : Container Définition d’un regroupement Des éléments graphiques qui contiennent d’autres éléments graphiques 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 SWING

Aperçu de Swing

HIÉRARCHIE DES CLASSES 4

IL PEUT Y AVOIR PLUSIEURS PANNEAUX DANS UNE FENETRE PRINCIPES GÉNÉRAUX Pour la création des composants : Choix du container racine et création Choix du panneau dans lequel on dispose les composants (contenu) Pour l’affichage des composants Utilisation du layout par défaut ou choix d’une mise en page des composants du container Association de l’afficheur (LayoutManager) au container 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 IL PEUT Y AVOIR PLUSIEURS PANNEAUX DANS UNE FENETRE 5

PRINCIPES GÉNÉRAUX 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 6

Exemple : ARBRE DE COMPOSANTS 7

Composants : Contrôles COMMENT SAISIR & AFFICHER DES DONNEES ET PRESENTER DES ACTIONS ? 8

Aperçu de Swing Des composants de contrôle Jcomponent 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 – y (height) vers le bas • setPreferredSize : Dimension • setMinimumSize : Dimension • setMaximumSize : Dimension • setBackground : Color Et bien d’autres ! 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 Les îcones : javax.swing.ImageIcon créer avec le nom d’un fichier image par exemple

JLABEL Permet de définir un label Peut comporter : une icône, du texte ou les deux 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 ImageIcon ii = new ImageIcon(‘‘icon.jpg’’); Jlabel jl = new JLabel(‘‘text + icône’’, ii, JLabel.CENTER); 10

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 JMenu, il est possible d’ajouter un Mnemonic Permet d’accéder au menu directement en faisant : Alt+Char Est associé à un caractère (setMnemonic(char)) Sur les JMenuItem il est possible d’ajouter des accélérateurs : Permet d’associer une combinaison du type Ctrl+Touche setAccelerator(KeyStroke.getKeyStroke ( KeyEvent.LA_TOUCHE, ActionEvent.LE_MASQUE) 11

ILLUSTRATION D’UN MENU JMenuBar JMenu JMenuItem 12

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 : Factory.createEtchedBorder() 13

COMMENT GROUPER LES COMPOSANTS D’IHM ? Containers COMMENT GROUPER LES COMPOSANTS D’IHM ? 14

Aperçu de Swing Les Containers – add / remove d’un Component – unicité de lieu – indice des components – association à un LayoutManager Méthodes à connaître • repaint() ! validate() ! : mise à jour de l’IHM • 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]

DES CONTAINERS RACINE 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. Seules ces deux classes peuvent ˆetre affich´ees en dehors de tout conteneur 16

LES DIFFÉRENTS PANNEAUX D’UN JFRAME, JDIALOG, JAPPLET S’obtiennent par : getRootPane () zone de la fenêtre sous le titre getLayeredPane() zone où sont cachés les panneaux non visibles 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 17

JFRAME : ILLUSTRATION JFrame frame = new JFrame("TopLevelDemo"); //Create the menu bar. Make it have a green background. JMenuBar greenMenuBar = new JMenuBar(); greenMenuBar.setOpaque(true); 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)); //Set the menu bar and add the label to the content pane. frame.setJMenuBar(greenMenuBar); frame.getContentPane().add(yellowLabel); frame.setVisible(true); 18

JFRAME : ILLUSTRATION 19

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 20

JFRAME : ILLUSTRATION import javax.swing.*; public class TryWindow { public static void main (String[] args) { JFrame myWindow = new JFrame (''ceci est un titre''); myWindow.setBounds (50, 100, 400, 150); // définit la position et la taille // détermine ce qu'il se passe lorsque l'on ferme la fenêtre myWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); myWindow.setVisible(true); // rend visible la fenêtre } (0,0) DISPOSE_ON_CLOSE – contrainte par défaut - détruit le JFrame et ses composants mais ne termine pas l'application DO_NOTHING_ON_CLOSE HIDE_ON_CLOSE X=50 H=150 21 Y= 100 W=400

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 information erreur question 23

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 24

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

APPLET JAVA 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) 26

EXEMPLE D’APPLET <HTML> 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> 27

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 28 Ces restrictions peuvent être levées par un certificat de sécurité (cf. jarsigner, policytool)

AUTRES CONTAINERS La famille des panneaux Pour structurer les différents éléments graphiques, on utilise des containers qui font partis de la famille des panneaux. Quelques panneaux très utiles : 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 29

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 30

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 31

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

JTABBEDPANE Permet d’avoir des onglets Permet de mieux gérer l’espace de travail Chaque onglet est créé avec son 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) 33

COMMENT POSITIONNER LES COMPOSANTS ? Afficheurs COMMENT POSITIONNER LES COMPOSANTS ? 34

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) Du «sur mesure» mais peut s’avérer très complexe à définir ! Positionner de manière relative en utilisant des gestionnaires d’affichage 35

MISE EN PAGE RELATIVE 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 Avantage : Le redimensionnement est géré automatiquement 36

Aperçu de Swing Layouts 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(comp, "North") • FlowLayout : en ligne(s) • BoxLayout : séquence verticale ou horizontale • GridLayout : en tableau • GridBagLayout : avec des contraintes • CardLayout : empilement • etc.

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) 38

BORDERLAYOUT Définit des zones avec différentes proportions dans lesquelles ajouter des éléments La zone centrale s’agrandit proportionnellement au container associé Gestionnaire d’affichage par défaut des JFrame NORTH EAST WEST 39 SOUTH CENTER

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 (centré par défaut) setAlignement(int) – 0 gauche, 1 centré, 2 droite 40

Exemple import javax.swing.*; public class Exemple { 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");

Exemple JCheckBox septieme = new JCheckBox("Dimanche"); 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); }

Aperçu du résultat Le placement s’ajuste en fonction de la taille de la fenêtre :

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 44

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

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 46

GRIDBAGLAYOUT Place les composants dans une grille modulaire en définissant les contraintes des différents composants à placer Pour une mise en page complexe 47

MISE EN PAGE COMPLEXE autre solution Combinaison de plusieurs panels avec leur propre layout 48

Composants et partage de données COMMENT GERER LA COHERENCE DE PLUSIEURS VUES ? 49

LES JLIST ET LES JTABLE Permettent de représenter une collection de données Il est possible de partager des données d’une JTable ou d’une Jlist avec 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 50

ILLUSTRATION JLIST/JTABLE 51

JLIST Possède différents constructeurs : Données fixes : JList (Vector listData) ou JList (Object[] listData) Données modifiables : JList (ListModel dm) 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 52

LISTMODEL Pour le modèle de données, 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() Plus d’autres méthodes pour gérer les mises à jour des vues utilisants ces données (cf prochain cours) addListDataListener (ListDataListener l), remove… fireContentsChanged,fireIntervalAdded, fireIntervalRemoved (Object source, int index0, int index1) 53

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); 54

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); 55

TABLEMODEL Il existe 3 différents éléments pour créer un modèle de données : 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) Plus d’autres méthodes pour gérer les mises à jour des vues utilisant ces données (cf prochain cours) 56