2011-07-15 6 views
1

Je veux faire l'application d'horloge où l'utilisateur entre le numéro dans la zone de texte et cliquez sur OK, puis l'utilisateur obtenir le numéro à toutes les 1 sec. Exemple si l'utilisateur saisit 5 puis le minuteur démarre l'écran affiche le nombre 1,2,3,4,5,0,1,2,3,4,5,0,1,2,3, ... donc sur.J2me + images sous forme

Maintenant j'avais pris la forme et le champ de texte pour l'utilisateur pour entrer le nombre, puis un temporisateur qui changera le nombre à chaque seconde. Et 10 images de nombre (0-9). Comme je veux indiquer le nombre dedans très grand size.Now je devais mettre en œuvre cette logique de manière suivante: -

public class Clock étend MIDlet implémente CommandListener {

public Command GO, Exit; 
TextField TxtData; 
protected Display display; 
int number, counter; 
Form form; 
private Timer timer; 
private TestTimerTask task; 
boolean increment, time; 
private StringItem s1 = new StringItem("", ""); 
Image image0; 
Image image1; 
Image image2; 
Image image3; 
Image image4; 
Image image5; 
Image image6; 
Image image7; 
Image image8; 
Image image9; 
Image[] secondAnimation; 
protected void startApp() { 
    display = Display.getDisplay(this); 
    increment = true; 
    time = false; 
    form = new Form("Clock"); 
    TxtData = new TextField("Number:-", "", 5, TextField.NUMERIC); 
    try { 
     image0 = Image.createImage("/images/0.png"); 
     image1 = Image.createImage("/images/1.png"); 
     image2 = Image.createImage("/images/2.png"); 
     image3 = Image.createImage("/images/3.png"); 
     image4 = Image.createImage("/images/4.png"); 
     image5 = Image.createImage("/images/5.png"); 
     image6 = Image.createImage("/images/6.png"); 
     image7 = Image.createImage("/images/7.png"); 
     image8 = Image.createImage("/images/8.png"); 
     image9 = Image.createImage("/images/9.png"); 
      secondAnimation = new Image[]{image0,image1,image2, image3, image4, image5, image6, image7, image8, image9}; 

    } catch (IOException ex) { 
     System.out.println("exception"); 
    } 
    GO = new Command("Go", Command.OK, 1); 
    Exit = new Command("Exit", Command.EXIT, 2); 
    form.append(TxtData); 
    form.append(s1); 

    form.addCommand(GO); 
    form.addCommand(Exit); 
    form.setCommandListener(this); 
    display.setCurrent(form); 
} 

protected void pauseApp() { 
} 

protected void destroyApp(boolean unconditional) { 
    timer.cancel(); 
    notifyDestroyed(); 
} 

public void commandAction(Command cmnd, Displayable dsplbl) { 
    String label = cmnd.getLabel(); 
    if (label.equals("Go")) { 
     try { 
      System.out.println("txt==" + (TxtData.getString())); 
      if (!TxtData.getString().equalsIgnoreCase("")) { 
       counter = Integer.parseInt(TxtData.getString()); 
       if (time) { 
        timer.cancel(); 
        task.cancel(); 
       } 
       number = 1; 
       timer = new Timer(); 
       task = new TestTimerTask(); 
       timer.schedule(task, 1000, 1000); 

      } 
     } catch (NumberFormatException ex) { 
      System.out.println("exception"); 
     } 

    } else if (label.equals("Exit")) { 
     destroyApp(true); 
    } 

} 

private class TestTimerTask extends TimerTask { 

    public final void run() { 
     time = true; 

     s1.setText(""+ number); 
     if (counter < 10) { 
      form.append(secondAnimation[0]); 
      form.append(secondAnimation[0]); 
      form.append(secondAnimation[number]); 
     } else if (counter < 100) { 
      form.append(secondAnimation[0]); 
      form.append(secondAnimation[(number % 100)/10]); 
      form.append(secondAnimation[(number % 10)]); 
     } else if (counter < 1000) { 
      form.append(secondAnimation[(number % 10)]); 
      form.append(secondAnimation[(number % 100)/10]); 
      form.append(secondAnimation[(number/100)]); 
     } 
     number++; 
     if (number == counter + 1) { 
      number = 0; 
     } 
    } 
} } 

Mais comme la forme continue annexant l'image comme minuterie se déplace il ne montre pas la sortie désirée!

J'avais essayé de le faire par LWUIT mais comme j'avais des fichiers d'utilisateur 10 .png et en ajoutant le fichier LWUIT.jar, la taille du fichier .jar de 557kb était très lourde. Donc, je veux le faire à travers des formes normales seulement.

Je ne peux pas utiliser la toile comme le clavier peut varier comme (toucher, qwerty etc) .So j'ai besoin de faire la forme normale ou LWUIT seulement.Peut-être quelqu'un s'il vous plaît aidez-moi pour cela.

+1

Avez-vous utilisé mascage? – bharath

Répondre

1

J'ai remarqué que vous seulement append articles, mais ne jamais supprimer - est-ce prévu?

Aussi, avez-vous essayé deux formes différentes pour animer au lieu d'un? Pour test simple, par exemple, les remplir en parallèle, il suffit d'appeler setCurrent un qui ne figure pas dans le moment de la mise à jour

//... 
private void appendTwice(Image image) { 
    form1.append(image); 
    form2.append(image); 
} 
//... 
public final void run() { 
    time = true; 

    s1.setText(""+ number); 
    if (counter < 10) { 
     appendTwice(secondAnimation[0]); 
     //... 
    } 
    display.setCurrent(number & 1 == 0 ? form1 : form2); 
    number++; 
    //... 
} 
//... 
Questions connexes