[j2me] conversion cel->fahr, fahr->cel pour mobile (premier midlet)

Contenu du snippet

Conversion Celsius -> Fahreinet et Farheneit->Celsius pour mobile. Vous tapez un chiffre et vous choisissez quel type de conversion vous voulez faire.
Il s'agit de mes premiers pas dans le domaine du JAVA et du MIDlet. Donc si vous avez des suggestions et autres remarques ça serait cool de me les dire pour me permettre d'avancer.
J'espère que ça pourra peut-être aider des personnes qui commencent dans le domaine du J2ME.

Source / Exemple :


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

public class CelFarConvMIDlet extends MIDlet implements CommandListener {
 
  private Display display;
  private Form FirstForm, cfForm, fcForm;
  private Command exitCommand, backCommand, cfCommand, fcCommand;
  private TextField valeur, resultatCF,resultatFC;
  double res = 0.0;
  
  public CelFarConvMIDlet() 
  {
   
      display = Display.getDisplay(this);
    
     /* creation de la form 'FirstForm' */
     FirstForm = new Form("Training");
     
     /* TexteField 'valeur' en mode decimal uniquement */
     valeur = new TextField("Tapez votre valeur à convertir : ","",5,TextField.DECIMAL);
      
     
     /* creation de commandes exit et des 2 conversions */
     exitCommand = new Command ("Exit", Command.EXIT, 1);
     cfCommand = new Command("Celsius -> Farheneit",Command.SCREEN,2);
     fcCommand = new Command ("Farheneit -> Celsius", Command.SCREEN, 3);
    
     /* ajout des 3 commandes et du textefield 'valeur' dans 'FirstForm' */
     FirstForm.addCommand(exitCommand);
     FirstForm.addCommand( cfCommand);
     FirstForm.addCommand( fcCommand);
     FirstForm.append(valeur);
     FirstForm.setCommandListener(this);
    
     /* creation de la form cfForm (cf = CelsiusFahrenheit) */
     cfForm = new Form("Celsius -> Fahrenheit");
     
     /* creation de la TexteField 'resultatCF' pour y afficher le resultat */
     resultatCF = new TextField("Resultat : ","",10,TextField.UNEDITABLE);
    
     /* creation de la commande Back */
     backCommand = new Command ("Back", Command.BACK,1);
     
     /* ajout de la commande Back et du texteField 'resultatCF' dans la form 'cfForm'  */ 
     cfForm.append(resultatCF);
     cfForm.addCommand(backCommand);
     cfForm.setCommandListener(this);
    
     /* creation de la form 'fcForm' (fc = FahrenheitCelsius) */
     fcForm = new Form("Fahrenheit -> Celsius");
     
     /* creation de la TexteField 'resultatCF' pour y afficher le resultat */
     resultatFC = new TextField("Resultat : ","",10,TextField.UNEDITABLE);
        
     /* ajout de la commande Back et du texteField 'resultatFC' dans la form 'fcForm' */    
     fcForm.append(resultatFC);
     fcForm.addCommand(backCommand);
     fcForm.setCommandListener(this);
    
  }
    
    public void startApp() 
    {
        /* affichage de la form FirstForm */
        display.setCurrent(FirstForm);
    }
    
    public void pauseApp() {
    }
    
    public void destroyApp(boolean unconditional) {
    }
    public void commandAction(Command c, Displayable s) {
       
      /* si la commande exit est appelé, on sort du programme  */
      if (c == exitCommand)
          {
           destroyApp(false);
           notifyDestroyed();
          }
      
      /* si la commande cf est appelé, */
      /* on commence le processus de conversion : */
      /* Celsius -> Fahrenheit */
      else if (c == cfCommand)
        {
            CeFa();
        }
      
      /* si la commande cf est appelé, */
      /* on commence le processus de conversion : */      
      /* Fahrenheit -> Celsius  */
      else if (c == fcCommand)
        {
            FaCe();
        }
      
       /* si la commande back est appelé, */
       /* on efface ce qu'il y a dans le textefield 'valeur' et on revient au début */
      else if ( c == backCommand )
      {
          valeur.delete(0, valeur.size());
          display.setCurrent(FirstForm);
      }
     
  }

    private void CeFa()
    {
       
       double n1 = getNumber(valeur);
       res = ((9.0/5.0) * n1) + 32.0;
              
       /* double to string */
       String res_to_str1 = Double.toString(res);
       
       /* si la taille de res_to_str est + grand que resultatCF */
       /* il nous faut reajuster sa taille */
       if (res_to_str1.length() > resultatCF.getMaxSize()) 
       {
            resultatCF.setMaxSize(res_to_str1.length());
       }
       
       resultatCF.setString(res_to_str1);
       display.setCurrent(cfForm);
    }
   
    private void FaCe()
    {
       
       double n1 = getNumber(valeur);
       res = ((5.0/9.0)* (n1 - 32.0));
      
       /* double to string */
       String res_to_str2 = Double.toString(res);
       
       /* si la taille de res_to_str est + grand que resultatFC */
       /* il nous faut reajuster sa taille */
       
       if (res_to_str2.length() > resultatFC.getMaxSize()) 
       {
            resultatFC.setMaxSize(res_to_str2.length());
       }
       
       resultatFC.setString(res_to_str2);
       display.setCurrent(fcForm);
    }
       
     /* conversion du string (situé dans le textefield 'valeur') en nombre (double)  */    
     private double getNumber(TextField t)
     {
        String s = t.getString();
        double n = Double.parseDouble(s);
        return n;
     }
     
}

Conclusion :


Vous pouvez le lancer avec l'émulateur de sun, le KToolbar.
En ce qui concerne la partie getNumber, je l'ai repris de l'exemple du calcultor de sun. Ca m'avait l'air d'être le meilleur compromis pour convertir le string en nombre.
Voila voila n'hésitez pas pour vos commentaires.

ShinJava : petit débutant qui deviendra grand.... débutant :)

MAJ : (j'ai oublié de préciser la version MIDP et CLDC).
Version MIDP : 2.0
Version CLDC : 1.1 (ne marche pas pour les version antérieures qui ne prennent pas en compte le TextField.DECIMAL et TextField.UNEDITABLE)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.