JISNTools Howto - ISN Breizh Le codage au collège et au lycée

Transcription

JISNTools Howto - ISN Breizh Le codage au collège et au lycée
JISN Tools Howto
Version 0.3
JISNTools est un package regroupant un ensemble de classes Java permettant de travailler sur
les images, le texte, le réseau, des grilles de jeux...
Les FrameWorks
Les framesWork sont des classes proposant des fonctions permettant d'afficher différents
types de données (images, texte, grilles de jeux,...) dans une fenêtre.
Les classes d'objets spécifiques ISN
Il s'agit d'objets permettant d'aborder le codage numériques en ISN. Vous disposez du type
Image, webcam, socket, txt...
Installation d'ISNTools sous Eclipse
Il suffit une fois Eclipse lancé, de choisir menu/import/Existing Project into Workspace
puis de lui indiqué le nom de l'archive JISNTools.zip (capture 1 ci-dessous)
Pour mettre à jour JISNTools, il suffit de supprimer le projet JISNTools (Click droit/ Delete)
puis d'installer la nouvelle version.
Pour utiliser JISNTools dans un nouveau projet, il suffit une fois que le projet est créé de lui
indiqué le chemin vers JISNTools - Click droit sur le nom du projet et choisir Build Path/
Configure Build Path (Capture 2 ci-dessous).
( Capture 1 )
( Capture 2 )
Si vous utilisez la webcam il vous faudra également rajouter la librairie webcamLib
FrameWorkImage
(pour plus de possibilités voir la javadoc associée sous Eclipse)
Classe permettant d'afficher des images dans une fenêtre. Pour pouvoir utiliser cette classe
vous devez l'instanciée (créer un objet de ce type) en ajoutant les lignes de déclaration et de
création suivantes au début de votre programme :
FrameWorkImage fwimg;
fwimg = new FrameWorkImage("Titre de la fenêtre");
Ensuite vous disposez de différentes méthodes pour afficher des images :
fwimg.showImage(img1);
// affiche l'image img1 (type Image)
fwimg.showImage(img1,img2,img3,img4,200,200);
// affiche 4 images en 200x200
fwimg.showImage(img1,img2,img3,null,200,200);
// affiche 3 images en 200x200
fwimg.showImage(timg, 200, 200, 5, true);
//
//
//
//
affiche les images contenues dans
le tableau d'image timg[] en 200x200
5 images par lignes. Un click sur une
image l'affiche en taille réelle (true)
fwimg.showZoomImage(img1,10,true);
// affiche l'image img1 avec un zoom de 10
// et une grille (rouge)
Exemple de programme utilisant FrameWorkImage :
import jisn.tools.*;
// On indique ici que l'on utilise la librairie ISNTools
public class AffichageImage {
static FrameWorkImage;
static Image img1;
public static void main(String[] args){
fwimg = new FrameWorkImage("Affichage Image");
img1 = new Image("D:/Images/paysage.png");
fwimg.showImage(img1);
fwimg.showZoomImage(img1,10,true);
} // End Main
} // End Class
// On affiche l'image
// On affiche l'image avec un facteur de zoom de 10
// et une grille délimitant chaque pixel.
Image
(pour plus de possibilités voir la javadoc associée sous Eclipse)
Classe permettant de travailler sur des images. Pour pouvoir utiliser cette classe vous devez
l'instanciée (créer un objet de ce type) en ajoutant les lignes de déclaration et de création
suivantes au début de votre programme :
Image img = new Image("D:/MesImages/tux.png");
// On charge une image
Image img = new Image(500, 500);
// On créé une image de 500x500
// de couleur blanche par défaut
Image img = new Image(500,500,Color.red);
// On créé une image de 500x500
// de couleur rouge
Image img = new Image(XXXX.class.getResource("images/tux.png"));
// charge l'image tux.png du répertoire ressource
images de la classe XXXX dans Eclipse.
Ensuite vous disposez de différentes méthodes pour travailler sur ces images :
img.getPixelColor(x,y);
img.setPixelColor(x,y,color);
img.setPixelColor(x,y,r,g,b);
// Renvoie la couleur du pixel (type Color)
// Spécifie la nouvelle couleur du pixel (type Color)
// Spécifie la nouvelle couleur du pixel (type int)
img.clear();
img.resize(100,100);
// Efface l'image (fond blanc)
// Redimensionne l'image en 100x100
img.getWidth();
img.getHeight();
// Renvoie la largeur de l'image (type int)
// Renvoie la hauteur de l'image (type int)
img.saveToURL(filename);
// Sauvegarde l'image (type string)
Exemple de programme utilisant le type Image :
import jisn.tools.*;
import java.awt.Color;
// Ligne à ajouter pour utiliser le type Color
public class test {
static FrameWorkImage fwimg;
static Image img1;
public static void main(String[] args)
{
fwimg = new FrameWorkImage("Composantes Image");
img1 = new Image(test.class.getResource("images/tux.png"));
for(int x =0; x < img1.getWidth() ; x++)
for (int y=0; y < img1.getHeight(); y++)
System.out.println(img1.getPixelColor(x,y));
fwimg.showImage(img1);
}// End main
}// End Class
// on affiche l'image
// On affiche la couleur
// de chaque pixel
MacroImage
(pour plus de possibilités voir la javadoc associée sous Eclipse)
Classe permettant de travailler sur des Macro images, images composée de Macro pixels
(PIXEL), correspondant à des pixels de grande taille. Pour pouvoir utiliser cette classe vous
devez l'instanciée (créer un objet de ce type) en ajoutant les lignes de déclaration et de
création suivantes au début de votre programme :
// Création d'une image de 20x20 MacroPixels (PIXEL) de taille 30x30
// la valeur true indique que l'on affiche une grille pour mieux distinguer les PIXELS
MacroImage img = new MacroImage(20,20,30,true);
Ensuite vous disposez de différentes méthodes pour travailler sur ces images :
img.getPIXELColor(x,y);
img.setPIXELColor(x,y,color);
// Renvoie la couleur du pixel (type Color)
// Spécifie la nouvelle couleur du pixel (type Color)
img.clear();
img.drawGrid()
// Efface l'image (fond blanc)
// Affiche la grille
img.getGridWidth();
img.getGridHeight();
// Renvoie la largeur de la grille de PIXELS (type int)
// Renvoie la hauteur de la grille de PIXELS (type int)
img.saveToURL(filename);
// Sauvegarde l'image (type string)
Exemple de programme utilisant le type Image :
import java.awt.Color;
import java.util.Random;
import jisn.tools.*;
public class RandomMacroImage {
static FrameWorkImage fwimg;
static MacroImage img1;
public static void main(String[] args)
{
fwimg = new FrameWorkImage("Pixel Line Finder");
// Création d'une image de 20 x 20 MacroPIXELS de taille 30x30 avec grille
MacroImage img1 = new MacroImage(20,20,30,true);
// Création d'un générateur de nombres aléatoires
Random r = new Random();
// Placement aléatoire de PIXELS noirs sur l'image
for (int i = 0 ; i < 30 ;i++)
img1.setPIXELColor(r.nextInt(img1.getGridWidth()),
r.nextInt(img1.getGridHeight()),
Color.green);
fwimg.showImage(img1);
}// End main
}// End Class
Color
(pour plus de possibilités voir la javadoc associée sur le site Oracle)
Classe Java permettant de travailler sur les couleurs des pixels d'une image. Pour l'utiliser vous
devez rajouter en début de programme la ligne : import java.awt.Color;
Color c = new Color(100);
// Créé la couleur de la valeur spécifiée (type int).
Color c = new Color(100,120,215); // Créé la couleur à partir des composantes RGB
// indiquées (type int).
Color.black;
Color.red;
// Constante définissant la couleur Noire.
// Constante définissant la couleur rouge.
Ensuite vous disposez de différentes méthodes pour travailler sur les couleurs :
c.getRed();
c.getGreen();
c.getBlue();
c.getAlpha();
c.getRGB();
//
//
//
//
//
Renvoie
Renvoie
Renvoie
Renvoie
Renvoie
la
la
la
la
la
composante
composante
composante
composante
valeur RGB
rouge
verte
bleue
alpha
(type
de cette couleur.
de cette couleur.
de cette couleur.
de cette couleur.
int) de cette couleur.
Exemple de programme utilisant le type Color :
import jisn.tools.*;
import java.awt.Color;
public class test {
static FrameWorkImage;
static Image img1;
public static void main(String[] args)
{
fwimg = new FrameWorkImage("Composantes Image");
img1 = new Image("D:/Images/paysage.png");
Color pixelColor;
for(int x =0; x < img1.getWidth() ; x++)
for (int y=0; y < img1.getHeight(); y++){
pixelColor =img1.getPixelColor(x,y);
System.out.println(pixelColor.getAlpha()); // On affiche la composante alpha
// de chaque pixel
}
fwimg.showImage(img1);
}// End main
}// End Class
// on affiche l'image
Webam
(pour plus d'infos voir la javadoc associée sur Eclipse et sur
https://github.com/sarxos/webcam-capture )
Classe permettant de capturer des images via une webcamPour pouvoir utiliser cette classe vous
devrez ajouter les lignes suivantes au début de votre programme :
import com.github.sarxos.webcam.Webcam;
// A rajouter dans la zone import du programme
Webcam.setAutoOpenMode(true); // mode d'utilisation standard, gère automatiquement
// l'ouverture de a Webcam
Ensuite vous pouvez récupérer les images capturées dans une image de type isn.tools.Image :
Image img1 = new Image(Webcam.getDefault().getImage()); //capture image dans img1
remarque : A l'execution d'un programme webcam vous aurez le message d'avertissement suivant :
Not enough args for boolean OpenIMAJGrabber.startSession(int, int, double) → ne pas en tenir compte
Exemple 1 (capture de 2 images et affichage avec FrameWorkImage) :
import jisn.tools.*;
import com.github.sarxos.webcam.Webcam;
public class webcam1 {
static FrameWorkImage fwimg = new FrameWorkImage("webcam capture : 2 images");
public static void main(String[] args) throws InterruptedException {
Webcam.setAutoOpenMode(true);
// automatically open if webcam is closed
Thread.sleep(1000); // wait 1 second
Image img1 = new Image(Webcam.getDefault().getImage()); //capture img1
Thread.sleep(500); // wait 1/2 second
Image img2 = new Image(Webcam.getDefault().getImage()); //capture img2
fwimg.showImage(img1,img2,null,null,200,200);
}//End class main
}// End class webcam1
Exemple 2 (capture de 10 images et affichage avec FrameWorkImage) :
import isn.tools.*;
import com.github.sarxos.webcam.Webcam;
public class webcam2 {
static FrameWorkImage fwimg = new FrameWorkImage("webcam capture : tableau images");
public static void main(String[] args) throws InterruptedException {
Image timg[] = new Image[10];
Webcam.setAutoOpenMode(true);
// automatically open if webcam is closed
for (int i=0; i < 10 ; i++){
Thread.sleep(500);
timg[i] = new Image(Webcam.getDefault().getImage());
System.out.println("Attention pour la photo n° "+i);
Thread.sleep(5);
}// End for i
fwimg.showImage(timg, 200, 200, 5, true);
}// End main
}// End class webcam2
FrameWorkDialog
(pour plus de possibilités voir la javadoc associée sous Eclipse)
Classe permettant d'afficher une fenêtre de dialogue pour récupérer une réponse de
l'utilisateur (texte ou nombre). Pour pouvoir utiliser cette classe vous devez l'instanciée (créer
un objet de ce type) en ajoutant les lignes de déclaration et de création suivantes au début de
votre programme :
FrameWorkDialog fwdiag = new FrameWorkDialog("Titre de la fenêtre");
Ensuite vous disposez de différents types de dialogues possibles :
String s = fwdiag.askForString("Votre dialogue");
Integer age = fwdiag.askForInteger("Votre dialogue");
float prix = fwdiag.askForFloat("Votre dialogue");
Affichera une fenêtre comme ci-dessous :
Pour changer le titre des fenêtres : fwdiag.setTitle("Titre de la fenêtre");
char reponse = fwdiag.askForYesNo("Votre dialogue");
Affichera une fenêtre comme ci-dessous :
(Retourne la valeur 'Y' ou 'N')
Exemple de programme utilisant FrameWorkDialog :
import jisn.tools.*;
public class userDialog {
static FrameWorkDialog fwdiag = new FrameWorkDialog();
public static void main(String[] args) {
String name = fwdiag.askForString("Votre Nom ? ","Conversation");
System.out.println("votre nom : "+name);
}// End Main
} // End Class
FrameWorkTxtCode
(pour plus de possibilités voir la javadoc associée sous Eclipse)
Classe permettant d'afficher du texte dans une fenêtre. Pour pouvoir utiliser cette classe vous
devez l'instanciée (créer un objet de ce type) en ajoutant les lignes de déclaration et de
création suivantes au début de votre programme :
FrameWorkTxtCode fwtxt = new FrameWorkTxtCode("Titre de la fenêtre");
Ensuite vous disposez de différentes méthodes pour afficher du texte :
fwtxt.affiche(s);
fwtxt.affiche(c);
fwtxt.affiche(n);
// affiche la chaîne de caractère s (type String)
// affiche le caractère c (type char)
// affiche la valeur entière n (type int)
fwtxt.afficheCodeAuFormatHex(c);
fwtxt.afficheCodeAuFormatDec(c);
fwtxt.afficheCodeAuFormatBin(c);
fwtxt.afficheCodeAuFormatCar(c);
fwtxt.sautDeLigne();
fwtxt.resetConsole();
//
//
//
//
affiche
affiche
affiche
affiche
la
la
la
le
valeur
valeur
valeur
glyphe
héxadécimal
décimal
binaire
c (type int)
// Passe à la ligne suivante.
// Efface la zone de texte de la fenêtre
fwtxt.stringDump(s);
fwtxt.fileDump(filename);
// affiche un dump de la chaîne s (type String)
// affiche un dump du fichier spécifié (type String)
Exemple de programme utilisant FrameWorkTxtCode :
import jisn.tools.*;
public class fileDump {
static FrameWorkTxtCode fwtxt;
static TxtFileReader txtFileR;
public static void main(String[] args)
{
fwtxt = new FrameWorkTxtCode("FileDump");
txtFileR = new TxtFileReader();
txtFileR.open("D:/MesTextes/avare.txt");
int c = txtFileR.readNextByteCode();
while (c != -1) {
fwtxt. afficheCodeAuFormatHex(c);
fwtxt.affiche("--");
c = txtFileR.readNextByteCode();
}
fwtxt.sautDeLigne();
fwtxt.fileDump("D:/MesTextes/avare.txt");
} // End Main
} // End Class
c (type int) en
c (type int) en
c (type int) en
correspondant à
TxtFileReader/TxtFileWriter (pour plus de possibilités voir la javadoc associée sous Eclipse)
Classe permettant de travailler sur des fichiers texte. Pour pouvoir utiliser cette classe vous
devez l'instanciée (créer un objet de ce type) en ajoutant les lignes de déclaration suivantes au
début de votre programme :
TxtFileReader txtFileR = new TxtFileReader(); // fichier en lecture
TxtFileWriter txtFileW = new TxtFileWriter(); // fichier en écriture
Ensuite vous disposez de différentes méthodes pour travailler en lecture :
txtFileR.open("D:/avare.txt"); // Ouverture du fichier spécifié en lecture
// ouverture d'un fichier se trouvant dans le répertoire ressource/texte du projet.
txtFileR.open(txtCode.class.getResource("texte/avare.txt"));
int c = txtFileR.readNextByteCode();
// lecture d'un octet dans le fichier
txtFileR.close();
// fermeture du fichier
et en ériture :
txtFileW.open("D:/avare.txt");
// Ouverture du fichier spécifié en écriture
txtFileW.writeNextByteCode(c);
// Ecriture d'un octet dans le fichier
txtFileW.close();
// fermeture du fichier
Exemple de programme utilisant le type TxtFileReader/TxtFileWriter :
import jisn.tools.*;
import java.awt.Color;
// Ligne à ajouter pour utiliser le type Color
public class copieFichierTexte {
static FrameWorkTxtCode fwtxt = new FrameWorkTxtCode("copie fichier texte");
public static void main(String[] args) {
TxtFileReader txtFileR = new TxtFileReader();
txtFileW.open("D:/avare.txt");
txtFileR.open(txtCode.class.getResource("texte/avare.txt"));
int c = txtFileR.readNextByteCode();
while (c != -1) {
txtFileW.writeNextByteCode(c);
c = txtFileR.readNextByteCode();
}
txtFileW.close();
txtFileR.close();
} // End main
} // End class
SocketServer/SocketClient
(pour plus de possibilités voir la javadoc associée sous Eclipse)
Classes permettant de travailler sur des socket en mode serveur. Chaque socketserver peut gérer
jusqu'à un maximum de 10 connections client. Chaque connection est identifiée à l'aide d'un numéro (de 0
à 9). Pour pouvoir utiliser cette classe vous devez l'instanciée (créer un objet de ce type) en ajoutant les
lignes de déclaration et de création suivantes au début de votre programme :
// Création du Socket serveur ( port 6000 )
SocketServer socketServer = new SocketServer(6000);
// Création du Socket client ( Adresse du serveur et port 6000 )
SocketClient socketClient = new SocketClient("127.0.0.1",6000);
Ensuite vous disposez de différentes méthodes pour travailler sur les connexions du serveur :
socketServer.start();
socketServer.setModeTrace(true);
// Démarrage du socket du serveur.
// Activation du mode trace
socketServer.getNbConnexion()
// retourne le nombre de connexion client en cours.
socketServer.getMessage(0);
socketServer.sendMessage(0,str);
// Récupère un message depuis la connexion Client 0
// Envoi un message depuis la connexion client 0
socketServer.close();
// fermeture du socket serveur
Et du client :
socketClient.start();
socketClient.setModeTrace(true);
// Démarrage du socket du client.
// Activation du mode trace
socketClient.getMessage();
socketClient.sendMessage(str);
// Récupère un message depuis du serveur
// Envoi un message vers le serveur
socketClient.close();
// fermeture du socket client
Exemple de programme utilisant les types SocketServer/SocketClient :
Server
import jisn.tools.*;
public class socketServerSample {
public static void main(String[] args) {
SocketServer socketServer = new SocketServer(6000);
socketServer.setModeTrace(true);
while (socketServer.getNbConnexion() < 1);
String str = socketServer.getMessage(0);
System.out.println(str);
socketServer.sendMessage(0,"Au revoir");
socketServer.close();
} // End Main
} // End Class
Client
import jisn.tools.*;
public class socketClientSample {
public static void main(String[] args) {
SocketClient socketClient;
socketClient = new SocketClient("127.0.0.1",6000);
socketClient.setModeTrace(true);
socketClient.sendMessage("Bonjour");
String str = socketClient.getMessage();
System.out.println(str);
socketClient.close();
} // End Main
} // End Class
FrameWorkGrid
(pour plus de possibilités voir la javadoc associée sous Eclipse)
Classe idéale pour la réalisation de jeux comme le morpion, la bataille navale, le memory, ...
Permet également de définir une calculatrice, un clavier de symboles, de musique,...
Elle est composée d'une grille de boutons clickables, de boutons de commande et d'une zone de
texte. A chaque bouton peut-être associé une marque de type caractère ou jusqu'à 4 images.
Boutons de commande
Grille de boutons
Bouton d'arrêt du
programme
Zone d'affichage
De type texte
Au niveau des boutons de commandes seul le bouton [Abort] est obligatoire. Il permet de quiter
propremen le programme en phase de développement.
Comment utiliser cette classe
Pour pouvoir utiliser cette classe vous devez l'instanciée (créer un objet de ce type) en ajoutant
la ligne de déclaration et de création suivante au début de votre programme :
//
//
//
//
Ici création d'une grille de 25 boutons (5 lignes, 5 colonnes) de taille 40x40
Les numérotation des lignes et colonnes commencent à partir de 0.
Le dernier paramètre à 0 indique que l'on ne définit aucun bouton de commande
hormis le bouton [Abort]
FrameWorkGrid fwgrid = new FrameWorkGrid("Titre de la fenêtre",5,5,40,40,0);
Fermeture de la fenêtre :
fwgrid.exit();
// fermeture de la fenêtre
Accès aux boutons de la grille et aux boutons de commande :
fwgrid.getCdeButton(0)
fwgrid.getGridButton(0,3)
// permet d'accéder au bouton de commande n°0
// permet d'accéder au bouton de la grille en position 0,3
Méthodes sur les boutons :
Dans ce qui suit, chaque référence à button peut-être remplacé par la référence à un
bouton précis de la grille comme : fwgrid.getGridButton(0,3)
exemple:
fwgrid.getGridButton(0,2).setMark('+',Color.white);
fwgrid.setGridButtonFontSize(16); // définit la taille de la police de tous les boutons.
button.setMark('+',Color.blue);
char c = button.getMark();
// Définit la marque et la couleur de fond du bouton
// Récupération de cette marque
button.setEnabled(true);
// Le bouton est “cliquable”
button.setEnabled(false);
// Le bouton est désactivé
button.setFlag(valeur);
int f = button.getFlag()
// Flag est une valeur entière que l'utilisateur
// peut utiliser à sa convenance
button.defineImage(img0,0);
button.defineImage(img1,1);
// On peut définir jusqu'a 4 images par
// bouton (indice de 0 à 3)
button.setImage(0);
// Spécifie quelle image afficher sur le bouton.
Remarque : le type JFWGButton utilisé dans cette classe dérive de la classe java Jbutton,
il hérite donc de toutes les méthodes disponibles sur les Jbutton.
Gestion de la sélection des boutons :
// Récupération du premier bouton “cliqué”. Cette méthode est bloquante et ne rend
// pas la main tant qu'aucun bouton n'est sélectionné. Elle renvoie le bouton sélectionné
buttonClicked = fwgrid.waitForButtonClicked();
// Les conditions ci-dessous permettent de savoir si le bouton “cliqué” est un bouton
// de commande ou de la grille. La gestion du type des boutons nécéssite de rajouter
// en début de programme : import jisn.tools.FrameWorkGrid.ButtonType;
(buttonClicked.getType() == ButtonType.CDEBUTTON)
(buttonClicked.getType() == ButtonType.GRIDBUTTON)
Gestion des clickGroup:
Chaque bouton peut-être associé à un “clickGroup”, qui correspond à un groupe de bouton identifié par un
numéro. Les clickGroup permettent de faciliter la gestion des différents types de boutons sur la grilles.
Le nombre de clickGroup n'est pas limité. Par défaut tous les boutons appartiennent au clickGroup 0.
button.setClickGroup(2);
// associe le bouton au clickGroup numéro 2
fwgrid.setEnabledButtonClickGroup(2,true);
// Active tous les boutons du groupe
fwgrid.setEnabledButtonClickGroup(2,false);
// Désactive tous les boutons du groupe
int n = fwgrid.buttonAvailableInclickGroup(0) // Renvoie le nombre de boutons cliquable
Action associée au bouton [Abort] :
Le rôle du bouton [Abort] est de permettre de quitter le programme proprement pendant la phase de
développement. En fermant par exemple des fichier ou des sockets ouverts au début du programme...
fwgrid.abortButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//=========================================
//Rajouter ici les appels nécéssaires avant
// de quitter définitivement le programme.
//=========================================
fwgrid.exit(); // Ferme la fenêtre
}
});
Exemple de programme utilisant FrameWorkGrid :
import jisn.tools.*;
import jisn.tools.FrameWorkGrid.ButtonType;
import java.awt.*;
public class Calculatrice
{
static FrameWorkGrid fwgrid;
static JFWGButton buttonClicked;
public
static
void
main(String args[]) {
fwgrid = new FrameWorkGrid("Joueur",3,4,50,50,5);
fwgrid.setGridButtonFontSize(16);
fwgrid.abortButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fwgrid.exit();
}
});
fwgrid.getCdeButton(0).setMark('+',Color.gray);
//....... Ici on définit les boutons opérateurs +,-,x,:
fwgrid.getCdeButton(4).setEnabled(true);
fwgrid.getGridButton(0,0).setMark('1', Color.white);
//...... Ici on définit tous les chiffres.
fwgrid.getGridButton(2,3).setMark(' ', Color.white);
fwgrid.show();
String s="" ;
// utilisé pour l'affichage
while (true) {
buttonClicked = fwgrid.waitForButtonClicked();
if (buttonClicked.getType() == ButtonType.CDEBUTTON) {
switch (buttonClicked.getMark()) {
case '+' : s = "+";
break;
case '-' : s = "-";
break;
case 'x' : s = "x";
break;
case '/' : s = "/";
break;
case '=' : s = "=";
break;
} // End switch
} else {
s = Character.toString(buttonClicked.getMark());
} // End if buttonClicked.getType()
s = String.format("%20s",s);
// Affichage fixe de 20 caractères
fwgrid.getTextInfo().setText(s);
} //End While (true)
} //End Main
}// End Class