【问题标题】:J2me+images in formJ2me+图片形式
【发布时间】:2011-07-15 06:35:24
【问题描述】:

我想制作时钟应用程序,用户在文本框中输入数字并单击确定,然后用户每 1 秒获取一次数字。 示例如果用户输入 5,则计时器启动显示屏显示数字 1,2,3,4,5,0,1,2,3,4,5,0,1,2,3,... 以此类推.

现在我已经采用表单和文本字段供用户输入数字,然后是一个计时器,它将每秒更改数字。和 10 个数字图像(0-9)。因为我想非常显示数字大尺寸。现在我已经通过以下方式实现了这个逻辑:-

公共类时钟扩展 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,这非常重。

所以我只想通过普通形式来做。

我不能使用画布,因为键盘可能会有所不同(触摸、qwerty 等)。所以我只需要使用普通格式或 LWUIT。任何人都可以帮我解决这个问题。

【问题讨论】:

  • 你使用了混淆吗?

标签: java-me


【解决方案1】:

我注意到您只看到了 append 项目,但从未删除 - 这是故意的吗?

另外,您是否尝试过两种不同的动画形式而不是一种?对于简单的测试,比如说,并行填写,只需调用setCurrent获取更新时不显示的内容

//...
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++;
    //...
}
//...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多