La programmation Réseau

Slides:



Advertisements
Présentations similaires
Réaliser en Java un programme client d’une Base de Données
Advertisements

Conception d’IHM en Java
LE LANGAGE JAVASCRIPT LES FENETRES.
GESTION D’IMPRISSION SOUS WINDOWS & LINUX
Evénements Java Beans Java RMI
A propos de java Sun, fin 1995 C++ nettoyé semi-interprété
Gestion des événements (suite)
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
TP 7.1 synchronized et join Écrire un programme Java qui crée 1000 threads et maintient un compteur nb du nombre de threads créés jusque-là. Le thread.
Exposé de Système - Informatique et Réseau
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.
(Classes prédéfinies – API Java)
Voisin-Polian : Introduction à Java 1 Introduction à Java - AWT - Frédéric VOISIN – Nicole POLIAN FIIFO - « Remise à Niveau »
Plan du cours La sérialisation: – comment stocker et restaurer les Objets? Les interfaces graphiques et la programmation évènementielle. –Comment concevoir.
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
Cours 6 : XML et les architectures N-tiers – Tier Applicatif
MIKHAYLOVA Vera Exposé Java principe de fonctionnement Lundi 17 mai 2004 DEUG 1ère année Science du langage Paris III.
Vos premiers pas en Swing
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance

Design Pattern MVC En PHP5.
Servlet JAVA.
Formulaire HTML Introduction. Définition de formulaire.
LOG 02 Bases de Données Avancées Rappels sur JSP / Servlet
Etude des Technologies du Web services
Module 1 : Préparation de l'administration d'un serveur
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Écouteurs de click d'une fenêtre
Laboratoire d'Informatique de l’Université de Franche-Comté
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.
Graphical User Interface (GUI)
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Graphical User Interface
Manipulation de formulaires en Javascript
Programmation concurrente
Multi-Thread Jian-Yun Nie
Module 2 : Préparation de l'analyse des performances du serveur
Formation Développeur Java Applet et interfaces graphiques avec AWT
PHP & My SQL.
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.
JavaScript Nécessaire Web.
Exploration de la programmation android Formation Assurer par: Club FreeWays Réalisé par: BOUHJJA Lamia.
Evénements. Plan Evénements Principes Exemples Adapteur.
11/04/ L'héritage Cours 7 Cours 7.
Cours 7 Classes locales Clonage Divers: tableaux.
Interactions entre Processus
Cours 91 9 Interfaces graphiques avec awt. Cours 92 Plan Introduction : deux bibliothèques graphiques 1.Comment se dessine une fenêtre ?  Un exemple.
CEG3585/CEG3555 Tutorat 2 Hi ver 2013.
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
Programmation Système et Réseau
Les sockets.
POWERPOINT.
 Formulaires HTML : traiter les entrées utilisateur
Initiation au JavaScript
 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)
Architecture Client/Serveur
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.
** Flash séance 2 Action script. ** Action Script Ajoute de l’interactivité Permet de contrôler les clips  Langage de programmation orienté objet.
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.
Les formulaires Les calques Les comportements Les scénarios Les modèles Les feuilles de styles (CSS) La mise en ligne Les formulaires permettent à l’utilisateur.
DREAMWEAVER MX2 - Séance 2 Les calques Les comportements Les scénarios Les formulaires Les feuilles de style Les modèles Les cadres Mise en ligne Jérôme.
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:

La programmation Réseau Java : Aspects Avancés La programmation Réseau

Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine afin d’y établir des flux d’entrées/sorties. En java, la socket est équivalente à un gestionnaire d’entrée/sortie entre deux machines.

Protocoles de communication Il existe deux protocoles utilisant les sockets en Java : TCP : Stream Socket Communication en mode connectéS Les applications sont averties lors de la déconnexion UDP : Datagram Socket Communication en mode non connectéS Plus rapide mais moins fiable que TCP

Protocole TCP Le serveur : Le client : Crée une socket Attend une connection accepte la demande échange de données Le client : demande une connection création de socket échange de données

ServerSocket Définit une socket sur le serveur. Pour créer une ServerSocket, il faut lui donner un numéro de port. Une fois crée, la socket Serveur attend une connection par la méthode accept(). Ex : ServerSocket s = new ServerSocket (8888) Socket socket = s.accept(); // attente d ’une connection

La Socket du client Se connecter sur une socket d ’un serveur, implique de connaître son adresse. InetAddress permet de récupérer une adresse à partir d ’un nom. La liaison d ’une socket à la socket serveur peut alors être demandée Ex : InetAddress addr = InetAddress.getByName("crabe"); Socket socket = new Socket(addr, Serveur_1.PORT);

Communication inter-socket Les communication entre socket s ’effectue ‘ classiquement ’, par les flux d ’entrées, issus de la méthode getInputStream par les flux de sorties, issus de la méthode getOutputStream.

Communication inter-socket Exemple ServerSocket s = new ServerSocket(8888); System.out.println("Socket lancee : " + s); try { Socket socket = s.accept(); // Attendre une connection System.out.println( "Connection acceptee: "+ socket); InputStream socket_in = new InputStream( socket.getInputStream()); DataInputStreaam in = new DataInputStreaam(socket_in); String str = in.readLine(); }

Protocole UDP Emission de paquets de données, rapide mais peu fiable Définir un paquet à envoyer ou à recevoir par la classe DatagramPacket Définir une socket par la classe DatagramSocket

Emission de paquets import java.net.*; public class UDPClient { public static void main(String arg[]) try String chaine = "un message"; byte[] data = chaine.getBytes(); InetAddress addr = InetAddress.getByName(null); DatagramPacket packet = new DatagramPacket(data, data.length, addr, 1234); DatagramSocket ds = new DatagramSocket(); ds.send(packet); ds.close(); } catch(Exception e){}

Reception de paquets import java.net.*; public class UDPServeur { public static void main(String arg[]) try // Serveur DatagramSocket ds = new DatagramSocket(1234); while(true) DatagramPacket packet = new DatagramPacket(new byte[1024], 1024); ds.receive(packet); System.out.println("Message: " + packet.getData()); } catch(Exception e){}

Une classe réseau : URL URL permet de créer des liens vers des pages internets : Exemple : URL url = new URL("http://www.univ-valenciennes.fr/index.html"); DataInputStream dis = new DataInputStream(url.openStream()); String line; while ((line = dis.readLine()) != null) System.out.println(line);

Exercice Un exemple classique de programmation réseau : le client-serveur. Un serveur est lancé sur une machine et attend la connexion d’un client. Puis, il récupère les lignes envoyées par le client, les affiche et les lui renvoie.

Java : Aspects Avancés Les Threads

Qu’est-ce qu’un thread? Un thread est un processus qui hérite de son processus père. Java permet la mise ne commun de code, de données (« light weight process » ou « processus léger ») Le processus partage ses ressources système (entrées/sorties, ...). La programmation est enfin sans contrainte !

Utilité des processus Afin de « rendre la main » au programme principal. Afin d ’interagir efficacement. Pour la gestion des graphiques, des applets.

Définition d’un Thread Pour créer une tâche, il suffit de faire hériter sa classe de la classe Thread. La principale méthode de Thread est run() qui doit être surchargée. C’est la méthode qui sera exécutée simultanément par les autres tâches du programme. La méthode yield() oblige la tâche à se reposer, pour laisser aux tâches la possibilité de s’exécuter La classe Thread implémente l’interface Runnable. Implémenter Runnable oblige à définir la méthode run().

Exemple de thread (1/2) class une_tache extends Thread { une_tache(String nom) { super(nom); } // appel au constructeur de Thread public void run() while (true) System.out.println("Mon nom est : " + getName()); Thread.yield(); // petite pause }

Exemple de thread (2/2) class Exemple_tache_1 { public static void main(String args[]) une_tache tache1 = new une_tache("tache 1"); une_tache tache2 = new une_tache("tache 2"); tache1.start(); tache2.start(); while (true) System.out.println("Je suis la tâche principale"); Thread.yield(); }

Run et Start La méthode run() est généralement placée dans une boucle infinie La méthode start(), est utilisée pour lancer le Thread et appelle la méthode run()

Accès simultanés à une ressource La programmation multitâche implique le partage de ressources (mémoire, objets). Dans certains cas, ceci peut être problématique. Pour cela, Java dispose du mot clé synchronized qui assure l’exclusion mutuelle d’une section critique en informant le moniteur (gestionnaire de mémoire). exemple: public synchronised void compte() {…} empèche toute instance de la classe de lancer compte tant qu’elle ne s’est pas terminée. Lorsqu'un thread t1 exécute cette méthode à partir d ’un objet, un autre thread t2 ne peut pas l'exécuter à partir du même objet. Mais t2 peut l ’exécuter pour une autre instance de la même classe.

Synchronisation et efficacité Chaque objet possède un verrou lock ou moniteur. (Cela fait partie de la classe Object). Exemple de verrou : ... synchronized (compteur) {compteur.add() ; compteur.mult() ; ...} Lorsqu'une méthode synchronisée d'un objet est appelée, le verrou est mis, aucune autre méthode synchronisée de cet objet peut être exécutée. Acquérir le verrou d'un objet est forcément coûteux. Il faut donc savoir gérer et diminuer au maximum les sections critiques.

Le processus dans tous ses états Nouveau : il est créé mais start() n ’est pas encore appelé Exécutable : il a été initialisé (il est exécuté si l ’ordonnanceur le décide) Mort : fin normale d ’un Thead (sortie de la méthode run() Bloqué : l ’ordonnanceur ignore le Tread

Raison d ’un blocage Le thread peut être : endormi : sleep(milliseconds) suspendu : par suspend(). Il sera alors relancé par resume() en attente : par wait(). Il pourra alors être réactivé par notify() ou notifyAll() IO : en attente d ’une Entrée/Sortie synch : en attente de la libération d ’une ressource synchronisée

Différence Wait/Suspend Tient le verrou de l ’objet, donc bloque dons les méthode synchronisées et peut être source de DeadLock Wait ne tient pas les verrous et donc ne doit pas être appelé d ’un bloc synchronisé, sous risque d ’accès concurrent

Maintien en cohérence... Il faut éviter l ’utilisation de : stop : cette méthode libère les verrous même si l ’objet est dans un état instable Il faut le remplacer par un test dans la boucle du run() lever l ’exception InterrupedException en utilisant la méthode interrupt() suspend (et donc resume), car ils sont sources de nombreux deadlock

Exercice Un exemple classique de programmation de processus : le producteur-consommateur. Un producteur produit des objets dans une pile, 2 consommateurs en consomment. Ecrire les classes Tab_objets, Producteur et Consommateur, ainsi que la classe principale.

Java : Aspects Avancés Les applets

Une Applet... Second type de programmation Java, le plus connu car le plus visible Ne peut être exécutée que depuis un Navigateur Le Navigateur doit contenir en interne une machine virtuelle sa propre méthode main

Les méthodes d ’une applet Une applet est un objet graphique (descendant de panel), aussi contient elle des méthodes graphiques. Les principales méthodes d ’une applet sont : init(), que le navigateur appelle après chaque chargement de l’applet., start(), lancée après l’initialisation, stop(), arrête l’applet lorsqu’elle n’est plus visible, destroy(), appelé à l’arrêt du navigateur, ou au rechargement de l’applet, paint(Graphics g) est appelé chaque fois que l’applet est réaffichée.

Exemple d ’applet import java.awt.*; import java.applet.*; public class Applet1 extends Applet { Font font; public void init() font = new Font("TimesRoman", Font.PLAIN,20); } public void paint(Graphics g) g.setFont(font); g.setColor(Color.red); g.drawString("Salut tout le monde!", 0, font.getSize()); g.draw3DRect(0, 0, 180, 30, true);

Insertion dans une page Web L ’insertion est possible par le tag APPLET : <HTML> <HEAD> <TITLE>Exemple d'applet</TITLE> <BODY> <H1>Un exemple dapplet</H1> <applet code="Applet1.class" width=200 height=50> desole ... ce navigateur ne supporte pas les applets </applet> </BODY> </HEAD> </HTML>

Passage de paramètres dans une page Web La méthode getParameter("msg") retourne la valeur du paramètre indiqué dans la page web. Pour passer les paramètres, il faut appeler l’applet dans la page web comme ceci : <Applet code="Applet1.class" width=300 height=200> <param name=msg value="voici le message"> </Applet>

Archiver les classes Lorsqu ’une applet utilise une autre classe située dans le même répertoire, elle charge cette classe, ce qui cause un ralentissement. Pour éviter les multiples chargement il faut compresser les classes avec jar L’appel à partir d’une page web se fera sous la forme : <Applet code="Applet1.class" archive= "nom_archive.jar" width=300 height=200> <param name=msg value="voici le message"> </Applet>

Applet permanente Toutes les applets utilisent la même machine virtuelle. Si l’on souhaite créer une applet à activité permanente (défilement de texte, d’images, ...), il faut la créer en tant que processus afin de ne pas bloquer les autres applets. Pour cela, il faut que l’applet implémente l’interface Runnable (similaire à Thread, mais qui permet de réécrire la fonction stop())

Exercice Ecrire une applet qui affiche un texte déroulant dans la barre d ’état du navigateur. On utilisera la fonction showStatus de l ’applet. La fréquence de défilement est passée en paramètre

AWT : Abstract Window Toolkit Java : Aspects Avancés AWT : Abstract Window Toolkit

Généralités sur AWT AWT comporte : Sylvain LECOMTE & Vincent POIRRIEZ Généralités sur AWT AWT comporte : des éléments graphiques des conteneurs Un mécanisme de gestion d'événements, ... AWT a beaucoup évolué entre 1.0.2 et 1.1.1 : nouveau modèle événementiel gestion de l'impression gestion de l'échange de données AWT a encore évolué avec Java Foundation Class et java.2D

Les objets graphiques de AWT Sylvain LECOMTE & Vincent POIRRIEZ Les objets graphiques de AWT Les éléments graphiques Button Canvas (zone de dessin) Checkbox Choice Label List MenuBar MenuItem TextArea TextField

Sylvain LECOMTE & Vincent POIRRIEZ Les conteneurs de AWT Les conteneurs sont les couches sur lesquels seront dessinés les objets : Frame Dialog Window Panel (conteneur de base) Les Gestionnaires de mise en page permettent de placer automatiquement les objets.

FlowLayout java.awt.FlowLayout : de gauche à droite, de haut en bas Sylvain LECOMTE & Vincent POIRRIEZ FlowLayout java.awt.FlowLayout : de gauche à droite, de haut en bas one two three

Sylvain LECOMTE & Vincent POIRRIEZ BorderLayout java.awt.BorderLayout découpe la zone en Nord, Sud, Est, Ouest et Centre North West Center East South

Sylvain LECOMTE & Vincent POIRRIEZ GridLayout java.awt.GridLayout découpe la zone en une grille dont on peut choisir les dimensions one two three four five six

Sylvain LECOMTE & Vincent POIRRIEZ Avantage de AWT Il permet de créer une interface graphique d ’exécutant sous toutes les interfaces (Windows, Xwindows, …) il simplifie la tâche du concepteur de l ’IHM (presque tous les objets sont présents)...

Sylvain LECOMTE & Vincent POIRRIEZ Evenements Chaque objet graphique (ou presque) possède sa propre gestion dévénements, Java propose des interfaces d ’écoute (Window, Mouse, ...)Listener Pour les plux complexes, il existe des classes dont les méthodes ne font rien ! (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

Exemple d ’interface AWT Sylvain LECOMTE & Vincent POIRRIEZ Exemple d ’interface AWT

Exemple d ’interface AWT (2) Sylvain LECOMTE & Vincent POIRRIEZ Exemple d ’interface AWT (2) tfPanel chPanel lstPanel cbPanel rbPanel btPanel MenuBar Label TextField Choice List Checkbox Button

Exemple de label // Text Field Panel Sylvain LECOMTE & Vincent POIRRIEZ Exemple de label // Text Field Panel Panel tfPanel = new Panel(new FlowLayout(FlowLayout.LEFT)); label = new Label("TextField"); tfdPanel.add(label); textField = new TextField(15); tfPanel.add(textField);

Sylvain LECOMTE & Vincent POIRRIEZ Exemple de choix // Choice Panel Panel chPanel = new Panel(new FlowLayout(FlowLayout.LEFT)); label = new Label("Choice"); chPanel.add(label); choice = new Choice(); choice.addItem("Solaris"); choice.addItem("Linux"); choice.addItem("Aix"); chPanel.add(choice);

Exemple de liste // List Panel Sylvain LECOMTE & Vincent POIRRIEZ Exemple de liste // List Panel Panel listPanel = new Panel(new FlowLayout(FlowLayout.LEFT)); label = new Label("List"); listPanel.add(label); list = new List(); list.addItem("Solaris"); list.addItem("Linux"); list.addItem("Aix"); listPanel.add(list);

Exemple de cases // Checkbox Panel Sylvain LECOMTE & Vincent POIRRIEZ Exemple de cases // Checkbox Panel Panel cbPanel = new Panel(new FlowLayout(FlowLayout.LEFT)); cbSolaris = new Checkbox("Solaris"); cbPanel.add(cbSolaris); cbLinux = new Checkbox("Linux"); cbPanel.add(cbLinux); cbAix = new Checkbox("Aix"); cbPanel.add(cbAix);

Exemple de bouton radio Sylvain LECOMTE & Vincent POIRRIEZ Exemple de bouton radio // RadioButton Panel Panel rbPanel = new Panel(new FlowLayout(FlowLayout.LEFT)); rbGroup = new CheckboxGroup(); rbSolaris = new Checkbox("Solaris"); rbSolaris.setCheckboxGroup(rbGroup); rbPanel.add(rbSolaris); rbLinux = new Checkbox("Linux"); rbLinux.setCheckboxGroup(rbGroup); rbPanel.add(rbLinux); rbAix = new Checkbox("Aix"); rbAix.setCheckboxGroup(rbGroup); rbPanel.add(rbAix); rbGroup.setSelectedCheckbox(rbSolaris);

Evenement sur choix, boutons radios, cases et listes Sylvain LECOMTE & Vincent POIRRIEZ Evenement sur choix, boutons radios, cases et listes ItemListener est l’interface permettant de gérer les événements sur les objets de type Choice, List et CheckBox  Elle contient la méthode itemStateChanged(ItemEvent e) déclenchée lors de sélection/déselection d’un item.

Exemple de bouton // Button Panel Sylvain LECOMTE & Vincent POIRRIEZ Exemple de bouton // Button Panel Panel btPanel = new Panel(new FlowLayout(FlowLayout.LEFT)); okButton = new Button("Ok"); okButton.addActionListener(new OkButtonListener()); btPanel.add(okButton); cancelButton = new Button("Cancel"); cancelButton.addActionListener(new CancelButtonListener()); btPanel.add(cancelButton);

Exemple de menu // Menu Bar Menu procMenu = new Menu("Procedural"); Sylvain LECOMTE & Vincent POIRRIEZ Exemple de menu // Menu Bar Menu procMenu = new Menu("Procedural"); procMenu.add(new MenuItem("Pascal")); ... Menu ooMenu = new Menu("Object Oriented"); ooMenu.add(new MenuItem("SmallTalk")); Menu funcMenu = new Menu("Functional"); funcMenu.add(new MenuItem("Lisp")); Menu languageMenu = new Menu("Languages"); languageMenu.add(procMenu); MenuBar mb = new MenuBar(); mb.add(languageMenu);

Exemple de construction Sylvain LECOMTE & Vincent POIRRIEZ Exemple de construction public class FrameExample extends Frame { public FrameExample(String title) { super(title); ... setMenuBar(mb); setLayout(new GridLayout(0, 1, 2, 2)); add(textFieldPanel); add(choicePanel); add(listPanel); add(checkboxPanel); add(radioButtonPanel); add(buttonPanel); pack(); show();}

Exemple de gestion d’événement sur bouton Sylvain LECOMTE & Vincent POIRRIEZ Exemple de gestion d’événement sur bouton Gestion des événements : clic sur le bouton Ok okButton.addActionListener(new OkButtonListener()); public class OkButtonListener implements ActionListener { public void actionPerformed(ActionEvent evt) { System.out.println("textField = " + textField.getText()); System.out.println("choice = " + choice.getSelectedItem()); System.out.println("list = " + list.getSelectedItem()); System.out.println("cbSolaris=" + (cbSolaris.getState() ?"Yes" : "No")); System.out.println("cbLinux=" + (cbLinux.getState() ?"Yes" : "No")); System.out.println("cbWindow=" + (cbAix.getState() ?"Yes" : "No")); System.out.println("rbSolaris=" + (rbSolaris.getState() ?"Yes" : "No")); System.out.println("rbLinux=" + (rbLinux.getState() ?"Yes" : "No")); System.out.println("rbWindow=" + (rbAix.getState() ?"Yes" : "No")); }

Exemple de gestion d’événement sur menu Sylvain LECOMTE & Vincent POIRRIEZ Exemple de gestion d’événement sur menu Gestion des événements : sélection d'items du menu MenuItem mi = new MenuItem("Pascal"); mi.addActionListener(new LanguageMenuListener()); public class LanguageMenuListener implements ActionListener { public void actionPerformed(ActionEvent evt) { System.out.println("Menu: " + evt.getActionCommand()}; }

Exemple de gestion d’événement sur fenêtre Sylvain LECOMTE & Vincent POIRRIEZ Exemple de gestion d’événement sur fenêtre Gestion des événements : fermeture de la fenêtre addWindowListener(new MyWindowListener()); public class MyWindowListener extends WindowAdapter { public void windowClosing(WindowEvent evt) System.out.println("Window closing"); System.exit(0); }

Evenement sur champs de texte et zone de texte Sylvain LECOMTE & Vincent POIRRIEZ Evenement sur champs de texte et zone de texte L’interface TextListener permet de gérer les événements sur les objets de type TextField et TextAera, Elle contient la méthode textValueChanged(TextEvent e) déclenchée lors de modification du texte

Autres gestions d ’événements (souris) Sylvain LECOMTE & Vincent POIRRIEZ Autres gestions d ’événements (souris) On trouve aussi l’interface MouseListener qui définit les méthodes void mouseClicked(MouseEvent e)  clic sur l’objet void mouseEntered(MouseEvent e)  passage sur l’objet void mouseExited(MouseEvent e)  sortie de l’objet void mousePressed(MouseEvent e)  pression sur l’objet void mouseReleased(MouseEvent e)  relâche de l’objet Cette interface est implémentée par la classe MouseAdapter qu ’il faudra étendre pour gérer les événements souris

Autres gestions d ’événements (fenêtre) Sylvain LECOMTE & Vincent POIRRIEZ Autres gestions d ’événements (fenêtre) Ainsi que l’interface WindowListener qui définit les méthodes suivantes : void windowActivated(WindowEvent e)  la fenêtre devient active void windowClosed(WindowEvent e)  fermeture par un bouton ou autre void windowClosing(WindowEvent e)  fermeture par menu système void windowDeactivated(WindowEvent e)  la fenêtre n’est plus active void windowDeiconified(WindowEvent e)  de minimisée à un autre état void windowIconified(WindowEvent e)  minimisation void windowOpened(WindowEvent e)  première ouverture Cette interface est implémentée par la classe WindowAdapter qu ’il faudra étendre pour gérer les événements sur la fenêtre.

Sylvain LECOMTE & Vincent POIRRIEZ L ’objet graphics Les fonctions de la classe Graphics permettent de dessiner simplement différentes figures sur un support : clearRect, draw3Drect, drawArc, drawImage, drawLine, drawOval, drawPolygon, drawPolyline, drawRect, drawString, fill3Drect, fillArc, fillOval, fillPolygon, fillRect, getColor, getFont, setColor, setFont. Le support peut être tout objet descendant de Composant

Exercice Créer une Frame permettant de dessiner des lignes à l ’aide de la souris Utiliser un tableau de 10 Points pour tracer des lignes entre chaque Point.

Sylvain LECOMTE & Vincent POIRRIEZ Java : Aspects Avancés Le Swing

Swing : Qu ’est ce que c ’est ? Sylvain LECOMTE & Vincent POIRRIEZ 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 Sylvain LECOMTE & Vincent POIRRIEZ Swing propose de nouveaux composants tels que Les Tables, les Arbres, la Barre de progression… Les 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 "zaper" entre les différentes interfaces : l ’interface Windows l ’interface Motif une interface 3D « métale »

Sylvain LECOMTE & Vincent POIRRIEZ Un exemple de swing... import javax.swing.*; import java.awt.*;import java.awt.event.*; public class SwingApplication { private static String labelPrefix = "Number of button clicks: "; private int numClicks = 0; public Component createComponents() final JLabel label = new JLabel(labelPrefix + "0 "); JButton button = new JButton("I'm a Swing button!"); button.setMnemonic(KeyEvent.VK_I); button.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) numClicks++; label.setText(labelPrefix + numClicks); } } ); label.setLabelFor(button); }

Un exemple de swing Suite... Sylvain LECOMTE & Vincent POIRRIEZ Un exemple de swing Suite... public static void main(String[] args) { try { UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e) { } //Create the top-level container and add contents to it. JFrame frame = new JFrame("SwingApplication"); SwingApplication app = new SwingApplication(); Component contents = app.createComponents(); frame.getContentPane().add(contents, BorderLayout.CENTER); //Finish setting up the frame, and show it. frame.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0); } }); frame.pack(); frame.setVisible(true); }

Sylvain LECOMTE & Vincent POIRRIEZ Swing dans une applet Il est tout à fait possible de créer des applets utilisant des composants swing. Il faut alors être sûr que les navigateurs des utilisateurs pourront interpréter le swing. import javax.swing.*; import java.awt.*; public class HelloSwingApplet extends JApplet { public void init() JLabel label = new JLabel("You are successfully running a Swing applet!"); label.setHorizontalAlignment(JLabel.CENTER); //Add border. label.setBorder(BorderFactory.createMatteBorder(1,1,2,2,Color.black)); getContentPane().add(label, BorderLayout.CENTER); }

Un autre exemple : un menu Sylvain LECOMTE & Vincent POIRRIEZ Un autre exemple : un menu

Sylvain LECOMTE & Vincent POIRRIEZ 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...

Sylvain LECOMTE & Vincent POIRRIEZ Java : Aspects Avancés Les JavaBean

Sylvain LECOMTE & Vincent POIRRIEZ La notion de composant Un bean Java est un composant réutilisable (sorte d ’active X) Il facilite donc la création de programmes par connexion de composants Java propose déjà un ensemble de composants très utiles (le bean hotjava par exemple pour afficher une page web, ...) Pour développer, utiliser des beans, il existe le bdk, le kit de développement de beans ...

Outil de développement Sylvain LECOMTE & Vincent POIRRIEZ Outil de développement Réserve de composants Application Propriété du composant sélectionné

L ’introspection Permet à un système de se regarder lui même Exemple : Sylvain LECOMTE & Vincent POIRRIEZ L ’introspection Permet à un système de se regarder lui même Exemple : Les objets de la classe Class représente des classes du système Les objets de la classe Method représente des méthodes On peut alors rechercher une classe par son nom Class classButton = Class.forName("Button"); et créer une nouvelle instance de cette classe Objetc myButton = classButton.newInstance(); et récupérer toutes les méthodes de cette classe : Method [] bmethods = classButton.getDeclaredMethods();

Qu ’est ce qu ’un Beans ? Un composant qui possède : Sylvain LECOMTE & Vincent POIRRIEZ Qu ’est ce qu ’un Beans ? Un composant qui possède : des propriétés des événements reconnus des méthodes de traitement des événements Importance de l ’introspection : possibilité d ’interroger le composant Quelles sont tes méthodes, les variables, les événements traités

Types de Beans Component (montre, barre, synoptique, ...) Sylvain LECOMTE & Vincent POIRRIEZ Types de Beans Component (montre, barre, synoptique, ...) Container (panneau, ...) Invisible (ne possède pas d ’interface graphique ) joue le rôle d ’interface Applet

Sylvain LECOMTE & Vincent POIRRIEZ La double vie des Beans Pendant la configuration dans le BDK le Bean peut posséder sa propre interface graphique de configuration Le bean est sérializé à la fermeture du bdk, il est désérialisé (rechargé) à l exécution. Les méthodes du bean sont activés par des événements.

Classes d’évènements prédéfinies Sylvain LECOMTE & Vincent POIRRIEZ Classes d’évènements prédéfinies Evénements de bas niveau java.util.EventObject java.awt.AWTEvent java.awt.event.ComponentEvent java.awt.event.FocusEvent java.awt.event.WindowEvent java.awt.event.InputEvent java.awt.event.KeyEvent java.awt.event.MouseEvent

Créer un Bean... 1. Ecrire le source : C ’est un rectangle rouge Sylvain LECOMTE & Vincent POIRRIEZ Créer un Bean... 1. Ecrire le source : C ’est un rectangle rouge import java.awt.*; import java.io.Serializable; public class SimpleBean extends Canvas implements Serializable { public SimpleBean() { setSize(60,40); setBackground(Color.red); }} 2. Créer un fichier jar contenant la classe SimpleBean

Créer un Bean (suite) 3. Charger le .jar dans la ToolBox Sylvain LECOMTE & Vincent POIRRIEZ Créer un Bean (suite) 3. Charger le .jar dans la ToolBox 4. Créer une instance de la classe dans la BeanBox On peut se rendre compte que le Bean dispose d ’un certain nombre de propriétés (qui sont en fait héritées de Canvas) : Foreground Background font name

Ajouter une propriété Exemple : la propriété de « couleur » Sylvain LECOMTE & Vincent POIRRIEZ Ajouter une propriété Exemple : la propriété de « couleur » 1. Créer et initialiser l ’atribut : private Color color = Color.green; 2. Ecrire une méthode pour obtenir la couleur : public Color getColor() {return color;} 3. Ecrire une méthode pour changer la couleur public void setColor(Color newColor){ color = newColor; repaint();} 4.Réécrire la méthode paint() héritée de Canvas : public void paint(Graphics g) { g.setColor(color); g.fillRect(20, 5, 20, 30);} 5.Compiler le Bean, le charger dans la Toolbox et créer une instance dans la BeanBox.

Sylvain LECOMTE & Vincent POIRRIEZ Résultat

Sylvain LECOMTE & Vincent POIRRIEZ Enterprise Java Beans Ce sont les Beans contenant une couche client serveur, très à la mode en ce moment (commerce électroniques, accès à ds bases de données distantes, communication aux travers de site web,...)

Sylvain LECOMTE & Vincent POIRRIEZ Java , suite Et non fin, cf. Internet, de nombreuses applications de Java à tous niveaux, possibilité d ’inclure des librairies C, notions de servlet pour communication de données d ’un client vers un fournisseur par html, accès sécurisé, xml, ...........