J2me + изображения в форме - PullRequest
1 голос
/ 15 июля 2011

Я хочу создать приложение для часов, в котором пользователь вводит число в текстовое поле и нажимает кнопку ОК, а затем пользователь получает число каждые 1 сек.Например, если пользователь вводит 5, то на экране запуска таймера отображается число 1,2,3,4,5,0,1,2,3,4,5,0,1,2,3, ... и т. Д..

Теперь я взял форму и текстовое поле, чтобы пользователь мог ввести число, затем таймер, который будет менять число каждую секунду. И 10 изображений числа (0-9). Как я хочу показатьчисло в очень большом размере. Теперь я реализовал эту логику следующим образом: -

открытый класс Clock расширяет мидлет, реализует 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, который очень тяжелый.

Так что я хочу сделать это только через обычные формы.

Я не могу использовать холст, так как клавиатура может различаться как (touch, qwerty и т. д.).Мне нужно сделать только нормальную форму или LWUIT. Может кто-нибудь, пожалуйста, помогите мне в этом.

1 Ответ

1 голос
/ 29 июля 2011

Я заметил, что вы только 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++;
    //...
}
//...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...