Java me J2me+;形式上的图像

Java me J2me+;形式上的图像,java-me,Java Me,我想制作一个时钟应用程序,用户在文本框中输入数字,然后单击“确定”,然后用户每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

我想制作一个时钟应用程序,用户在文本框中输入数字,然后单击“确定”,然后用户每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;
        }
    }
} }
公共命令GO,Exit;
TextField TxtData;
保护显示;
整数,计数器;
形式;
私人定时器;
私有TestTimerTask任务;
布尔增量,时间;
私有StringItem s1=新StringItem(“,”);
图像image0;
图像1;
图像2;
图像3;
图像4;
图像5;
图像6;
图像7;
图像8;
图像9;
图像动画;
受保护的void startApp(){
display=display.getDisplay(这个);
增量=真;
时间=假;
形式=新形式(“时钟”);
TxtData=新的文本字段(“数字:-”,“”,5,TextField.NUMERIC);
试一试{
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=newimage[]{image0,image1,image2,image3,image4,image5,image6,image7,image8,image9};
}捕获(IOEX异常){
System.out.println(“例外”);
}
GO=新命令(“GO”,Command.OK,1);
退出=新命令(“退出”,Command.Exit,2);
表格.附加(TxtData);
表格.附件(s1);
form.addCommand(GO);
form.addCommand(退出);
form.setCommandListener(this);
显示。设置当前(表格);
}
受保护的无效pauseApp(){
}
受保护的应用程序(布尔无条件){
timer.cancel();
通知销毁();
}
公共无效命令操作(命令cmnd,可显示的dsplbl){
String label=cmnd.getLabel();
if(标签等于(“Go”)){
试一试{
System.out.println(“txt==”+(TxtData.getString());
if(!TxtData.getString().equalsIgnoreCase(“”){
计数器=Integer.parseInt(TxtData.getString());
如果(时间){
timer.cancel();
task.cancel();
}
数字=1;
定时器=新定时器();
任务=新的TestTimerTask();
时间表(任务,1000,1000);
}
}捕获(NumberFormatException ex){
System.out.println(“例外”);
}
}else if(label.equals(“Exit”)){
销毁应用程序(真);
}
}
私有类TestTimerTask扩展了TimerTask{
公开最终作废运行(){
时间=真;
s1.setText(“+”数字);
如果(计数器<10){
form.append(secondAnimation[0]);
form.append(secondAnimation[0]);
追加(第二动画[编号]);
}否则,如果(计数器<100){
form.append(secondAnimation[0]);
附加(第二动画[(编号%100)/10]);
追加(第二动画[(编号%10)]);
}否则,如果(计数器<1000){
追加(第二动画[(编号%10)]);
附加(第二动画[(编号%100)/10]);
附加表格(第二动画[(编号/100)]);
}
数字++;
如果(数字==计数器+1){
数字=0;
}
}
} }
但是,当窗体在计时器移动时继续追加图像时,它不会显示所需的输出

我曾试图通过LWUIT来实现这一点,但由于我有用户10.png文件,并且添加了LWUIT.jar文件,因此.jar文件的大小为557kb,非常沉重

所以我只想通过正规形式来做


我不能使用画布,因为键盘可能会变化(触摸、qwerty等)。所以我只需要使用普通形式或LWIT。有人能帮我吗。

我注意到你只添加了
项,但从不删除-这是有意的吗

另外,您是否尝试了两种不同的形式来制作动画,而不是一种?对于简单的测试,比如说,并行填充它们,只需调用
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++;
    //...
}
//...
/。。。
私有空附加两次(图像){
表1.追加(图像);
表2.追加(图像);
}
//...
公开最终作废运行(){
时间=真;
s1.setText(“+”数字);
如果(计数器<10){
追加两次(secondAnimation[0]);
//...
}
display.setCurrent(number&1==0?form1:form2);
数字++;
//...
}
//...

我注意到您只添加了
项,但从未删除-这是有意的吗

另外,您是否尝试了两种不同的形式来制作动画,而不是一种?对于简单的测试,比如说,并行填充它们,只需调用
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++;
    //...
}
//...
/。。。
私有空附加两次(图像){
表1.追加(图像);
表2.追加(图像);
}
//...
公开最终作废运行(){
时间=真;
s1.setText(“+”数字);
如果(计数器<10){
追加两次(secondAnimation[0]);
//...
}
display.setCurrent(number&1==0?form1:form2);
数字++;
//...
}
//...

是否使用模糊处理?是否使用模糊处理?