|
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.

|
|
 |
|