Cours de JAVA. Applications Graphiques avec AWT et Swing. Emmanuel ADAM. Institut des Sciences et Techniques de Valenciennes

Documents pareils
Interfaces graphiques avec l API Swing

Java 7 Les fondamentaux du langage Java

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Cours 2 : programmation des interfaces graphiques

Solutions du chapitre 4

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

Développement Logiciel

Programmation en Java Interface graphique. NGUYEN Thi Minh Tuyen

Le langage JAVA G. Baulieu Institut de Physique Nucléaire de Lyon Septembre 2009

Auto-évaluation Programmation en Java

Introduction au langage Java

Outils, langage et approche Android Une introduction. Nicolas Stouls lyon.fr

Construire des plug-ins pour SAS Management Console SAS 9.1

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Desktop Intégration. Rémi Forax

Sécurité Java 2. Première approche. Installation des exemples. Exemple d'une applet

Logiciel de gestion de caisse et d ardoises

Création d'une interface graphique

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Table des matières Introduction Démarrage Les composants graphiques... 26

La Programmation Orientée Agent Les Agents Réactifs

Langage Java. Classe de première SI

Programmation Orientée Objet

Création d un service web avec NetBeans 5.5 et SJAS 9

Chapitre 10. Les interfaces Comparable et Comparator 1

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

Java Licence professionnelle CISII,

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Cours 1: Java et les objets

Corrigé des exercices sur les références

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Formation. Module WEB 4.1. Support de cours

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

La base de données XML exist. A. Belaïd

SOMMAIRE. Présentation assistée sur ordinateur. Collège F.Rabelais 1/10

Programmer en JAVA. par Tama

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

TP1 : Initiation à Java et Eclipse

AVEC LIVE TRADER, VISEZ PLUS HAUT POUR VOS INVESTISSEMENTS

Package Java.util Classe générique

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Utiliser le service de messagerie électronique de Google : gmail (1)

ContactForm et ContactFormLight - Gestionnaires de formulaire pour Prestashop Edité par ARETMIC S.A.

Applet pour visualiser les variables «automate» notifiées

Espace pro. Installation des composants avec Firefox. Pour. Windows XP Vista en 32 et 64 bits Windows 7 en 32 et 64 bits

UTILISATION DE L'APPLICATION «PARTAGE DE FICHIERS EN LIGNE»

Remote Method Invocation (RMI)

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Initiation à JAVA et à la programmation objet.

Google Drive, le cloud de Google

Securexam Consignes pour l EFU Les 2, 3 et 4 juin 2015

Silhouette Studio Leçon N 2

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

Introduction à Eclipse

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

INITIATION AU LANGAGE JAVA

Rapport de stage. Reprise d'un programme Java, développement web et utilisation de CMS

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Java Licence Professionnelle CISII,

Assistant d e tablissement de Tableaux

RMI le langage Java XII-1 JMF

Automatisation d'une Facture 4. Liste Déroulante Remises Case à cocher Calculs

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

Bases Java - Eclipse / Netbeans

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

PRISE EN MAIN D ILLUSTRATOR

Le cas «BOURSE» annexe

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

26 Centre de Sécurité et de

as Architecture des Systèmes d Information

1. Ouvrir Internet Explorer Faire défiler une page Naviguer dans un site Internet Changer d adresse Internet (URL) 2

MEGA ITSM Accelerator. Guide de Démarrage

Manuel de System Monitor

Tapez le titre de la page «BASTIA ville méditerranéenne», puis allez deux fois à la ligne à l aide de la touche Entrée.

Documentation utilisateur. [EIP] TransLSF

TD3: tableaux avancées, première classe et chaînes

Design patterns. Design patterns - définition. Design patterns - avantages

MEGA ITSM Accelerator. Guide de démarrage

WinARC Installation et utilisation D un écran déporté (Windows 7)

FICHE 17 : CREER UN SITE WEB

PARAMETRER LA MESSAGERIE SOUS THUNDERBIRD

Le cas «BOURSE» annexe

NAS 206 Utiliser le NAS avec Windows Active Directory

Manuel d installation de Business Objects Web Intelligence Rich Client.

Fiche Mémo : Options d accessibilité sous Windows et Internet Explorer 5

Héritage presque multiple en Java (1/2)

Gestionnaire d emploi du temps

Comment sauvegarder ses documents

Tutorial Terminal Server sous

Atelier «personnaliser l environnement de l ordinateur mai 2015

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Objets et Programmation. origine des langages orientés-objet

Débuter avec OOo Base

PAGE 1. L écran du logiciel d Open Office Draw. Barre de menu: Les commandes du logiciel

Volet de visualisation

Comment réaliser une capture d écran dans Word. Alors comment ouvrir une page Word?

Transcription:

Cours de JAVA Applications Graphiques avec AWT et Swing Emmanuel ADAM Institut des Sciences et Techniques de Valenciennes Université de Valenciennes et du Hainaut-Cambrésis source principale : «Thinking in Java (B. Eckel)»

Généralités sur AWT et Swing AWT (Abstract Window Toolkit) et SWING comportent : des éléments graphiques des conteneurs Un mécanisme de gestion d'événements,...

Les objets graphiques de AWT & SWING Les éléments graphiques AWT SWING Button JButton Canvas (zone de dessin) Checkbox JCheckbox Choice JComboBox Label JLabel List MenuBar MenuItem TextArea TextField JList JMenuBar JMenuItem JTextArea JTextField JTable, JToolBar, JTree

Les conteneurs de AWT & Swing Les conteneurs sont les couches sur lesquels seront dessinés les objets : Frame // JFrame Dialog // JDialog Window // JWindow Panel // JPanel (conteneur de base)

Les gestionnaires de mise en page Permettent de placer automatiquement les objets. Possibilité d utiliser FlowLayout, GridLayout, SpringLayout, BorderLayout (par défaut) Possibilité de créer des gestionnaires de mise en page Possibilité de ne pas en utiliser et de placer les éléments par leurs coordonnées (demander l utilisation du gestionnaire null)

Mise en page : FlowLayout java.awt.flowlayout : de gauche à droite, de haut en bas one two three

Mise en page : BorderLayout java.awt.borderlayout découpe la zone en Nord, Sud, Est, Ouest et Centre North West Center East South

Mise en page : GridLayout java.awt.gridlayout découpe la zone en une grille dont on peut choisir les dimensions one two three four five six

AWT Avantages : Permet de créer une interface graphique d'exécutant sous toutes les interfaces (Windows, Xwindows, ) Simplifie la tâche du concepteur de l'ihm (presque tous les objets sont présents)... Inconvénients : graphiquement pauvre

Événements Chaque objet graphique (ou presque) possède sa propre gestion d'événements, Java propose des interfaces d'écoute sur les actions fenêtres, souris, (Window, Mouse,...)Listener Certaines sont implémentées par des classes creuses (Window, Mouse,...)Adapter Avantage, si une classe hérite d'une de ces classes, elle n'a qu'à surcharger la méthode désirée

Swing : Qu'est ce que c'est? Swing est un ensemble de librairies graphiques plus évoluées et plus complètes que les librairies AWT. Swing est livrée avec le JDK 1.2, pour JDK 1.1, il est possible de télécharger les classes swing.

Nouvelles Fonctionnalités Swing propose de nouveaux composants tels que Les Tables, les Arbres, la Barre de progression Les anciens objets graphiques AWT ont été surchargés (on trouve maintenant les types JButton, JPanel,...) Avec Swing, il est possible de masquer certains événements Il est possible de "zapper" entre les différentes interfaces : l'interface Windows l'interface Motif une interface 3D «métal»,

Exemple d'interfaces SWING (1/3) look Motif look Window look Metal

Exemple d'interfaces SWING (2/3) Choix des différents modes d affichage au lancement : java TestIHMSwing java -Dswing.defaultlaf=com.sun.java.swing.plaf.windows.WindowsLookAndFeel TestIHMSwing java -Dswing.defaultlaf=com.sun.java.swing.plaf.motif.MotifLookAndFeel TestIHMSwing Possibilité de changer dynamiquement le mode d affichage

Exemple d'interfaces SWING (3/3) JMenuBar JLabel JTextField JComboBox JList JCheckBox JPannel JRadioButton JButton

Exemple de label et de champs texte /** retourne un panneau contenant un label et un champs de texte*/ private JPanel donnerpanneauchampstexte() { JPanel panneau = new JPanel(new FlowLayout(FlowLayout.LEFT)); JLabel label = new JLabel("Un JTextField"); panneau.add(label); champstexte = new JTextField(15); panneau.add(champstexte); return panneau; }

Exemple de choix /** retourne un panneau contenant un label et une liste deroulante */ private JPanel donnerpanneauchoix() { JPanel panneau = new JPanel(new FlowLayout(FlowLayout.LEFT)); JLabel label = new JLabel("un JComboBox"); panneau.add(label); listedechoix = new JComboBox(); listedechoix.additem("valenciennes"); listedechoix.additem("lille"); listedechoix.additem("paris"); panneau.add(listedechoix); return panneau; }

Exemple de liste /** retourne un panneau contenant un label et une liste */ private JPanel donnerpanneauliste() { JPanel panneau = new JPanel(new FlowLayout(FlowLayout.LEFT)); JLabel label = new JLabel("une JList"); panneau.add(label); liste = new JList(new String[]{"Gare", "Place", "Eglise" }); panneau.add(liste); return panneau; }

Exemple de cases /** retourne un panneau contenant trois cases a cocher */ private JPanel donnerpanneaucases() { JPanel panneau = new JPanel(new FlowLayout(FlowLayout.LEFT)); casematin = new JCheckBox("Matin"); panneau.add(casematin); casemidi = new JCheckBox("Midi"); panneau.add(casemidi); casesoir = new JCheckBox("Soir"); panneau.add(casesoir); return panneau; }

Exemple de boutons radio /** retourne un panneau contenant trois boutons radio*/ private JPanel donnerpanneauradio() { JPanel panneau = new JPanel(new FlowLayout(FlowLayout.LEFT)); //les boutons radio ont un comportement dependant d'un groupe ButtonGroup groupeboutonsradio = new ButtonGroup(); radiomatin = new JRadioButton("Matin"); panneau.add(radiomatin); radiomidi = new JRadioButton("Midi"); panneau.add(radiomidi); radiosoir = new JRadioButton("Soir"); panneau.add(radiosoir ); groupeboutonsradio.add(radiomatin); groupeboutonsradio.add(radiomidi); groupeboutonsradio.add(radiosoir); // selection du bouton radio radiomidi.setselected(true); return panneau;

Exemple de boutons /** retourne un panneau contenant deux boutons Ok et Quitter */ private JPanel donnerpanneauboutons() { } // creation d'un objet de gestion d'evenement sur les boutons MaGestionButton gestionbouton = new MaGestionButton(); JPanel panneau = new JPanel(new FlowLayout(FlowLayout.CENTER)); JButton boutonok = new JButton("Ok"); // ajout de la gestion d'evenement sur le bouton boutonok.addactionlistener(gestionbouton); panneau.add(boutonok); JButton boutonannuler = new JButton("Quitter"); // ajout de la gestion d'evenement sur le bouton boutonannuler.addactionlistener(gestionbouton); panneau.add(boutonannuler); return panneau;

Exemple de menu /** retourne la barre de menu composee de deux sous menu : Menu et Affichage*/ private JMenuBar donnermenu() { // creation d'un objet de gestion d'evt sur le menu MonMenuListener gestionevtmenu = new MonMenuListener(this); // creation du menu "Menu" JMenu menu1 = new JMenu("Menu"); // ajout de sous menus a "Menu" JMenu menu11 = new JMenu("Restaurants"); JMenu menu12 = new JMenu("Brasseries"); JMenu menu13 = new JMenu("Restauration Rapide"); menu1.add(menu11); menu1.add(menu12); menu1.add(menu13); // ajout de feuille, interactive, donc associe a la gestion d'evenements JMenuItem menu111 = new JMenuItem("Auberge du bon chat"); menu111.addactionlistener(gestionevtmenu); menu11.add(menu111); JMenuItem menu121 = new JMenuItem("Romagogo : spécialités créoles"); menu121.addactionlistener(gestionevtmenu); JMenuItem menu122 = new JMenuItem("Steplé : spécialités légioises"); menu122.addactionlistener(gestionevtmenu); menu12.add(menu121); menu12.add(menu122);... // definition d'une barre de menu et ajout des deux menus principaux JMenuBar menubar = new JMenuBar(); menubar.add(menu1); menubar.add(menu2); return menubar;}

Un autre exemple de menu inspiré de Sylvain LECOMTE & Vincent POIRRIEZ

Exemple de construction /** constructeur prenant le titre de la fenetre en parametre<br> * fait appel aux fonction de création de zones et de menu*/ public TestSwing(String s) { super(s); // ajout du menu setjmenubar(donnermenu()); // recuperation du conteneur Container content = getcontentpane(); // mise en forme : 1 colone, nb de lignes indefini espacement entre colones et lignes de 2 content.setlayout(new GridLayout(0, 1, 2, 2)); // ajout de la premiere ligne content.add(donnerpanneauchampstexte()); // ajout de la 2eme ligne content.add(donnerpanneauchoix()); // ajout de la 3eme ligne content.add(donnerpanneauliste()); // ajout de la 4eme ligne content.add(donnerpanneaucases()); // ajout de la 5eme ligne content.add(donnerpanneauradio()); // ajout de la 6eme ligne content.add(donnerpanneauboutons()); // par defaut, le clic sur la croix quitte l'application setdefaultcloseoperation(exit_on_close); // optimiser l'espace dans la fenetre pack(); }

Gestion d événements AWT(1/2) AWT permet la gestion d évenements simples: sur les composants des interfaces provenant du clavier, de la souris (clic, déplacement, roulette), d autres objets voir le package java.awt.event

Exemple de gestion d événement, sur boutons (1/2) Gestion des événements : clic sur le bouton Ok public class MaGestionButton implements ActionListener { /** fonction declenchee automatiquement par une action sur les objets lies a la gestion d'evenement; recuperation du label de l'objet et declenchement des actions correspondantes*/ public void actionperformed(actionevent actionevent) { String nombouton = actionevent.getactioncommand(); if (nombouton.equals("ok")) actionboutonok(); else if (nombouton.equals("quitter")) System.exit(0); else System.out.println("evenement non traite : " + nombouton); }

Exemple de gestion d événement, sur boutons (2/2) /** fonction lancée en cas de clic sur ok, affiche les valeurs des composants swing<br> } possible car cette classe est interne donc a accès aux éléments de la classe TestSwing*/ private void actionboutonok() { System.out.println("champsTexte = " + champstexte.gettext()); System.out.println("listeDeChoix = " + listedechoix.getselecteditem()); System.out.println("liste = " + liste.getselectedvalue()); System.out.println("caseMatin=" + (casematin.isselected()? "Active" : "Non active")); System.out.println("caseMidi=" + (casemidi.isselected()? "Active" : "Non active")); System.out.println("caseSoir=" + (casesoir.isselected()? "Active" : "Non active")); System.out.println("radioMatin=" + (radiomatin.isselected()? "Active" : "Non active")); System.out.println("radioMidi=" + (radiomidi.isselected()? "Active" : "Non active")); System.out.println("radioSoir=" + (radiosoir.isselected()? "Active" : "Non active")); }

Exemple de gestion d événement, sur menu (1/2) /** classe de gestion d événements associés aux menus d'une fenêtre de type TestSwing*/ class MonMenuListener implements ActionListener { /** fenetre de type TestSwing a laquelle est liee la gestion d'evenement*/ TestSwing fenetre; /** constructeur prenant une fenetre en parametre afin de pouvoir y acceder */ public MonMenuListener(TestSwing _fenetre) { fenetre = _fenetre; } /** fonction declenchee automatiquement par une action sur les objets lies a la gestion d'evenement, ici, sur les feuilles des menu de la fenetre. * recuperation du label de l'objet et declenchement des actions correspondantes*/ public void actionperformed(actionevent actionevent) { String nom = actionevent.getactioncommand(); System.out.println("choix du menu: " + nom ); String look = fenetre.lookmotif;

Exemple de gestion d événement, sur menu (2/2) if (nom.equalsignorecase("windows")) { System.out.println("...windows..."); look = fenetre.lookwindows; } else if (nom.equalsignorecase("motif")) { System.out.println("...motif..."); look = fenetre.lookmotif; } } } else if (nom.equalsignorecase("metal")) { System.out.println("...metal..."); look = fenetre.lookmetal; } changement du look de la fenêtre (voir ses attributs pour les noms de look) try { UIManager.setLookAndFeel(look); SwingUtilities.updateComponentTreeUI(fenetre); } catch(exception exception) { exception.printstacktrace(); }

Gestion d événements Swing Swing permet la gestion d événements sur les composants évolué (Arbre, Table, ) propose de nouvelles écoutes d événements Exemple: déplacement dans un menu: class GestionMenu implements MenuListener { public void menucanceled(menuevent menuevent) { } public void menudeselected(menuevent menuevent) { } public void menuselected(menuevent menuevent) { JMenu menu = (JMenu)menuEvent.getSource(); System.out.println("menu sélectionné: " + menu.gettext()); } } Voir le package javax.swing.event

Swing dans une applet Création d applets utilisant des composants swing. Pb : Il faut que les navigateurs puissent interpréter le swing. import javax.swing.*; import java.awt.*; public class HelloSwingApplet extends JApplet { public void init() { JLabel label = new JLabel(" Ceci est une applet Swing!"); label.sethorizontalalignment(jlabel.center); //Ajout d un cadre label.setborder(borderfactory.creatematteborder(1,1,2,2,color.black)); getcontentpane().add(label, BorderLayout.CENTER); } }

Internationalisation (1/4) Modifier la langue des interactions sans modifier le code Définition de fichiers de traduction contenant «le paquet des messages» Utilisation de java.util.locale; java.util.resourcebundle;

Internationalisation : Exemple simple (2/4) Ex. Affichage en anglais et français de bonjour, définition des dictionnaires : le fichier [MesMessages_fr_FR.properties] contient debutcommunication = Bonjour... demande = Comment allez vous? fincommunication = Au revoir le fichier [MesMessages _en_en.properties] contient debutcommunication = Hello... demande = How are you? fincommunication = GoodBye + définition du dictionnaire par défaut [MesMessages.properties]

Internationalisation : Exemple simple (3/4) Deux indicateurs : pour la langue, pour la région exemple : fr pour français, FR pour France, CA pour Canada, public static void main(string args[]) { String langage = new String(args[0]); // premier parametre String region = new String(args[1]); // second parametre Locale langueregionale = new Locale(langage, region); ResourceBundle rb = ResourceBundle.getBundle("MesMessages", langueregionale); System.out.println(rb.getString("debutCommunication")); System.out.println(rb.getString("demande")); System.out.println(rb.getString("finCommunication")); }

Internationalisation : Exemple simple (4/4) Exécution : /internationalisation>java BonjourHello en US donne Hello How are you? Goodbye /internationalisation>java BonjourHello fr FR donne Bonjour... Comment allez vous? Au revoir...

Classes utiles : JOptionPane La classe JOptionPane permet d afficher une fenêtre de dialogue "rapidement" Exemple : demande d une chaîne String valeur = JOptionPane.showInputDialog("Entrez une valeur : ");

Classes utiles : JOptionPane JOptionPane = icône + message + valeur demandée + boutons Type de messages : ERROR_MESSAGE, PLAIN_MESSAGE, QUESTION_MESSAGE, INFORMATION_MESSAGE, WARNING_MESSAGE Type de boutons : DEFAULT_OPTION, YES_NO_OPTION, YES_NO_CANCEL_OPTION, OK_CANCEL_OPTION Exemple de message d alerte : JOptionPane.showMessageDialog (null, "attention", "probleme", JOptionPane.ERROR_MESSAGE);

Classes utiles : JOptionPane Exemple de message à choix JOptionPane.showConfirmDialog(null, "on remet ça?", "information", JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE);

Classes utiles : JOptionPane Exemple de message à choix Object[] valeurspossibles = { "valeur 1", "valeur 2", "valeur 3" }; Object valeurselectionnee = JOptionPane.showInputDialog(null, "Choisissez une valeur : ", "Choix", JOptionPane.INFORMATION_MESSAGE, null, valeurspossibles, valeurspossibles[0]);

Conclusion sur Swing Swing offre surtout beaucoup plus de composants que AWT (trop?) : Le rendu est meilleur Les options nombreuses Mais l'api est encore difficile à connaître ne pas hésiter à utiliser le Tutorial...