1 2 3 4 5 6 7 8 9 

Qu'est-ce que J2ME ?

5.2.Un exemple de Midlet : Convertisseur Francs Euros

Sun propose un outil pour développer des applications J2ME utilisant CLDC/MIDP. Cet outil peut être téléchargé à l'url suivante : http://java.sun.com/products/j2mewtoolkit/index.html.
Téléchargez le et installez le. A noter cependant que le JDK standard de Sun doit être installé au préalable.

Lancez le programme KToolbar, la fenêtre ci-dessous apparaît.



Cliquez sur "New Project", et inscrivez dans les deux champs proposés "Convertisseur" qui sera le nom de notre projet.
A la fenêtre suivante, "Settings for project Convertisseur", Choisissez « CLDC 1.1 » puis sur "OK". Un nouveau répertoire a été créé et la console en indique le chemin.
Rendez-vous dans le répertoire du projet, il contient plusieurs dossiers dont un dossier "src", créez dans ce dossier "src" un fichier appelé Convertisseur.java, éditez le avec un éditeur de texte comme le Bloc-Notes placez-y le code suivant :

/*
* Convertisseur.java 1.2 31/05/06
*
*/

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public final class Convertisseur extends MIDlet implements CommandListener {

/** Nombre de chiffre possible ds le champ text **/
private static final int NUM_SIZE=20;

/** Boutton Exit **/
private final Command exitCmd = new Command("Exit", Command.EXIT, 2);

/** Boutton Calcul **/
private final Command calcCmd = new Command("Calc", Command.SCREEN,1);

private final ChoiceGroup euroFrcs = new ChoiceGroup ("", ChoiceGroup.POPUP, new String[] {" En Francs:", "En Euros:"}, null);

/** Champ éditable **/
private final TextField aConvertir = new TextField(null, "", NUM_SIZE, TextField.DECIMAL);

private final TextField Result = new TextField(null, "", NUM_SIZE, TextField.UNEDITABLE);

private final Alert alert = new Alert ("Error", "", null, AlertType.ERROR);

private final double euro = 6.559;

/** Indique si l'applacation est lancée **/
private boolean isInitialized = false;

protected void startApp(){

if(isInitialized){return;}
/* creation d'un objet formulaire sur lequel on peut placer des composants */
Form myForm = new Form("Convertisseur Frcs-Euro");
/* Ajout des composant au formulaie */
myForm.append("Somme à convertir :");
myForm.append(aConvertir);
myForm.append(euroFrcs);
myForm.append("Résultat = ");
myForm.append(Result);
myForm.addCommand(exitCmd);
myForm.addCommand(calcCmd);
myForm.setCommandListener(this);
Display.getDisplay(this).setCurrent(myForm);
alert.addCommand(new Command("Back", Command.SCREEN, 1));
isInitialized =true;
}

protected void destroyApp(boolean unconditional) {}

protected void pauseApp() {}

public void commandAction(Command c, Displayable d){
/* lors du clic sur le bouton Exit */
if(c == exitCmd){
/* appel manuel à la fonction de fermeture */
destroyApp(false);
notifyDestroyed();
return;
}


/* Note: c'est à partir de la CLDC 1.1 que le type "float" est reconnu */
double res = 0.0;

try{
double n1 = getNumber(aConvertir, "First");
/** Euro->Francs ou Francs->Euro **/
switch (euroFrcs.getSelectedIndex())
{
case 0: res = n1 * euro; break;
case 1: res = n1/euro; break;
default:
}
}catch(NumberFormatException e){return;}

String res_str = Double.toString(res);

/* On adapte la taille de la fenêtre Result en fonction du résultat*/ if(res_str.length()> Result.getMaxSize()){
Result.setMaxSize(res_str.length());
}

/* Affichage du résultat */
Result.setString (res_str);
}

/** Methode permettant d'effectuer des tests sur le nombre à convertir **/
private double getNumber(TextField t, String type)
throws NumberFormatException {

String s = t.getString();

/* On test si le champ Somme à convertir est rempli */
if (s.length() == 0) {
alert.setString("No " + type + " Argument");
Display.getDisplay(this).setCurrent(alert);
throw new NumberFormatException();
}

double n;
try {
n = Double.parseDouble(s);
/* On test si le nombre est positif */
if(n<0)
{
Display.getDisplay(this).setCurrent(alert);
throw new NumberFormatException();
}
}catch (NumberFormatException e) {
alert.setString(type + " argument is out of range.");
Display.getDisplay(this).setCurrent(alert);
throw e;
}
return n;
}

Analysons un peu ce code :

Tout d’abord on commence avec l’importation des 2 packages javax.microedition.midlet qui fournit des classes pour la gestion de vie des midlets et
javax.microedition.lcdui package utile pour l’IHM (Interface Homme/machine).


La première partie permet de définir des contrôles et composants graphiques :
La classe Command permet de définir des boutons à l’intérieur de notre application.
Une commande (Command) encapsule à la fois le nom (ce qui est affiché), le type (intention de la commande comme BACK, CANCEL, OK) et la priorité d'une action.
La classe ChoiceGroup permet de définir une sélection d'un ou plusieurs éléments.
La classe TextField permet de définir un composant de saisie de texte.
Ses deux classes héritent de la classe javax.microedition.lcdui.Item.

La classe Alert permet d’afficher une boîte de dialogue pendant un temps déterminé.
Elle possède deux constructeurs :
  • un demandant le titre de l'objet
  • un demandant le titre, le texte, l'image et le type de l'image
AlertType.ERROR permet d’informer à l’utilisateur d’une erreur.

La méthode startApp() est appelée lors du démarrage ou redémarrage de la midlet.
La méthode pauseApp() est appelée lors de mise en pause de la midlet.
La méthode destroyApp() est appelée juste avant la destruction de la midlet

Une midlet active a normalement accès à l'écran. Celui ci est représenté par la classe Display et l'unique instance de cette classe est obtenue en appelant Display.getDisplay(m) où m est la midlet
La midlet peut changer l'objet afficher avec Display.setCurrent.

La méthode commandAction() dans l'objet callback (listener) prend en argument la commande Command et l'objet activé Displayable.







Pour construire le projet, il faut cliquer sur le bouton "Build".


Pour exécuter le projet, il suffit de choisir le type d'émulateur à utiliser et cliquer sur le bouton "Run".
Deux fichiers importants (Convertisseur.jar etConvertisseur.jad) sont générés dans le répertoire "bin".

Exemple : avec l'émulateur de téléphone par défaut.




1 2 3 4 5 6 7 8 9 

Retrouvez ci-dessous les autres sections du Laboratoire Sun
Evènements
Java Sun Net Talk LIVE CHAT le 2 Avril à 16h303/29/08
SolarisSunDécouvrez les nouveaux Sun Fire sous Intel10/11/07
JavaValtech Days10/9/07
JavaApacheCon du 1 au 4 mai à Amsterdam2/13/07

Exemples de code
JavaManipuler les looks and feel (lister et affecter)10/15/07
JavaFaire sa propre injection de dépendance avec les annotations5/9/06
JavaSplash screen avec progress Bar5/5/06
JavaFaire un splash screen en swing5/5/06

Actualités
SunProjet Kenai: une nouvelle forge open source10/3/08
SunSun Microsystems en forme !8/4/08
SunOpenDS un ldap 100% java7/24/08
SunSun et Fujitsu annoncent un nouveau Sparc647/16/08
SunVisualVM, un outil de surveillance des applications Java7/10/08

Tips du laboratoire
EclipseVisual Editor avec Eclipse Europa, c'est possible3/28/08
EclipseGérer les projets dans un workspace.10/16/07
JavaManager votre server d'application avec Eclipse4/21/07
JavaVue des sub-packages avec Eclipse4/21/07
JavaGlisser-déposer avec Eclipse4/21/07

Laboratoire SUPINFO des technologies Sun
labo-sun@supinfo.com


Conditions d'utilisation et © Copyright SUPINFO International University
23, rue de Château Landon - 75010 PARIS - Tél : +33 (0) 153359700 Fax : +33 (0) 153359701
Respect de la vie privée