2011-07-15 21 views
1

私は、ユーザがテキストボックスに数字を入力してOKをクリックすると、1秒ごとに番号を取得する時計アプリケーションを作成したいと思います。 例ユーザが5を入力すると、タイマーが開始され、表示画面に1,2,3,4,5,0,1,2,3,4,5,0,1,2,3、... soの数が表示されますに。J2ME +形式の画像

今私は、数字を入力するためのフォームとテキストフィールドを取っていたし、秒ごとに番号を変更するタイマーと数字(0-9)の10画像。私は数字を表示したい私が持っていた非常に大きなsize.Nowは、以下の方法でこのロジックを実装: -

パブリッククラス時計は、MIDletが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; 
     } 
    } 
} } 

を実装していますが、フォームは、タイマーが動くと画像を追加していくよう拡張しますそれは望ましい出力を表示していません!

私はLWUITを通してそれをやろうとしましたが、ユーザー10の.pngファイルがあり、LWUIT.jarファイルを追加すると、.jarファイルのサイズは557kbと非常に重いものになりました。

だから、私は通常のフォームだけでそれをしたいです。

キーパッドはキーパッドが(タッチ、クォータニーなど)のように異なることがありますので、私はキャンバスを使用できません。したがって、通常のフォームまたはLWUITのみを行う必要があります。

+1

の瞬間に表示されていないいずれかのsetCurrentを呼びますか? – bharath

答えて

1

私はあなただけが気づいたappendアイテムは削除されません - それは意図ですか?

また、1つではなく2つの異なるフォームでアニメーションを試しましたか?簡単なテストのために、たとえば、並行して、それらを埋める、ちょうどあなたが難読使用しました更新

//... 
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++; 
    //... 
} 
//... 
関連する問題