Travaux pratiques en langage JAVA TP n°5 : Communication entre

publicité
Travaux pratiques en langage JAVA
TP n°5 : Communication entre applets
____________________________
Vous lancerez les applets à partir d’un fichier HTML. Vous devrez passer un certain nombre
de paramètres aux applets, pour cela vous pourrez vous renseigner sur les paramètres
suivants : param name, value, name, code, width, height,…
Dans le code d’une applet : <APPLET …
…………….
</APPLET>
On peut insérer les paramètres suivants :
<PARAM NAME = "monparametre" VALUE= valeur> définit un paramètre monparametre
auquel sera associé la valeur valeur.
NAME="nom applet" définit le nom de l’applet.
CODE="fichier.class" désigne le fichier qui contient le code de l’applet.
CODEBASE="chemin" indique le chemin pour trouver le fichier contenant le code de
l’applet.
WIDTH=1000 donne la largeur de la fenêtre contenant l’applet.
HEIGHT=500 donne la hauteur de la fenêtre contenant l’applet.
I ) Voici les sources des applets que vous devez saisir
Classe émet : Appelle la méthode « recoit_message » d’une autre applet dont le nom est
fourni par l’utilisateur
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Enumeration;
public class emet extends Applet implements ActionListener {
String MonNom;
TextField ChampNom;
TextArea statut;
public void init() {
Label NomRecepteur = new Label("Nom du recepteur:", Label.RIGHT);
add(NomRecepteur); //Etiquette "Nom du recepteur" placée
//dans la fenetre de l'aplet
ChampNom = new TextField(getParameter("NOMRECEPTEUR"), 10);
add(ChampNom); // Ajouter une zone de saisie avec le paramètre
// NOMRECEPTEUR initialement
ChampNom.addActionListener (this);
Button bouton = new Button("Envoyer message");
add(bouton); // Ajout d'un bouton "Envoyer message"
bouton.addActionListener(this);
statut = new TextArea(5, 60);
statut.setEditable(false);
add(statut); // ajout d'une zone d'information non éditable
MonNom = getParameter("NOM");
Label NomEmetteur = new Label("Mon nom est : " + MonNom + ".",
Label.CENTER);
add(NomEmetteur); // Etiquette pour le nom de l'applet
setBounds (100,100,400,350);
validate(); //validation des ajouts de composants
}
public void actionPerformed (ActionEvent event) {
Applet recepteur = null;
String NomRecepteur = ChampNom.getText();
//on prend le nom de l'applet "Recepteur" dans la zone de saisie
recepteur = getAppletContext().getApplet(NomRecepteur);
// on recherche l'applet dans la meme page...
if (recepteur != null) {
//on a trouvé une applet de ce nom
if (!(recepteur instanceof recoit )) {
statut.append("L'applet "
+ NomRecepteur + ", "
+ "existe mais n'est pas de la classe recoit.\n");
} else {
statut.append("Envoi du message à l'applet "
+ NomRecepteur + ".\n");
//Conversion de l'applet trouvé en classe "recoit"
//puis appel de sa méthode recoit_message
((recoit)recepteur).recoit_message(MonNom);
}
} else {
statut.append("Impossible de trouver une applet de nom "
+ NomRecepteur + ".\n");
}
}
public void paint(Graphics g) {
g.drawRect(0, 0, getSize().width - 1, getSize().height - 1);
}
public String getAppletInfo() {
return "Emetteur de message";
}
}
Qu’ y a t il de neuf , que vous découvrez pour la première fois ? TextField est une zone de
saisie de texte, c’est une classe java. On peut lui associer la prise en compte d’actions
(ActionListener ).
TextArea est une zone de texte avec ascenseurs. Ici, on l’utilise pour l’affichage uniquement
(editable=false)
Label et Button, vous connaissez ...
add permet d’ajouter un nouveau composant (bouton, zone de texte, étiquette,etc. ). Vous
connaissez déjà pour l’avoir utilisé avec contrainte de position (North,South,West,East ou
Center)
La méthode getParameter ( ...) permet de récupérer dans le fichier HTML dont est issue
l’applet le paramètre de nom indiqué.
Une fois tous les éléments graphiques installés par init ( ), on réagit à une action (bouton ou
validation de la zone de saisie) en réalisant ActionPerformed :
- Récupération du nom d’applet dans la zone de saisie avec getText( )
- tentative de recherche de l’applet correspondante avec
getAppletContext().getApplet (...)
- si l’applet est trouvée et est bien de classe « recoit » on peut appeler la méthode
statut.append (...) ajoute le texte spécifié dans la zone d’affichage non éditable.
paint, vous connaissez.
getAppletInfo permet de fournir une information sur une applet, elle est utilisée par la classe
qui liste les applets présentes, ci-dessous.Classe reçoit : Affiche l’applet qui a utilisé sa
méthode « recoit_message »import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class recoit extends Applet implements ActionListener {
String Attente = "Attente d'un message...
";
Label Message = new Label(Attente, Label.RIGHT);
public void init() {
add(Message);
Button bouton = new Button("Effacer");
add(bouton);
bouton.addActionListener (this);
add(new Label("Mon nom est " + getParameter("NOM") + ".",Label.LEFT));
validate();
}
public void actionPerformed (ActionEvent event) {
Message.setText(Attente);
repaint();
}
public void recoit_message(String emetteur) {
Message.setText("Message reçu de " + emetteur + "!");
repaint();
}
public void paint(Graphics g) {
g.drawRect(0, 0, getSize().width - 1, getSize().height - 1);
}
public String getAppletInfo() {
return "Nom récepteur " + getParameter("NOM") + ".";
}
}
Pas grand chose de nouveau...
setText permet de modifier la chaîne de caractères attachée à un « label ».
Classe listeapplets : Affiche la liste de toutes les applets présentent dans le fichier HTML
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Enumeration;
public class listeapplets extends Applet implements ActionListener {
TextArea infos;
public void init() {
Button bouton = new Button("Appuyez ici pour la liste des applets");
add(bouton);
bouton.addActionListener(this);
infos = new TextArea(5, 40);
infos.setEditable(false);
add(infos);
}
public void actionPerformed (ActionEvent event) {
afficheApplets();
repaint();
}
public String getAppletInfo() {
return "MOI, la liste des applets";
}
public void afficheApplets() {
//la variable mesApplets va contenir toutes les applets en cours
Enumeration mesApplets = getAppletContext().getApplets();
infos.append("Liste des applets trouvées :\n");
while (mesApplets.hasMoreElements()) {
Applet applet = (Applet)mesApplets.nextElement();
String info = ((Applet)applet).getAppletInfo();
if (info != null) {
infos.append("=> " + info + "\n");
} else {
infos.append("=> ??? "
+ applet.getClass().getName()
+ "\n");
}
}
infos.append("________________________\n");
}
public void paint(Graphics g) {
g.drawRect(0, 0, getSize().width - 1, getSize().height - 1);
}
}
Ici, la nouveauté réside dans la récupération de toutes les applets présentes sous forme d’une
énumération :
Enumeration mesApplets = getAppletContext().getApplets();
Il suffit de passer en revue cette liste obtenue avec :
while (mesApplets.hasMoreElements()) { et (Applet)mesApplets.nextElement(); pour récupérer chaque
Applet
Simple ,non ?
La méthode getAppletInfo a été écrite pour chaque applet précédemment, et fournit des
informations sur l’applet : une chaîne de caractères.
Au cas où cette méthode ne renvoie rien (par défaut pour une applet, si on ne redéfinit pas la
méthode getAppletInfo) on récupère au moins le nom de l’applet avec getName( ) !
Faites tourner l’ensemble, comprenez bien chaque élément, posez des questions...
II ) A vous de jouer
Définir une applet avec deux boutons, l’un intitulé RECTANGLE, l’autre CERCLE. Cette
applet contient également trois TextField pour rentrer les valeurs de couleurs Rouge,Vert ou
Bleu. (initialisée toutes à 0 au départ ).
Nous avons deux autres types d’applets : RECTANGLE, celles qui présentent un rectangle
coloré; et CERCLE, celles qui présentent un cercle coloré.
1 ) Avec un fichier HTML pour ces trois applets, commandez la couleur de chacune des deux
applets RECTANGLE et CERCLE en fixant les valeurs des zones de saisie, et en cliquant soit
sur RECTANGLE, soit sur CERCLE.
NB : la conversion des zones de saisie en entiers se fait avec java.lang.Integer.parseInt (...)
2 ) Le nombre d’applets RECTANGLE ou CERCLE est variable. Il est déterminé par le
nombre d’applets lancées dans le fichier HTML.
Une zone de saisie pour le nom de l’applet destinataire est ajoutée, ainsi qu’une zone
présentant les applets présentes dans le fichier HTML. Un seul bouton VALIDER remplace
les deux boutons précédents. On choisit désormais les trois composantes de couleur, l’applet
destinataire, et on VALIDE.
En principe, le destinataire doit changer de couleur...
Téléchargement